Skip to content

Web search

Open-WebUI's "web search" feature is wired to a self-hosted SearXNG meta-search instance that ships with the platform. SearXNG forwards each query to a curated set of upstream search engines, merges the results, and returns them to Open-WebUI without ever logging the user's identity to the upstream providers.

This page explains the engine set, why it was chosen, and how to change it.

Why SearXNG

SearXNG is the privacy-aware search aggregator behind the platform's web-search feature. Compared to a single hosted search API, it has three advantages that matter to a self-hosted, data-sovereignty-focused deployment:

  • No vendor lock-in. Search is not bound to a single provider. Engines can be swapped without code changes.
  • No per-query cost. SearXNG is open source and self-hosted; there is no metered API key that needs renewal.
  • Auditable egress. The set of upstream engines is enumerated in configuration, so the outbound network surface is reviewable and stable.

Active engine set

The platform ships with seven engines enabled in infra/configs/searxng/settings.yml. The list is privacy-first with a Swiss/European lean, biased toward truly independent indexes:

EngineJurisdictionRole
BraveUSIndependent crawler/index, no tracking
DuckDuckGoUSMature no-tracking policy; proxies Bing for breadth
MojeekUKTruly-independent crawler (not proxying Google or Bing)
QwantFrance/EUEU-jurisdiction, GDPR-native
StartpageNetherlandsAnonymized Google results (Google quality without tracking)
Wikidatanon-profitStructured knowledge graph
Wikipedianon-profitEncyclopedic lookup

The corresponding outbound hostnames are documented in Network requirements so operators can configure egress firewall rules.

Engines that are not enabled

A few engines are intentionally absent from the default set, even though SearXNG supports them:

  • Google, Bing. Direct access to Google and Bing trades meaningful privacy for marginal coverage. Coverage is preserved indirectly: Startpage proxies Google with tracking stripped, and DuckDuckGo proxies Bing.
  • Yandex, Baidu, 360search. Russian and Chinese-jurisdiction engines are out of scope for a Swiss/EU-focused platform and raise compliance and censorship concerns.
  • Specialised category engines (images, videos, news subengines, code search, file search). Open-WebUI's web-search feature only consumes general-category results today, so specialised engines would add egress with no benefit.

A few engines we would have liked to include cannot be enabled today:

  • Marginalia (🇸🇪) — Swedish indie crawler with strong long-form content coverage. Disabled by default upstream and requires a per-deployment API key (see https://about.marginalia-search.com/article/api/).
  • Swisscows (🇨🇭) — privacy-focused Swiss search; no SearXNG engine module exists.
  • Ecosia (🇩🇪) — proxies Bing, no native SearXNG module.
  • Kagi — paid commercial service, no SearXNG module.

Customising the engine list

The active engines are controlled by the keep_only list in infra/configs/searxng/settings.yml:

yaml
use_default_settings:
  engines:
    keep_only:
      - brave
      - duckduckgo
      - mojeek
      - qwant
      - startpage
      - wikidata
      - wikipedia

To add an engine, append its name to keep_only, regenerate the compose files (make generate-compose), and restart the SearXNG container (docker compose -f infra/docker-compose.dev.yml --env-file .env up -d --no-deps --force-recreate searxng). The full upstream engine catalogue is in /usr/local/searxng/searx/settings.yml inside the container — running docker exec searxng grep "name:" /usr/local/searxng/searx/settings.yml lists everything available.

WARNING

Some engines (Marginalia, several specialised ones) are flagged disabled: true upstream and require additional configuration such as API keys. Adding them to keep_only alone will not enable them.

TIP

Whenever you change the engine list, update the Network requirements page so operators see the new outbound hostnames.

Disabling web search entirely

To remove web search from the platform, set ENABLE_WEB_SEARCH: False in the Open-WebUI environment block in infra/deployment/templates/docker-compose.yml.j2, regenerate the compose files, and recreate Open-WebUI. The searxng service can then also be removed from the template if no longer needed; this drops all web-search-related outbound network requirements.

Built with ❤️ in Switzerland 🇨🇭