--- type: reference description: "Valkey is the cache and limiter store for SearXNG." tags: - dankclaw - valkey timestamp: 2026-08-28 --- # Valkey Valkey is the cache and limiter store for SearXNG. It replaces Redis as the default in the official SearXNG deployment — the running build (2026.9.25+12f8b6515, `/config` 2026-10-18) reads a `valkey:` settings key and has no `redis:` key (`searx/settings.yml` at commit `12f8b6515`, https://raw.githubusercontent.com/searxng/searxng/12f8b6515/searx/settings.yml). **Host:** Dankclaw — **Docs:** https://valkey.io ## Facts (from research) | Item | Value | |------|-------| | Image | `docker.io/valkey/valkey:9-alpine` (`dankclaw/searxng/quadlet/searxng-valkey.container:19`; live container image reference `podman inspect searxng-valkey` 2026-10-18) | | Port | 6379 container-internal — the unit publishes **no** port (`dankclaw/searxng/quadlet/searxng-valkey.container` has no `PublishPort`; `ss -ltn 2026-10-18` shows nothing on 6379 and a TCP probe to `192.168.0.143:6379` is refused), so `shared/homepage/services.json` marks the card `wip: "closed"` | | Role | SearXNG limiter + result cache | ## Why Valkey Valkey is the Redis fork under the Linux Foundation umbrella, and the SearXNG project moved to it as the default cache: the pinned build's `searx/settings.yml` exposes `valkey: { url: … }` and has no `redis:` key (https://raw.githubusercontent.com/searxng/searxng/12f8b6515/searx/settings.yml). The `searxng-valkey` service name and the `valkey/valkey:9-alpine` image are this repo's choice (`dankclaw/searxng/quadlet/searxng-valkey.container:16-19`), matching the container name SearXNG's settings then point at. *(unverified 2026-10-18: the claim that upstream's own docker-compose ships a container named `searxng-valkey` is not checkable from this repo)* ## Configuration The valkey unit is `searxng-valkey.container` (see [[SearXNG]] for the trio). It joins the searxng network and is reachable by the name `searxng-valkey` (container name) and the alias `valkey`: ```ini [Container] ContainerName=searxng-valkey Network=searxng.network NetworkAlias=valkey Image=docker.io/valkey/valkey:9-alpine Volume=/opt/searxng/valkey:/data ``` SearXNG connects to it via `settings.yml`, which addresses the **container name**, not the alias — the alias is a second, working name for the same endpoint: ```yaml valkey: url: "valkey://searxng-valkey:6379/0" ``` Repo source `shared/searxng/settings.yml:22-23`; the deployed render `/opt/searxng/config/settings.yml:23` is byte-identical on this key (2026-10-18). It sets `WantedBy=default.target` and `Restart=always` (`dankclaw/searxng/quadlet/searxng-valkey.container:25-28`), the unit is installed at `~/.config/containers/systemd/searxng-valkey.container`, and `systemctl --user is-enabled` reports `generated` / `is-active` `active` with `Linger=yes` (host check 2026-10-18), so it starts at boot. ## Volumes | Container path | Host path | |----------------|-----------| | `/data` | `/opt/searxng/valkey` (`dankclaw/searxng/quadlet/searxng-valkey.container:20`; the live dir exists, owner uid 100998 — `ls -ld /opt/searxng/valkey` 2026-10-18) | ## Gotchas - The limiter relies on Valkey; without it SearXNG falls back to in-memory state and rate limiting is per-restart. *(unverified 2026-10-18: upstream fallback behaviour not read; the pinned default is `url: false`, i.e. no cache configured)* - The cache is reachable because both containers share one network: `searxng-valkey` joins `searxng.network` (`searxng-valkey.container:17`), and SearXNG itself has no network of its own — it reuses Gluetun's netns (`searxng.container:18`), and Gluetun is the member of `systemd-searxng` (10.89.2.0/24, `podman network inspect systemd-searxng` 2026-10-18). Keeping the cache off that network breaks SearXNG's limiter, not just the result cache. ## See Also - [[SearXNG]] — the consumer - [[Dankclaw Stack]]