GNOME Shell extensions

ID

gext

Home page

https://github.com/essembeh/gnome-extensions-cli

Version requirement

>= 0.11

Platforms

🅱️ BSD · 🐧 Linux · ⨂ Unix

Operations

installed · outdated · search · install · upgrade · upgrade_all · remove

purl types

pkg:gext

CLI name

gext

Forced environment

NO_COLOR=1

Issues and PRs

📦 manager: gext

Source

meta_package_manager/managers/gext.py

Manager of GNOME Shell extensions, from extensions.gnome.org.

Note

GNOME ships an official gnome-extensions tool, which is deliberately not what this wraps. That one installs from a local bundle and never reaches the extension registry, has no search, and offers no upgrade verb at all; its list --updates filters on a boolean carrying no available version, so it could not report an outdated package even in principle. gext reaches the registry, and every operation below rests on that.

Caution

An extension is identified by its UUID (caffeine@patapon.info), which is what the listing reports and what every other operation accepts. The human-readable name printed beside it is decoration and is never a valid argument.

Important

A running GNOME is required, whichever backend is in play. gext talks to GNOME Shell over D-Bus when a session is there and falls back to reading the filesystem otherwise, but even that fallback shells out to gsettings for the enabled-extension list, so a host without GNOME’s schemas fails rather than reporting an empty inventory. mpm leaves the backend choice to gext rather than forcing one, so a desktop session and a plain shell each get the path that works there.

Warning

The inventory forces --all. Left off, gext list reports only the enabled extensions, silently omitting every installed-but-disabled one: that is the tool’s own default and it would make the inventory a lie rather than a shorter list.

No sync: the registry is queried per operation and there is no index to refresh. No cleanup: nothing prunes anything.

No escalation: extensions install under the user’s own data directory.

Documentation: gnome-extensions-cli.

What mpm adds to gext

Through mpm, gext gains --exact and --extended search, to narrow to exact names or match descriptions.

Bigger still, mpm reaches across every manager at once: mpm installed and mpm outdated cover gext alongside every other manager you run in one table, mpm upgrade --all updates them together, and mpm sbom exports the whole machine as one bill of materials.

Every mpm command also gains --dry-run and --plan previews, cross-scheme version comparison and purl identifiers. See manager augmentations for how each one is built.

Your gext commands, in mpm

You already know gext: each operation maps one-to-one onto mpm, in an interface shared by every manager.

To…

With gext

With mpm

List what’s installed

gext list --all

mpm --gext installed

List outdated packages

gext update --dry-run

mpm --gext outdated

Search for a package

gext search caffeine

mpm --gext search caffeine

Install a package

gext install caffeine@patapon.info

mpm install pkg:gext/caffeine@patapon.info

Upgrade one package

gext update --yes caffeine@patapon.info

mpm --gext upgrade caffeine@patapon.info

Upgrade everything

gext update --yes

mpm --gext upgrade --all

Remove a package

gext uninstall caffeine@patapon.info

mpm remove pkg:gext/caffeine@patapon.info

Prefix any command above with --dry-run to simulate the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.

Operations

Operation

Supported

Notes

installed

outdated

orphans

search

exact and extended search backfilled by mpm

install

upgrade

upgrade_all

remove

sync

cleanup

doctor

Selecting and configuring gext

Deselect gext for a single run with --no-gext, or persist the choice in your configuration:

[mpm]
gext = false

The arguments and environment variables listed in the box atop this page are forced on every gext call, so runs stay quiet, non-interactive and reproducible: the defaults you would set in CI anyway.

Keep it enabled but tune how mpm drives it with a per-manager override:

[mpm.managers.gext]
timeout = 900

mpm config-template gext prints every overridable attribute as a ready-to-paste block.

Recipes

A few jobs you would otherwise script around gext, one mpm command each:

  • Snapshot and clone a machine: mpm --gext dump gext.toml, then mpm restore gext.toml on the next one.

  • Export a compliance SBOM: mpm --gext sbom (CycloneDX by default, --spdx for SPDX).

Privilege escalation

mpm runs this manager as the current user and never prepends sudo by default. Flip the policy for its privileged operations with --sudo or the per-manager sudo override.

See privilege escalation for the full policy.

Cooldown

State of GNOME Shell extensions’s release-age gating, from the cooldown support table:

Status: ❌ None

A cooldown only pays off where a compromised release can be withdrawn while the clock runs, and can only be emulated where the registry dates its releases. From the retraction table:

  • Registry: extensions.gnome.org

  • Retraction: Not documented: the review guidelines govern approval before publication and say nothing about withdrawing an extension afterwards, so what happens to a published extension later found malicious is unrecorded rather than known to be nothing.

With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --allow-unsupported-managers opts back in.

Version probe

The version is probed by running:

$ gext --version
gext 0.11.0

and extracted with:

r"^gext\s+(?P<version>\S+)$"

Reference traces

Raw native outputs captured in the manager source: the reference mpm’s parsers were written against. If you know GNOME Shell extensions well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ gext list --all
🔵 Dash to Dock (dash-to-dock@micxgx.gmail.com) v92 /user
🔵 Version Free (no-version@example.org)  /user
⚪ Caffeine (caffeine@patapon.info) v58 /user
$ gext update --dry-run
[1] Found extension Caffeine (caffeine@patapon.info) v60 : outdated
[2] Found extension Dash to Dock (dash-to-dock@micxgx.gmail.com) v105 : outdated

📦 Extensions to update:
   caffeine@patapon.info
   dash-to-dock@micxgx.gmail.com

Feed any of these through mpm and the raw output becomes one uniform table, the same shape for every manager: filter it, project columns, or export it (mpm --gext installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.

Changelog

  • 7.7.0.dev0 (unreleased)

    • Implement gext, covering GNOME Shell extensions from extensions.gnome.org. The inventory forces --all, without which only enabled extensions are reported, and outdated reads a dry run that exits 17 once it has something to report.