
The XDA piece on GNOME extensions put the frustration into words: half of GNOME’s best user-facing features are third-party extensions that break every six months when the shell version bumps. The Firefox integration that the extensions.gnome.org site depends on is fragile too. These best apps for managing GNOME shell extensions on Linux give you install, update, backup, and rollback without opening a browser once.
What to look for in an extension manager
- Native GNOME UI. Extensions are for GNOME, so the manager should look like it belongs there.
- Update batching. Updating one extension at a time is a fast route to a broken shell.
- Backup and restore. After a distro upgrade, restoring your extension set should be one file, not an hour of clicking.
- Compatibility checks. The best tools warn when an extension does not declare the current shell version supported.
- Command line. A CLI matters for scripting and for setting up new machines without a browser.
Quick comparison
| App | Best for | Free plan | Standout | Distro packaging |
|---|---|---|---|---|
| Extension Manager (mjakeman) | The default answer | Free | Browse, install, and update in one window | Flathub, most distros |
| GNOME Extensions app (built-in) | The bare minimum | Free | Enable/disable and settings | Every GNOME install |
| gext | Scripting extensions | Free | CLI-first, cross-distro | AUR, pip |
| gnome-shell-extension-installer | Ubuntu install scripting | Free | Wget-friendly bash script | Manual, upstream repo |
| Extension Rollback | Recovering from bad updates | Free | Reverts to previous version | Flathub |
| Fedora Extension Sets | Distro-endorsed picks | Free | Curated by Fedora, guaranteed compatible | Fedora Workshops repo |
| Déjà Dup | Full-system backup that catches extensions | Free | Backups on a schedule | Every major distro |
The apps
1. Extension Manager — best default answer
Extension Manager by Matthew Jakeman is what most modern users mean when they talk about a “GNOME extensions app.” Browse extensions.gnome.org inside a native window, install with one click, batch-update, and configure per-extension settings without launching Firefox.
Where it falls short: it depends on the extensions.gnome.org API. If GNOME.org rate-limits or the site is down, the browse tab breaks. It does not do version rollback on its own.
Pricing:
- Free: GPL 3.
- Paid: none.
Platforms: Linux (any GNOME desktop). Download: Extension Manager on Flathub Bottom line: the first app to install after any fresh GNOME desktop.
2. GNOME Extensions app — best bare minimum
GNOME Extensions app ships with every GNOME install now. It cannot browse or install; it can enable, disable, uninstall, and open the per-extension settings dialog. Combined with the Flatpak Extension Manager it covers everything.
Where it falls short: installation is browser-only. No update-all button. No version compatibility warnings.
Pricing:
- Free: bundled with GNOME.
- Paid: none.
Platforms: Linux (any GNOME desktop).
Download: already installed on any GNOME desktop, otherwise gnome-extensions-app from your distro package manager.
Bottom line: what everyone actually uses on day one, then supplements with something better.
3. gext — best CLI for scripting
gext is a Python CLI that talks to extensions.gnome.org from a terminal. gext search dash to dock, gext install <uuid>, gext update, gext export > extensions.txt. The export file makes moving your extension set between machines a one-line paste.
Where it falls short: installs go through gnome-shell live-update mechanics, so you still need to log out and back in for shell-level extensions to take effect.
Pricing:
- Free: MIT.
- Paid: none.
Platforms: Linux (any GNOME desktop).
Download: essembeh/gnome-extensions-cli via pip install gnome-extensions-cli or AUR.
Bottom line: the tool for the “I ran a bash script and my new laptop looks like my old one” moment.
4. gnome-shell-extension-installer — best for scripted Ubuntu setups
gnome-shell-extension-installer is a single bash script that fetches an extension archive from extensions.gnome.org by ID and installs it locally. Perfect for cloud-init scripts, Ansible plays, or a first-boot script on a fresh Ubuntu install.
Where it falls short: no update mechanism. Nothing prevents you from installing something incompatible.
Pricing:
- Free: MIT.
- Paid: none.
Platforms: Linux (Ubuntu, Debian, Fedora, Arch). Download: gnome-shell-extension-installer on GitHub Bottom line: the least-graphical option, ideal in automation.
5. Extension Rollback — best recovery tool
Extension Rollback keeps a history of every extension version you install and lets you revert if a shell update breaks it. Useful when a nightly extensions.gnome.org release is buggier than the one that ran fine yesterday.
Where it falls short: does not prevent bad installs, only recovers from them. Needs to run before the bad update to have anything to roll back to.
Pricing:
- Free: MIT.
- Paid: none.
Platforms: Linux (any GNOME desktop). Download: Extension Rollback on Flathub Bottom line: worth installing the first time GNOME 48 comes and half your extensions stop working.
6. Fedora Extension Sets — best distro-endorsed picks
Fedora Extension Sets are Fedora Project-curated bundles of extensions tested to work together on the current Fedora release. Install the set, get a preconfigured tray/dash/system-monitor loadout, and Fedora commits to keeping them working during the release lifecycle.
Where it falls short: Fedora-only. Sets are opinionated; the maintainers will not add every extension you love.
Pricing:
- Free: Fedora Project.
- Paid: none.
Platforms: Linux (Fedora Workstation).
Download: dnf install gnome-shell-extension-sets on Fedora.
Bottom line: the safest way to run extensions if you can pick your distro to fit them.
7. Déjà Dup — best full-system backup that catches extensions
Déjà Dup is the default backup app on GNOME and catches ~/.local/share/gnome-shell/extensions alongside everything else in your home directory. If a distro upgrade nukes your carefully tuned setup, one restore brings it all back.
Where it falls short: it is a general backup tool, not an extension manager. Restoring extensions across shell versions still needs a compatibility check afterwards.
Pricing:
- Free: GPL 3.
- Paid: none.
Platforms: Linux (any GNOME desktop). Download: Déjà Dup on Flathub Bottom line: the “why did I not do this before the distro upgrade” tool.
How to pick the right one
For most users: install Extension Manager, keep the built-in GNOME Extensions app for enable/disable, add Extension Rollback the first time you have a bad update. For setup automation across machines: gext or gnome-shell-extension-installer in your dotfiles. For a family Fedora laptop: Fedora Extension Sets and hands off. Everyone: run Déjà Dup on a schedule so a distro upgrade cannot cost you a weekend of clicking. Stay browser-only if you install one extension a year and never care again.
FAQ
Do I still need the Firefox integration to install extensions?
Not with Extension Manager or gext. Both talk to extensions.gnome.org directly. The Firefox path still works but is no longer required.
Why do my extensions break every GNOME release?
Extensions declare which shell versions they support. When GNOME publishes a new shell major version, most extensions need small updates before they enable again. Extension Manager and Fedora Extension Sets both surface which of your extensions have not been updated for the current shell.
How do I recover after a GNOME update breaks my desktop?
Log in to a fallback session (usually Wayland on X11), open Extension Manager or the built-in app, and disable all extensions. Log out and back in. Re-enable one at a time to find the guilty party, or use Extension Rollback to revert its version.
How do I check if an extension is safe before installing?
Extension Manager shows the extensions.gnome.org page inline including the source-code link. Read that first for anything requesting system integration or launcher hooks. Every published extension is manually reviewed but the review is not a security audit.
How do I copy my extension list to a new machine?
gext export > ~/extensions.txt, copy the file across, gext install $(cat ~/extensions.txt). Or restore your Déjà Dup backup and everything else follows.