Degoog Docs

Degoog Store and extensions

Add a repository, install what you want, keep it updated, and understand what you are trusting.

How the Store works

There is no central marketplace and no server between you and the extensions. A store repository is just a git repository whose package.json lists what it publishes. You add its URL, Degoog clones it, and its catalogue appears.

That means anyone can publish a store, including you. It also means nobody is vetting the code on your behalf.

The Store tab: repositories on top, catalogue underneath.
The Store tab, with repositories on top and the catalogue underneath.

Adding a repository

  1. Open Settings, Store.
  2. Paste a git URL into Add repository and press Add.
  3. The catalogue below fills in with everything that repository publishes.

The two you probably want:

  • Official: https://github.com/degoog-org/official-extensions. The only store curated and maintained by the Degoog team. These get automatically added to your store when you first install Degoog.
  • Community: browse the community extensions list for repositories published by other people.

Each repository row shows when it was last refreshed and has a Refresh button; Refresh all does the lot. Remove deletes a repository, but only once you have uninstalled everything you installed from it.

Finding things

The catalogue has a search box and two filters: extension type (Plugins, Themes, Engines, Transports, Autocomplete) and, for plugins, a sub-type filter (Bang, Slot, Search tab, Search bar). Extensions with screenshots get a gallery you can open in a lightbox.

The four plugin sub-types, in plain terms:

  • Bang adds a !command. See Bangs and commands.
  • Slot adds a panel above your results, below them, or in the sidebar, shown only when your query matches. The AI Summary, TMDb, Math, GitHub, and RSS plugins all work this way.
  • Search tab adds a whole extra tab to the results page.
  • Search bar adds a control next to the search box itself.

Plugins can also be interceptors (which rewrite your query before searching, like the Spell Check plugin), middleware (which can gate the whole settings area, like the OIDC single sign-on plugin), or routes (which add HTTP endpoints).

Installing, updating, removing

Install is one button. Installing a plugin shows a confirmation first, because plugins run code on your server.

When newer versions exist, the Store shows an update count and an Update all button. Individual items get their own Update.

After installing, go to the matching tab to switch it on. Engines, autocomplete providers, and themes all need enabling or selecting; some need configuration before they do anything. A "Needs configuration" badge tells you which.

Some extensions need a server restart to load properly. Degoog shows a banner in Settings, General with a button that does it.

Themes

A theme restyles the entire UI: templates, CSS, fonts, and assets. Degoog ships one built-in theme and the official store adds several more, including one styled after this very sexy documentation site.

For a smaller tweak than a whole theme, Settings, Server, Custom CSS injects your own CSS into every page. It loads after theme and plugin styles, so it wins by default.

The boring safety shit

Extensions run code on your server. Not sandboxed, not reviewed by anyone in the middle. A store repository is a git URL, and whoever controls that URL controls what runs on your machine.

Practical advice, none of it dramatic:

  • Community extensions are only initially vetted when they are added to the community list. Nobody watches them afterwards. What you install is your responsibility.
  • If your instance is reachable from the internet, put a password on settings. An unlocked instance lets anyone who can reach it install extensions, which means anyone can run code on your server. Set DEGOOG_SETTINGS_PASSWORDS, or run with DEGOOG_PUBLIC_INSTANCE=true, ideally both.
  • Read the exposure note on an extension card. "Browser may contact external services directly" means your own browser, not just the server, will talk to third parties.
  • DEGOOG_OUTGOING_ALLOWED_HOSTS restricts every outgoing request to a hostname allowlist, which is a solid extra layer on an exposed instance.

Tracking pre-release extensions

Setting DEGOOG_BETA_STORE=1 makes Degoog prefer the develop branch of every store repository over main or master, falling back silently when that branch does not exist. It is for extension developers and people who enjoy living slightly ahead of everyone else.