degoog

degoog

Docker app from fccview's Repository

Overview

degoog is a 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).

Degoog Logo

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.



Join our discord community


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:

https://community-scripts.org/scripts/degoog


Buy me a coffee

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

Star History Chart

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.

Open the Apps tab on your Unraid server Search Community Apps for Degoog Review the template variables and paths Click Install

Requirements

Don't forget to click **Show more settings...** for all **Variables**!

Related apps

Details

Repository
ghcr.io/degoog-org/degoog:latest
Last Updated2026-07-17
First Seen2026-05-14

Runtime arguments

Web UI
http://[IP]:[PORT:4444]
Network
bridge
Privileged
false

Template configuration

PORTPorttcp

You can change 4444 to any available port on your host system. Must match DEGOOG_PORT.

Target
4444
Default
4444
Value
4444
Appdata: dataPathrw

Holds plugins, themes, engines, transports, plugin settings and aliases.

Target
/app/data
Value
/mnt/user/appdata/degoog/data
PUIDVariable

Process User ID that the container will run as.

Default
99
Value
99
PGIDVariable

Process Group ID that the container will run as.

Default
100
Value
100
Degoog PortVariable

Port the server listens on inside the container. Must match the host port mapping above.

Target
DEGOOG_PORT
Default
4444
Value
4444
Base URLVariable

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
Log LevelVariable

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
Log TranslationVariable

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
Settings PasswordsVariable

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
Settings PathVariable

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
Public InstanceVariable

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
Distrust ProxyVariable

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 Search LanguageVariable

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
UI Locale (i18n)Variable

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
Plugins DirVariable

Optional. Directory to load custom command and slot plugins from.

Target
DEGOOG_PLUGINS_DIR
Default
data/plugins
Themes DirVariable

Optional. Directory to load custom themes from.

Target
DEGOOG_THEMES_DIR
Default
data/themes
Engines DirVariable

Optional. Directory to load custom search engine plugins from.

Target
DEGOOG_ENGINES_DIR
Default
data/engines
Transports DirVariable

Optional. Directory to load custom transports from.

Target
DEGOOG_TRANSPORTS_DIR
Default
data/transports
Autocomplete DirVariable

Optional. Directory to load custom autocomplete from.

Target
DEGOOG_AUTOCOMPLETE_DIR
Default
data/autocomplete
Plugin Settings FileVariable

Optional. Path to the JSON file storing extension settings (plugins, themes, engines, etc.).

Target
DEGOOG_PLUGIN_SETTINGS_FILE
Default
data/plugin-settings.json
Default Engines FileVariable

Optional. Path to the JSON file storing default enabled/disabled engines.

Target
DEGOOG_DEFAULT_ENGINES_FILE
Default
data/default-engines.json
Blocklist FileVariable

Optional. Path to the JSON file storing the IP addresses blocklist.

Target
DEGOOG_BLOCKLIST_FILE
Default
data/blocklist.json
Settings Tokens FileVariable

Optional. Path to the JSON file storing settings tokens.

Target
DEGOOG_SETTINGS_TOKENS_FILE
Default
data/settings-tokens.json
Aliases FileVariable

Optional. Path to the JSON file defining custom bang command aliases.

Target
DEGOOG_ALIASES_FILE
Default
data/aliases.json