Install, update and manage your Gnome Shell extensions from your terminal !
gext updateAvailable commands:
gext list to list you installed extensionsgext search to search for extensions on Gnome websitegext install to install extensionsgext update to update any or all your extensionsgext uninstall to uninstall extensionsgext show to show details about extensionsgext enable to enable extensionsgext disable to disable extensionsgext preferences to open the extension configuration windowNote:
gextis an alias ofgnome-extensions-cli
Releases are available on PyPI
Note: PipX is the recommended way to install 3rd-party apps in dedicated environments.
# install using pip
$ pip3 install --upgrade gnome-extensions-cli
# or using pipx (you need to install pipx first)
$ pipx install gnome-extensions-cli --system-site-packages
# gext is an alias for gnome-extensions-cli
$ gnome-extensions-cli --help
$ gext --help
You can also install the latest version from the Git repository:
$ pip3 install --upgrade git+https://github.com/essembeh/gnome-extensions-cli
You can setup a development environment with, requires Poetry
# dependencies to install PyGObject with pip
$ sudo apt install libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0
# clone the repository
$ git clone https://github.com/essembeh/gnome-extensions-cli
$ cd gnome-extensions-cli
# install poetry if you don't have it yet
$ pipx install poetry
# create the venv using poetry
$ poetry install
$ poetry shell
(.venv) $ gnome-extensions-cli --help
By default commands output use terminal colors and styles for a better experience.
If you want to disable the colors and style, when using gext in shell scripts for example, you can
- use gext --no-color ...
- or set the environment variable export NO_COLOR=1 in your shell script before calling gext
By default, the list command only display the enabled extensions, using -a|--all argument also displays disabled ones.

The install commands allows you to install extensions from their uuid or pk.
Note: You can use
searchcommand to find extensions,gextprints uuids in yellow .
# Install extension by its UUID
$ gext install dash-to-panel@jderose9.github.com
# or use its package number from https://extensions.gnome.org
$ gext install 1160
# You can also install multiple extensions at once
$ gext install 1160 todo.txt@bart.libert.gmail.com
# Uninstall extensions
$ gext uninstall todo.txt@bart.libert.gmail.com
# You can enable and disable extensions
$ gext enable todo.txt@bart.libert.gmail.com
$ gext disable todo.txt@bart.libert.gmail.com dash-to-panel@jderose9.github.com

The update command without arguments updates all enabled extensions.
You can also update a specific extension by giving its uuid.

Note: the
--installargument allow you to install extensions given toupdatecommand if they are not installed.
The search command searches from Gnome website and prints results in your terminal:

The show command fetches details from Gnome website and prints them:

gext can interact with Gnome Shell using two different implementations, using dbus or using a filesystem operations.
Note: By default, it uses
dbus(as it is the official way), but switches tofilesystemifdbusis not available (like with ssh sessions)
Using --dbus, the application uses dbus messages with DBus Python API to communicate with Gnome Shell directly.
Installations are interactive, like when you install extensions from your browser on Gnome website, you are prompted with a Gnome Yes/No dialog before installing the extensions
Pros:
gext edit EXTENSION_UUIDCons:
Using --filesystem, the application uses unzip packages from Gnome website directly in you ~/.local/share/gnome-shell/extensions/ folder, enable/disable them and restarting the Gnome Shell using subprocesses.
Pros:
gext alternatives CLI tools use this methodCons:
$ claude mcp add gnome-extensions-cli \
-- python -m otcore.mcp_server <graph>