Degoog Docs

Degoog Environment variables

Everything you configure before Degoog starts, rather than from the settings page.

How to set them

Degoog reads its configuration from the process environment at startup. The usual way to supply it is a .env file: one KEY=value per line, no export prefix, # for comments.

Some things can only be set this way. DEGOOG_SETTINGS_PASSWORDS in particular is read exclusively from the environment; there is no settings UI and no on-disk file for it. If your instance is reachable from the internet, set it before the first start. An unlocked instance lets anyone install extensions, and extensions run code on your server.

# .env
DEGOOG_PORT=4444
DEGOOG_SETTINGS_PASSWORDS=your-secure-password
LOG_LEVEL=info

# Optional: listen on a Unix socket instead of a port
# DEGOOG_UNIX_SOCKET=/run/degoog/degoog.sock

Docker and Podman

Put .env next to your compose file and add env_file: .env to the service, or pass --env-file .env to docker run / podman run. Container images also honour PUID and PGID so ownership on mounted volumes matches your host user.

services:
  degoog:
    image: ghcr.io/degoog-org/degoog:latest
    env_file: .env
    volumes:
      - ./data:/app/data
    ports:
      - "4444:4444"

Native install or release tarball

Save .env in the project root next to package.json; Bun loads it automatically when you start from that directory. Always start Degoog from that directory, because paths like data/plugins resolve relative to the working directory.

Prebuilt archives are attached to each GitHub release. You also need bun, git, and curl on the host.

systemd

[Service]
WorkingDirectory=/opt/degoog
EnvironmentFile=/opt/degoog/.env
ExecStart=/usr/local/bin/bun run src/server/index.ts
Restart=on-failure

Viewing server logs

LOG_LEVEL controls how much gets printed. Where to read it:

  • Docker Compose: docker compose logs -f
  • Podman: podman logs -f degoog
  • systemd: journalctl -u degoog -f
  • Tarball or native: the terminal you started it in. Redirect stdout and stderr to a file if you run detached.

Server and networking

Variable Description Default
DEGOOG_PORT The port the server listens on. 4444
DEGOOG_UNIX_SOCKET Listen on a Unix domain socket instead of a TCP port, for example /run/degoog/degoog.sock. Degoog detects and removes a stale socket left behind by an unclean shutdown.
DEGOOG_BASE_URL Base path when serving behind a reverse proxy at a sub-path, for example /degoog. A full URL is accepted and only its path is used, so a bare domain with no sub-path has no effect. The OpenSearch descriptor always uses just the path portion so its URLs stay valid.
DEGOOG_DISTRUST_PROXY Whether to ignore X-Forwarded-For, X-Real-IP, and X-Forwarded-Proto when determining the client IP and protocol. Defaults to distrusting them, which is correct when Degoog is exposed directly, since otherwise any client could spoof its source IP. Set to 0 or false only behind a reverse proxy you control that strips those headers on the way in. 1
DEGOOG_OUTGOING_ALLOWED_HOSTS Comma-separated allowlist of hostnames Degoog may reach for outgoing requests. Wildcards such as *.example.com are accepted. Unset means no hostname restriction. A good hardening layer on an exposed instance.

Access and settings gate

Variable Description Default
DEGOOG_SETTINGS_PASSWORDS Comma-separated list of passwords for the settings page. If unset and the gate is not explicitly disabled, Degoog generates a one-off password for that run and prints it in the startup logs.
DEGOOG_DANGEROUSLY_NO_PASSWORD Set to true to remove the settings gate entirely. Degoog logs a loud warning at startup when this is on. Only sensible on a trusted local network. false
DEGOOG_PUBLIC_INSTANCE Set to true or 1 to run in public mode. Visitors get a cut-down settings page (appearance, search options, engine toggles) and every server-side mutation API returns Unauthorized. The admin panel moves to /admin, and is only reachable if a password is configured too.
DEGOOG_SETTINGS_PATH Moves the admin settings panel to a custom path. Defaults to settings on a normal instance and admin on a public one. Leading slashes are stripped. On a public instance the panel at this path returns 404 with no hint that it exists unless a password is also configured.

Behaviour and localisation

Variable Description Default
DEGOOG_DEFAULT_SEARCH_LANGUAGE Language applied to searches when the user has not picked one. Only the primary subtag is used, so en-US becomes en. Unset means no language is sent and each engine uses its own default.
DEGOOG_I18N Forces the UI locale for every request, overriding Accept-Language. For example en-US, fr-FR, it, he.
DEGOOG_WIZARD Set to false to suppress the first-run setup wizard regardless of persisted state. Useful when provisioning instances automatically.
DEGOOG_BETA_STORE Set to 1 to prefer the develop branch of every store repository over main or master, falling back silently when it does not exist. For extension developers and nightly testers.
LOG_LEVEL Console verbosity, from most to least severe: fatal, error, warn, info, log, debug. Each level includes the more severe ones. debug also prints plugin execution times. info
LOG_TRANSLATION Set to true for translation-specific logging: missing keys, locale resolution, broken locale files. Independent of LOG_LEVEL. false
NO_COLOR Set to any value to strip ANSI colour from all console output. Follows the no-color convention.

Cache

Variable Description Default
DEGOOG_VALKEY_URL Connection URL for Valkey, or any RESP-compatible server (Redis, KeyDB, Dragonfly). When set, Degoog uses it as a shared cache and cross-process invalidation bus, so replicas share search and autocomplete results and react to settings changes instantly. Without it, all caching is per-process and in memory. Example: redis://valkey:6379.
DEGOOG_CACHE_TTL_MS Default lifetime for cached search responses and autocomplete suggestions, in milliseconds. 43200000 (12 hours)
DEGOOG_CACHE_SHORT_TTL_MS Shorter lifetime used when a search came back with failed engines, so the next attempt refetches sooner. Also used by short-lived extension caches. 120000 (2 minutes)
DEGOOG_CACHE_MAX_ENTRIES Maximum entries per in-memory cache namespace. The least recently used entry is evicted on insert once the cap is reached. Only bounds the in-process cache; a shared Valkey cache is governed by Valkey's own maxmemory policy. 1000

Docker

Variable Description Default
PUID User ID the container process runs as. Match it to your host user so the mounted data directory stays writable. 1000
PGID Group ID the container process runs as. 1000

Data directories and files

Everything below defaults to somewhere inside the data directory, so overriding DEGOOG_DATA_DIR alone usually gets you what you want.

Variable Description Default
DEGOOG_DATA_DIR Root directory for all on-disk state. data (relative to the working directory)
DEGOOG_PLUGINS_DIR Installed plugins. data/plugins
DEGOOG_ENGINES_DIR Installed search engines. data/engines
DEGOOG_THEMES_DIR Installed themes. data/themes
DEGOOG_TRANSPORTS_DIR Installed transports. data/transports
DEGOOG_AUTOCOMPLETE_DIR Installed autocomplete providers. data/autocomplete
DEGOOG_SHORTCUTS_DIR Installed keyboard shortcuts. data/shortcuts
DEGOOG_PLUGIN_SETTINGS_FILE Per-extension settings for plugins, themes, engines, autocomplete providers, and transports. data/plugin-settings.json
DEGOOG_SERVER_SETTINGS_FILE Instance-level settings: honeypot, streaming, rate limits, API secret, wizard state, and the per-instance identifier used to namespace the shared cache. data/server-settings.json
DEGOOG_DEFAULT_ENGINES_FILE The instance's default enabled and disabled engines. data/default-engines.json
DEGOOG_SEARCH_LISTS_FILE Domain blocking, replacement, and scoring lists. Edit this directly when a list grows too large for the UI to render. data/search/search-lists.json
DEGOOG_ALIASES_FILE Your custom bang command aliases. data/aliases.json
DEGOOG_BLOCKLIST_FILE Banned IP addresses. data/blocklist.json
DEGOOG_SETTINGS_TOKENS_FILE Active settings session tokens. data/settings-tokens.json

Indexer

Variable Description Default
DEGOOG_POSTGRES Postgres connection URL. When set, the indexer uses Postgres instead of SQLite, which scales concurrent writes and full-text search far better on a busy instance.
DEGOOG_INDEXER_DIR Directory holding the index databases and its config. data/indexer
DEGOOG_INDEXER_DB Path to the main SQLite index file. data/indexer/index.db
DEGOOG_INDEXER_CONFIG_FILE Indexer filters and limits. Edit directly when a list is too large for the UI. data/indexer/indexer-config.json

SearX compatibility layer

Variable Description Default
DEGOOG_SEARX_ENGINES_DIR Where downloaded SearXNG engine files are kept. data/searx/engines
DEGOOG_SEARX_EXTRA_ENGINES Comma-separated SearXNG engine codes to treat as supported in addition to the built-in compatibility list. For trying engines that have not been verified yet.
DEGOOG_PYTHON_BIN Python interpreter used to run SearXNG engine files. python3

The degoog-mcp sidecar has its own DEGOOG_MCP_* variables, documented in the MCP README rather than here, since it is a separate process.