A documentation-based guide. The configuration comes from the SearXNG settings file in the Vane repository, and the explanations follow the official SearXNG documentation. We have not benchmarked SearXNG engines or tested this setup on our own hardware.
When you need your own SearXNG
Vane uses SearXNG, a metasearch engine, to fetch web results. The standard itzcrazykns1337/vane:latest image bundles SearXNG, so a basic Docker installation needs no separate search setup.
You need your own SearXNG instance when you:
- use the
slim-latestimage, which leaves SearXNG out; - install Vane without Docker; or
- already run SearXNG and want Vane to share it.
The Vane README requires two things from that instance: the JSON format enabled in its settings, and the Wolfram Alpha search engine enabled.
The settings.yml Vane needs
The Vane repository ships a SearXNG settings file. Here it is with the secret key replaced by a placeholder:
use_default_settings: true
general:
instance_name: 'searxng'
search:
autocomplete: 'google'
formats:
- html
- json
server:
secret_key: 'REPLACE_WITH_YOUR_OWN_SECRET'
engines:
- name: wolframalpha
disabled: false- use_default_settings
- Keeps SearXNG’s built-in defaults and applies only the changes listed in your file. Engines are merged by name.
- formats
- Lists the result formats SearXNG serves. The default is
htmlonly. Vane needsjson. - wolframalpha
disabled: falseturns the Wolfram Alpha engine on, as the Vane README requires.
SearXNG reads its settings from the path in the SEARXNG_SETTINGS_PATH environment variable, or from /etc/searxng/settings.yml. If you already have a settings file, add json to search: formats and the wolframalpha entry under engines: rather than replacing your configuration.
Set your own secret key
SearXNG uses secret_key for cryptographic purposes, and its documentation marks the example value “change this!”. The key in Vane’s repository is public, so do not reuse it for your own instance. You can set it in settings.yml or through the SEARXNG_SECRET environment variable, which overrides the file.
One way to generate a random value:
openssl rand -hex 32This command is our suggestion. The SearXNG documentation does not prescribe a generator. Keep the value out of screenshots, public repositories, and support posts.
Run SearXNG with Docker
Save the file as config/settings.yml, then start SearXNG with the command from the SearXNG Docker documentation:
docker run --name searxng -d \
-p 8888:8080 \
-v "./config/:/etc/searxng/" \
-v "./data/:/var/cache/searxng/" \
docker.io/searxng/searxng:latestThe config folder is mounted at /etc/searxng, where SearXNG reads settings.yml. The data folder keeps cached data. SearXNG is then available at http://localhost:8888 on the host.
Restart SearXNG after you change settings.yml:
docker restart searxngKeep it private. The command publishes port 8888 on all host interfaces. For a private Vane setup, do not forward this port to the internet, and restrict it with your firewall. This is our security guidance.
Test the JSON API before connecting Vane
Ask SearXNG for JSON directly, using the request format from the SearXNG search API documentation:
curl 'http://localhost:8888/search?q=searxng&format=json'A working instance returns JSON search results. According to SearXNG, requesting a format that is not enabled returns a 403 Forbidden error. If you see that, check search: formats in settings.yml and restart SearXNG.
Connect the Vane slim image
The Vane README starts the slim image with your SearXNG URL in SEARXNG_API_URL:
docker run -d -p 3000:3000 -e SEARXNG_API_URL=http://your-searxng-url:8080 -v vane-data:/home/vane/data --name vane itzcrazykns1337/vane:slim-latestReplace http://your-searxng-url:8080 with your real address. Two details matter:
- Use the published port. SearXNG listens on 8080 inside its container. The Docker command above publishes it on host port 8888, so use 8888 when you connect through the host.
- Use an address the Vane container can reach. As with Ollama,
localhostinside the Vane container is the container itself. Docker Desktop provideshost.docker.internalfor the host; on Linux, use the host’s private IP. See our connection guide.
Then open localhost:3000 and configure your model provider in Vane’s setup screen. For a non-Docker installation, enter the SearXNG URL in the setup screen instead.
Common problems
403 Forbidden when requesting format=json
JSON is not listed under search: formats in settings.yml. SearXNG only allows the formats listed there; by default, that is html. Add json, restart SearXNG, and test again.
Vane cannot connect to SearXNG
Check SEARXNG_API_URL. Inside the Vane container, localhost is the container itself. Use an address the container can reach and the port SearXNG is published on, for example 8888 with the Docker command above.
My settings.yml changes have no effect
Confirm the file is at /etc/searxng/settings.yml inside the container, or at the path in SEARXNG_SETTINGS_PATH, and restart SearXNG. If the file is missing, empty, or unreadable, SearXNG falls back to its built-in defaults.
A public SearXNG instance refuses JSON
Many public instances disable the JSON format. Run your own instance instead of pointing Vane at someone else’s server.
Some engines stop returning results
After errors such as CAPTCHAs, access denied, or too many requests, SearXNG suspends the engine for a while. The durations are set by suspended_times in the search: section; for example, the default for “too many requests” is 3600 seconds.
Sources and editorial notes
- Vane — SearXNG configuration in the repository
- Vane — using your own SearXNG instance
- SearXNG — settings.yml location and use_default_settings
- SearXNG — search settings and formats
- SearXNG — server settings and secret key
- SearXNG — search API and 403 behavior
- SearXNG — Docker installation
This independent guide is not affiliated with Vane or SearXNG. SearXNG documentation was checked on October 23, 2026. Both projects can change after that date.
Want the simplest setup?
The standard Vane image bundles SearXNG for you.