A full software & updates center plugin for DankMaterialShell: everything the built-in updater does, plus app logos, release notes, reviews, honest per-package progress, an app store, full AppImage management, firmware support and an action log — and no terminal output anywhere.
Built on the DMS system update service: the dms daemon does update detection,
and polkit prompts appear through the DMS agent.
- Beta — actively developed, things may move around
- Fedora, Nobara, RHEL/CentOS — the supported case: libdnf5 and Fedora AppStream metadata
- Debian/Ubuntu, Arch, atomic Fedora — implemented, experimental, and said
so in a banner. Atomic runs through
rpm-ostree, so everything lands in the next boot. On Arch, AUR updates are detected and installed through the DMS daemon's own paru/yay pass; the plugin builds no AUR packages itself - Flatpak, AppImage and firmware work the same everywhere
PROTOCOL.md has the table of differences per backend.
- Rich update cards — logo, name, summary,
old → new, homepage, release notes, and an update button per app - Sections — Applications, System, Runtimes, Firmware, Homebrew, DMS plugins, Held — each with its own Update these button, headings staying put as you scroll
- Held packages — dnf versionlock and excludepkgs found automatically, plus your own holds; never counted, never updated. A hold on top of a security fix says so
- Security advisories from the distro's updateinfo, read locally: graded critical to low, with CVE numbers in the details
- Real byte progress per package during a run, the list regrouped into In progress, Waiting and Completed
- A failure keeps its reason on the card, with the tool's verbatim output under Show details
- Notes for git builds come from the upstream forge, since a
*-gitpackage has no distro release to describe - Arch Linux news where it is published — announced only when something is unread, kept in an archive afterwards
- Homebrew and DMS plugins update in their own phases; DMS's own packages run last, because they reload the shell
- Reboot notice, end-of-life Flatpaks, and a word when a newer Fedora release is out
- Automatic updates — off, notify only, or auto-install Flatpaks
- A dashboard when there is nothing to do — counts per source, system info, reclaimable space, and what the last year of the log adds up to
- Everything in one list — Flatpaks, system packages, AppImages, Homebrew formulae and DMS plugins, with live search, source filters and sorting by name, size or date
- Applications first, supporting packages after
- A details popup with description, screenshots, ODRS ratings and reviews, release notes, homepage and sandbox permissions — and you can write a review
- Where it comes from — the same side-by-side source comparison the Install tab uses, with the one you have marked
- Actions — uninstall, hold, open, and restore a previous version (Flatpak commits, rpm downgrade)
- Link an AppImage to a GitHub project and its releases become its update channel
- Phase text and a progress bar on every change, never terminal output
- A storefront to walk through — thirteen Flathub categories, most-downloaded first, each heading opening onto the whole section rather than a shelf. Games is nearly 900 apps
- Search across system repos, Flathub and package names, so plain CLI tools are found too, with chips to narrow to one kind
- One Install button. When an app has more than one source a picker puts them side by side — version, size, sandboxing, permissions, who stands behind it, and what each kind of packaging costs you
- Search Copr for what no configured repository carries: one deliberate press, only projects building for this Fedora, and enabling the repository is part of the same transaction
- Search Homebrew where brew is installed — macOS-only formulae are greyed with the reason rather than dropped
- Software sources — repositories and Flatpak remotes with switches, one-click RPM Fusion and Flathub, Copr add and remove (dnf family; apt and pacman read-only)
- ODRS ratings, live install progress, AppImages, and a button through to DMS's own plugin screen
fwupd device inventory: which hardware supports firmware updates, current versions, on-demand LVFS release notes. Pending firmware updates appear in the Updates tab and run in the firmware phase of Update All.
- Everything the plugin did — runs, installs, removals, restores, holds — expanding to per-package detail
- A row that never finished says so: a clock, not a tick, and it heals itself when a later check finds the package did land
- What it cannot account for — packages changed by a terminal, a timer or another software centre, counted and named separately
- Follows the interface language, because an entry is stored as a key and its numbers rather than as a finished sentence
- Searchable, and kept for two years
An AppImage is a file, not a package: nothing knows it exists, nothing tells you when it changes, and deleting it leaves its menu entry behind. The whole life of one is handled here.
- Find one in the appimage.github.io index (1400+ apps), listed beside repo and Flathub results
- Install one from GitHub releases, a URL, or a file you already have. They
land in
~/AppImages— Gearlever's folder, and its setting is honoured - Double-click a
.appimageand this window offers to install it, or to replace the build you already have. A fresh download is never executable, which is exactly when double-clicking otherwise does nothing at all - It shows up like an app — icon and desktop entry extracted from the image
- Existing AppImages are adopted, including ones installed before this plugin existed
- Updates come from a linked GitHub project and run in their own phase
- Uninstall takes the file, its desktop entry, its icon and its record
- The pill shows the effective update count, spins while checking, counts completed/planned during a run, and turns into a restart icon when a reboot is recommended
- The popout has the enriched list, Update All, and the phase and item during a run. A check pulses the Dank logo rather than replacing it
- Optionally: hide the pill when up to date, or have a click open the window
Everything the plugin decides for itself is in one dialog behind the gear; everything it can do is one Ctrl+K away. Check interval and ignored packages stay with DMS, and the dialog links straight to them. The same switches appear on the plugin's page in DMS Settings → Plugins, so whichever one you find first is the whole set.
Two worth knowing about:
- App icons in the theme colour. Off by default — an app's icon is its own identity — but some palettes make a wall of unrelated logos look like confetti.
- Authorise with sudo. Off by default, for machines with a
NOPASSWDsudoers rule: privileged commands then run undersudo -ninstead ofpkexec, falling back to the polkit prompt whenever sudo would ask. DMS's own packages and firmware keep their own polkit actions either way.
English, Dutch, German, French, Spanish, Portuguese, Italian, Polish, Swedish,
Ukrainian, Russian, Hungarian, Japanese, Korean, Vietnamese and Chinese
(Simplified) — sixteen. DMS has no per-plugin i18n mechanism, so the plugin
brings its own: translations/<lang>.json, keyed by the English source string,
following the DMS/system locale and falling back to the DMS catalog and then
English. Add a language by dropping a file next to the others.
- A Fedora-based distribution — or an atomic Fedora, Debian/Ubuntu or Arch (all three experimental)
- DMS ≥ 1.6 with the
sysupdatedaemon capability python3andflatpak, optionallyfwupd, optionally Homebrew- Package-manager bindings for your distro:
- Fedora:
python3-libdnf5(not part of a default install) - Atomic Fedora: nothing extra —
rpm-ostreeis the image's own tool - Debian/Ubuntu:
python3-apt(usually preinstalled) - Arch:
pyalpm
- Fedora:
- Flatpak bindings — PyGObject and the Flatpak typelib, which are two
packages:
- Fedora:
python3-gobject-base(the typelib comes withflatpak-libs) - Debian/Ubuntu:
python3-giandgir1.2-flatpak-1.0, whichflatpakdoes not pull in - Arch:
python-gobject
- Fedora:
Without the package-manager bindings no system package can be installed, updated or removed; without the Flatpak ones no Flatpak can. The plugin checks both at startup and offers to install what is missing, naming the packages for your distribution.
Optional, for richer app information: the AppStream catalog for your distro —
appstream-data on Fedora, appstream on Debian/Ubuntu,
archlinux-appstream-data on Arch. Without it the plugin falls back to package
summaries and the icons in your desktop entries, so apps still look like apps.
git clone https://github.com/vinceecniv/DankSoftwareDepot ~/.config/DankMaterialShell/plugins/dankSoftwareDepot
dms restartEnable Dank Software Depot in DMS Settings → Plugins, then add the widget to a DankBar layout.
To launch it from the app launcher, let the app place the entry: the Updates tab offers it once, and Settings → Show in app launcher toggles it any time. Entry and icon go into your home directory — no root — and switching it off removes them again. The entry calls the IPC below, so DMS has to be running.
The same by hand
sed "s|@OPEN@|$PWD/scripts/open.sh|" com.danklinux.dankSoftwareDepot.desktop \
> ~/.local/share/applications/com.danklinux.dankSoftwareDepot.desktop
chmod +x scripts/open.sh
install -Dm644 assets/icons/dank-software-depot-dark.svg \
~/.local/share/icons/hicolor/scalable/apps/dank-software-depot.svg
install -Dm644 assets/icons/dank-software-depot-symbolic.svg \
~/.local/share/icons/hicolor/symbolic/apps/dank-software-depot-symbolic.svg
update-desktop-database ~/.local/share/applicationsThe icon step is not optional: the entry names an icon, and without it the launcher shows a blank one. An entry written by an older version of the plugin is rewritten once, automatically, the next time the window opens.
dms ipc call dankSoftwareDepot open # open the window
dms ipc call dankSoftwareDepot toggle
dms ipc call dankSoftwareDepot tab 2 # a specific tab (0-4)
dms ipc call dankSoftwareDepot check # trigger an update check
dms ipc call dankSoftwareDepot updateAll
dms ipc call dankSoftwareDepot updateFlatpakOne org.example.App
dms ipc call dankSoftwareDepot openAppimage /path/to/App.AppImageThe plugin contains no tracking of any kind: no analytics, no telemetry, no crash reporting, no identifier that follows you. There is no server belonging to this project — nothing is ever sent to its author.
One request happens without you asking: half a minute after the shell starts,
and once a day after that, the plugin fetches its own plugin.json and
CHANGELOG.md from GitHub to see whether a newer version exists. Plain file
fetches, nothing identifying, skipped entirely on a development checkout.
Everything else below happens because you opened, checked or pressed something.
| Where | What for | When |
|---|---|---|
| your configured repositories, Flatpak remotes, LVFS | the package work itself: metadata, downloads, firmware | checking and updating |
raw.githubusercontent.com |
this plugin's own plugin.json and CHANGELOG.md, to offer its update |
30 seconds after the shell starts, then daily; never on a symlinked install |
odrs.gnome.org |
star ratings and review texts (Open Desktop Ratings Service) | opening an app's details |
flathub.org/api/v2 |
install counts, download size, sandbox permissions, verified status | opening a Flatpak app's details |
flathub.org/api/v2 |
installs over the last month for the thousand most-installed apps, which is what orders the storefront | once a day, when the Install tab is loaded |
| the screenshot URLs in AppStream data | the screenshots themselves, cached locally for 30 days | opening an app's details |
appimage.github.io, api.github.com |
the AppImage catalogue and the releases of an AppImage's linked project | the Install tab and AppImage updates |
api.github.com |
for a package built from git, the notes of the release being installed or the commits between two snapshots | opening the details of such an update; cached a day, and a package not built from git never asks |
bodhi.fedoraproject.org |
which Fedora releases are current, for the release-upgrade notice | the upgrade check |
formulae.brew.sh, github.com, ghcr.io |
Homebrew's own traffic, run by brew rather than by this plugin | only where brew is installed — the index at most every six hours, bottles only during an update you started |
archlinux.org |
the Arch news feed | on Arch only, at most every six hours while the window is open |
copr.fedorainfracloud.org |
which Coprs build a package matching your search, and for which Fedora | only when you press Search Copr; cached six hours |
mirrors.rpmfusion.org, dl.flathub.org, nightly.gnome.org, cdn.kde.org, registry.fedoraproject.org |
fetching a source you asked to add | only when you press Add in Software sources |
Two details worth stating plainly, because they are the only places where anything about you leaves the machine:
- Reading reviews sends a
user_hashthat is the same constant for every installation (sha1("dankSoftwareDepot")). ODRS requires the field; this one identifies nobody. - Writing a review is the only outgoing request carrying anything
machine-specific. ODRS deduplicates and moderates by user, so the submission
carries a hash of your username and
/etc/machine-id, along with the display name you type — leave that empty and your login name is published instead, which is why the field says so before you press send. Nothing is submitted unless you write a review and press the button.
Two links, and they cost nothing:
- Upvote it in the DMS plugin directory — a 👍 on the registry issue. That reaction count is how the directory knows which plugins people actually run.
- Star the repository — if it is doing its job on your machine.
Bug reports and feature requests are welcome as issues — the templates ask for the distribution and the versions, because with four package managers behind this thing that is usually what decides where the fault is.
Architecture, the helper protocol, the checks, and how to record an update run and play it back: DEVELOPMENT.md and PROTOCOL.md.
MIT — see LICENSE.












