Ginger is a GNOME app that lists the snaps installed on your system and lets
you review, connect and disconnect their interface permissions — the same
thing as snap connections, snap connect and snap disconnect.
Version 0.2.0. Working now: listing snaps with their connected and available counts, permissions per snap with switches, confirmations by danger tier, an undo toast after each change, a saved original state of every snap's connections, and Restore — returning one snap, selected snaps or all snaps to their saved state.
Ubuntu (or another distribution) with snapd and GNOME, and Flatpak to install. Nothing else.
Build and install the Flatpak from the repository root:
flatpak-builder --user --install --force-clean build-dir io.github.massivemarmot.Ginger.ymlTo produce a shareable bundle:
flatpak build-bundle ~/.local/share/flatpak/repo ginger-0.2.0.flatpak io.github.massivemarmot.GingerThe bundle contains only the app; Flatpak fetches the GNOME runtime from Flathub on install.
Install a bundle with:
flatpak install --user ginger-0.2.0.flatpak
flatpak run io.github.massivemarmot.GingerVerify a download: compare sha256sum ginger-0.2.0.flatpak with the
hash in the release notes.
Build commands verified on the maintainer's VM: 2026-10-18.
Ginger talks to snapd over its local socket, /run/snapd.socket. The Flatpak
grants exactly one extra permission for this: --filesystem=/run/snapd.socket
(plus --socket=wayland for the window). Through the socket it lists snaps
and reads and changes interface connections; it uses the socket for nothing
else.
Inspect the permission at any time:
flatpak info --show-permissions io.github.massivemarmot.GingerRevoke it (Ginger will then report that it cannot reach snapd):
flatpak override --user --nofilesystem=/run/snapd.socket io.github.massivemarmot.GingerReading connections needs no authorization. Every change — a connect or a disconnect — may trigger a polkit approval dialog shown by the system; polkit may cache an approval for a few minutes, so consecutive changes can share one approval, but each change can ask. Ginger cannot bypass it.
The GINGER_DATA_DIR and SNAPD_SOCKET environment variables are test
hooks and are ignored inside the Flatpak.
Ginger makes no network connections, sends no telemetry, and logs nothing about snap or plug names.
- Every disconnect asks for confirmation before it is sent.
- Connecting sensitive interfaces (for example
removable-mediaorssh-keys) asks for confirmation. - Unknown interfaces are treated as sensitive.
- Some interfaces (for example
docker-supportandsnapd-control) are privileged: the Permissions switch never connects them, and Ginger connects one only to put back a connection the saved original state records as connected (Restore and Undo), with a strong warning and the usual approval. A connection can always be disconnected. - Disconnecting some interfaces (
desktop,wayland,x11,opengl,network,audio-playback) can stop an app from working or prevent it from starting; the confirmation says so.
On first sight of each snap, Ginger saves which of that snap's plugs were
connected, and on which interface, in baseline.json inside the
Flatpak's app data at ~/.var/app/io.github.massivemarmot.Ginger/data/ginger/,
with a mirror copy baseline.json.bak rewritten together with it. Ginger
never deletes or overwrites an entry; the files are rewritten only to add
entries for snaps it sees for the first time.
Restore returns a snap to its saved state, including changes made outside
Ginger since the saved state was taken (for example with snap connect).
If the main file becomes unreadable but the backup is valid, Ginger uses the backup and says so. If both are unreadable, Ginger blocks all changes and shows the file location; "Start a new saved state" moves the unreadable files aside (nothing is deleted) and takes a fresh snapshot — but that new state is then "before that restart", not the pre-Ginger state.
Limitation: anything changed outside Ginger (for example with
snap connect) before Ginger first saw a snap becomes part of that snap's
saved state. "Original" means "before Ginger", not snapd's own defaults.
- One connection per change and one polkit approval per change (snapd rejects several at once).
- Only connect and disconnect; no snap install, removal or refresh.
- Interface descriptions are not shown.
GPL-3.0-or-later. See LICENSE.
The build spec and plan live in docs/SPEC.md.
This project is developed with AI assistance (Claude and Mistral Vibe). Decisions and reviews are by the maintainer.
Ginger is not affiliated with or endorsed by Canonical. Snap and Ubuntu are trademarks of Canonical Ltd.