GNOME Shell extensions¶
- ID
gext- Home page
- 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
- Source
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 |
With |
|---|---|---|
List what’s installed |
|
|
List outdated packages |
|
|
Search for a package |
|
|
Install a package |
|
|
Upgrade one package |
|
|
Upgrade everything |
|
|
Remove a package |
|
|
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 |
|---|---|---|
|
✓ |
|
|
✓ |
|
|
||
|
✓ |
exact and extended search backfilled by |
|
✓ |
|
|
✓ |
|
|
✓ |
|
|
✓ |
|
|
||
|
||
|
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, thenmpm restore gext.tomlon the next one.Export a compliance SBOM:
mpm --gext sbom(CycloneDX by default,--spdxfor 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, andoutdatedreads a dry run that exits17once it has something to report.