All apps · 0 apps
degoog
Docker app from fccview's Repository
Overview
Readme
View on GitHub
degoog
Search aggregator that queries multiple engines and shows results in one place. You can add custom search engines, bang-command plugins, slot plugins (query-triggered panels above/below results or in the sidebar), and transports (custom HTTP fetch strategies like curl, FlareSolverr, or your own). The dream would be to eventually have a user made marketplace for plugins/engines.
Now in stable beta. You can use it in production but there may be some inconsistent behaviour.
Please check the documentation before raising issues, your questions may already have been answered.
Run
By default the app will run on port 4444 with user 1000:1000, please check the documentation for a comprehensive list of env variables and various nuances.
mkdir -p ./data
sudo chown -R 1000:1000 ./data
Docker Compose
Ready-to-use compose files live in docker-compose-examples/. Pick the one that fits:
| File | What it runs | When to use |
|---|---|---|
simple.yml |
degoog only | Personal use, low-traffic |
valkey.yml |
degoog + Valkey | Multi-replica or public instance with shared cache keeps settings and invalidation in sync |
postgres.yml |
degoog + Postgres | Busy public instance with a large indexer - Postgres scales concurrent writes and FTS better than SQLite |
full.yml |
degoog + Valkey + Postgres | High-traffic public instance - both shared cache and scalable indexer |
mcp.yml |
degoog + degoog-mcp | Exposing Degoog to LLMs / MCP clients (Claude, Cursor, llama.cpp) next to the web UI |
Inline podman
# Set DEGOOG_SETTINGS_PASSWORDS before exposing this instance to the internet -
# an unlocked instance lets anyone install extensions, which runs code on the server.
podman run -d --name degoog -p 4444:4444 -v ./data:/app/data -e DEGOOG_SETTINGS_PASSWORDS=changeme --security-opt label=disable --restart unless-stopped ghcr.io/degoog-org/degoog:latest
Podman Quadlet Container File
[Unit]
Description=Degoog selfhosted search aggregator
Wants=network-online.target
After=network-online.target
[Container]
Image=ghcr.io/degoog-org/degoog:latest
AutoUpdate=registry
ContainerName=degoog
Environment=TZ=<Country/City>
Environment=PUID=1000
Environment=PGID=1000
# Set a password before exposing this instance to the internet - an unlocked
# instance lets anyone install extensions, which runs code on the server.
Environment=DEGOOG_SETTINGS_PASSWORDS=changeme
# Environment=DEGOOG_PUBLIC_INSTANCE=true # Add if public
UIDMap=+%U:@%U
Volume=<Path to config>:/app/data:Z
PublishPort=4444:4444
Network=degoog
[Service]
Restart=always
[Install]
WantedBy=default.target
Inline docker
# Set DEGOOG_SETTINGS_PASSWORDS before exposing this instance to the internet -
# an unlocked instance lets anyone install extensions, which runs code on the server.
docker run -d --name degoog -p 4444:4444 -v ./data:/app/data -e DEGOOG_SETTINGS_PASSWORDS=changeme --restart unless-stopped ghcr.io/degoog-org/degoog:latest
Run natively
You'll need a .env file for your env variables and the following required dependencies:
git clone https://github.com/degoog-org/degoog.git
cd degoog
bun install
bun run build
bun run start
note: If HTTPS requests fail with certificate errors, install the ca-certificates package
Proxmox VE Script
The community Proxmox script exists, but it is currently marked as in development and not recommended for production use:
Public instances
Some amazing people around the web decided to make their degoog instances available for everyone to use, and they 100% deserve a shout-out! Check out the full list here
Store repositories
Aside from the official store repo community members have been working hard on their own plugins and been sharing them with everyone who wants to enhance their degoog experience. You can find a bunch of them here.
Note: These have only been INITIALLY vetted, there is no way for me to keep an eye on them once they have been added to the community store repo. If your own responsibiilty to make sure what you install on your system is safe.
Documentation
Full customisation guide (plugins, themes, engines, transports, store, settings gate, aliases, env): documentation.
Little shoutout
This project would have never existed if the amazing searxng developers hadn't had the idea first. This is my take on a heavily customisable search aggregrator, it's meant to be a more modular lighter alternative, you can add as much as you want to it, but the core will stay as simple as it gets.
Alternatives are what make the internet a fun place, let me share a few other aggregators you may want to try out, the beauty of open source is that there's no competition (or at least there shouldn't be, none of us do this shit for money after all).
| name | repo |
|---|---|
| searxng | https://github.com/searxng/searxng |
| 4get | https://git.lolcat.ca/lolcat/4get |
| OmniSearch | https://git.bwaaa.monster/omnisearch |
| LibreY | https://github.com/Ahwxorg/LibreY |
Media gallery
Install Degoog on Unraid in a few clicks.
Find Degoog in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/degoog-org/degoog:latestRuntime arguments
- Web UI
http://[IP]:[PORT:4444]- Network
bridge- Privileged
- false
Template configuration
You can change 4444 to any available port on your host system. Must match DEGOOG_PORT.
- Target
- 4444
- Default
- 4444
- Value
- 4444
Holds plugins, themes, engines, transports, plugin settings and aliases.
- Target
- /app/data
- Value
- /mnt/user/appdata/degoog/data
Process User ID that the container will run as.
- Default
- 99
- Value
- 99
Process Group ID that the container will run as.
- Default
- 100
- Value
- 100
Port the server listens on inside the container. Must match the host port mapping above.
- Target
- DEGOOG_PORT
- Default
- 4444
- Value
- 4444
Optional. Base path for serving Degoog behind a reverse proxy at a sub-path (e.g. /degoog). A full URL is also accepted — only the path portion is used. Leave empty to serve at the root /.
- Target
- DEGOOG_BASE_URL
Controls the verbosity of server-side console output. Supported levels from most to least severe: fatal, error, warn, info, log, debug. Each level includes all levels of higher severity. Set to debug to print all messages, including plugin execution times.
- Target
- LOG_LEVEL
- Default
- info|fatal|error|warn|log|debug
- Value
- info
Optional. Set to true to enable translation-specific log output. This is a separate toggle from LOG_LEVEL and is off by default. Useful when debugging missing keys, locale resolution misses, or broken locale files.
- Target
- LOG_TRANSLATION
- Default
- false|true
- Value
- false
Optional. Comma-separated list of passwords for the Settings page. If set, users must enter one of these to access Settings (unless a middleware plugin is used as the settings gate).
- Target
- DEGOOG_SETTINGS_PASSWORDS
Optional. Custom path for the admin settings panel. Defaults to /admin on public instances and /settings on private ones. Set to a hard-to-guess string to make the panel undiscoverable (e.g. my-secret-panel-abc123). Leading slashes are stripped automatically. Note: on public instances this path only works if DEGOOG_SETTINGS_PASSWORDS is also set.
- Target
- DEGOOG_SETTINGS_PATH
Optional. When set to a truthy value (e.g. true, 1), the instance runs in read-only mode: settings show only theme and engine toggles, no tabs; all server-side mutation APIs return Unauthorized.
- Target
- DEGOOG_PUBLIC_INSTANCE
Optional. Controls whether Degoog trusts X-Forwarded-For, X-Real-IP and X-Forwarded-Proto headers for client IP, rate limiting, IP banning and HTTPS detection. Defaults to 1 (distrust), which is the safe choice when Degoog is exposed directly to the internet, since trusting these headers lets any client spoof their source IP and protocol. Set to 0 only when Degoog sits behind a reverse proxy (nginx, caddy, traefik, etc.) that you control and that strips or rewrites these headers on incoming requests.
- Target
- DEGOOG_DISTRUST_PROXY
- Default
- 1|0
- Value
- 1
Default ISO 639-1 language code applied to all searches when no language is selected by the user (e.g. en, de, it).
- Target
- DEGOOG_DEFAULT_SEARCH_LANGUAGE
- Default
- en-US
- Value
- en-US
Optional. Forces the UI locale for all requests, overriding the Accept-Language header (e.g. en-US, fr-FR). Unset or empty: Accept-Language is used.
- Target
- DEGOOG_I18N
Optional. Directory to load custom command and slot plugins from.
- Target
- DEGOOG_PLUGINS_DIR
- Default
- data/plugins
Optional. Directory to load custom themes from.
- Target
- DEGOOG_THEMES_DIR
- Default
- data/themes
Optional. Directory to load custom search engine plugins from.
- Target
- DEGOOG_ENGINES_DIR
- Default
- data/engines
Optional. Directory to load custom transports from.
- Target
- DEGOOG_TRANSPORTS_DIR
- Default
- data/transports
Optional. Directory to load custom autocomplete from.
- Target
- DEGOOG_AUTOCOMPLETE_DIR
- Default
- data/autocomplete
Optional. Path to the JSON file storing extension settings (plugins, themes, engines, etc.).
- Target
- DEGOOG_PLUGIN_SETTINGS_FILE
- Default
- data/plugin-settings.json
Optional. Path to the JSON file storing default enabled/disabled engines.
- Target
- DEGOOG_DEFAULT_ENGINES_FILE
- Default
- data/default-engines.json
Optional. Path to the JSON file storing the IP addresses blocklist.
- Target
- DEGOOG_BLOCKLIST_FILE
- Default
- data/blocklist.json
Optional. Path to the JSON file storing settings tokens.
- Target
- DEGOOG_SETTINGS_TOKENS_FILE
- Default
- data/settings-tokens.json
Optional. Path to the JSON file defining custom bang command aliases.
- Target
- DEGOOG_ALIASES_FILE
- Default
- data/aliases.json