showcase Svelte Themes

Showcase

Discover and remove all apps installed on Linux, whether apt, Flatpak & Snap, in one sleek native desktop app. Tauri + SvelteKit + Rust.

Showcase

See and manage every app installed on your Linux system โ€” apt, Flatpak, and Snap โ€” in one clean, native desktop app.

What is Showcase?

Showcase is a desktop application for Ubuntu (and other Linux desktops) that gives you a single, visual place to browse every installed graphical application across all the ways software gets installed โ€” system packages (apt/dpkg), Flatpak, and Snap โ€” inspect each app's details, and uninstall the ones you no longer want, with a proper graphical password prompt.

No more remembering whether you installed something with apt, flatpak, or snap. Showcase finds them all, shows them together, and lets you remove them safely.

Features

  • ๐Ÿ—‚๏ธ Unified view โ€” every GUI app from apt, Flatpak, and Snap in one grid, each tagged by source.
  • ๐Ÿ”Ž Search, filter, and sort โ€” live search, filter by source (with live counts), sort by name, size, or recently installed.
  • ๐Ÿ“‹ Rich detail panel โ€” icon, version, install size, install date, publisher, categories, package id, launch command, and a full description.
  • ๐Ÿ—‘๏ธ Complete uninstall โ€” remove an app with one click, authenticated through the system polkit dialog, with the disk space it frees shown up front.
  • ๐Ÿ›ก๏ธ Safe by design โ€” refuses to remove essential system packages and base snaps; warns when removing an apt package may also remove things that depend on it.
  • ๐ŸŽจ Native & themed โ€” clean light/dark interface that follows your system, with crisp app icons.
  • โšก Fast & resilient โ€” sources are queried in parallel; if one (e.g. snapd) is unavailable, the rest still load.

Requirements

  • Ubuntu 22.04 LTS or newer (or a derivative). GNOME is recommended; the polkit prompt needs a working authentication agent (standard on GNOME/KDE).
  • apt/dpkg (always present). flatpak and snapd are optional โ€” Showcase simply shows whichever are installed.

Download & install

Prebuilt packages for Ubuntu 22.04+ (amd64) are published with every release.

  1. Go to the Releases page and open the latest release.

  2. Download the .deb and the SHA256SUMS file into the same directory.

  3. Verify the download, then install:

    sha256sum -c SHA256SUMS --ignore-missing
    sudo apt install ./Showcase_*_amd64.deb
    

Prefer a portable, no-install binary? Grab the AppImage from the same release and run it directly:

chmod +x Showcase_*.AppImage
./Showcase_*.AppImage

B) APT repository (auto-updates)

Add the signed Showcase APT repository once, then receive updates through apt like any other package:

sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/showcase-archive-keyring.gpg https://rabiulislam-xyz.github.io/showcase/showcase-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/showcase-archive-keyring.gpg] https://rabiulislam-xyz.github.io/showcase stable main" | sudo tee /etc/apt/sources.list.d/showcase.list
sudo apt update && sudo apt install showcase

This path is available only after the maintainer has completed the one-time setup in docs/DISTRIBUTING.md. If apt update can't reach the repository, use the direct download above instead.

For maintainers: see docs/DISTRIBUTING.md for how releases are built and how to enable the signed APT repository.

Install & run from source

1. Toolchains

  • Rust (stable) โ€” install via rustup.
  • Node.js 18+ and npm.

2. System build dependencies (one-time)

Tauri needs a few GTK/WebKit development libraries:

./scripts/setup-deps.sh

This runs sudo apt-get install for libwebkit2gtk-4.1-dev, libgtk-3-dev, libayatana-appindicator3-dev, librsvg2-dev, and pkg-config.

3. Run in development

npm install
npm run tauri dev

The first build compiles the Rust backend and can take a couple of minutes.

4. Build a release package

npm run tauri build

This produces a .deb and an AppImage under src-tauri/target/release/bundle/. Install the .deb with:

sudo apt install ./src-tauri/target/release/bundle/deb/showcase_*_amd64.deb

Then launch Showcase from your applications menu.

Usage

  1. Launch Showcase โ€” it lists every installed GUI app.
  2. Search by name, filter by source (All / APT / Flatpak / Snap), or sort by name, size, or recency.
  3. Click an app to open its detail panel with full metadata and description.
  4. Click Uninstall โ†’ confirm โ†’ authenticate in the system password dialog. The app disappears from the grid when removal succeeds.

About permissions: Showcase itself runs unprivileged. Removal is escalated per action through polkit. apt and Snap removals run via pkexec (so the system password dialog appears); Flatpak uses its own native uninstall (no password needed for per-user installs).

How it works

  • Discovery โ€” .desktop entries are the source of truth for "what is an app" (exactly what appears in your applications menu). Each entry is classified by location into a source.
  • Enrichment โ€” each source adds its metadata: apt via dpkg-query (version, size, essential flag), Flatpak via flatpak list, Snap via the local snapd REST socket (version, size, install date).
  • One app per package โ€” multiple launchers from the same package collapse to a single entry (uninstalling removes the package, not one shortcut).
  • Backend โ€” a small Rust core exposes Tauri commands: list_apps, get_app_details, uninstall_app. Sources sit behind a command-runner seam, so all parsing/merging logic is unit-tested with fixtures and never touches the live system in tests.
  • Frontend โ€” SvelteKit (Svelte 5) with a typed API layer, pure filter/sort logic, and presentational components. Icons render through Tauri's asset protocol.

Project structure

showcase/
โ”œโ”€โ”€ src/                     # SvelteKit frontend (Svelte 5 + TypeScript)
โ”‚   โ”œโ”€โ”€ lib/
โ”‚   โ”‚   โ”œโ”€โ”€ components/      # AppCard, AppGrid, Header, AppDetail, ConfirmDialog, Toast โ€ฆ
โ”‚   โ”‚   โ”œโ”€โ”€ types.ts api.ts filter.ts stores.ts format.ts theme.css
โ”‚   โ””โ”€โ”€ routes/              # +page.svelte (the app), +layout.svelte
โ”œโ”€โ”€ src-tauri/               # Rust backend (crate: showcase_lib)
โ”‚   โ””โ”€โ”€ src/                 # model, desktop, runner, dpkg, snapd, icons,
โ”‚                            #   sources/{apt,flatpak,snap}, aggregate, commands, uninstall
โ”œโ”€โ”€ scripts/setup-deps.sh    # one-time system build deps
โ””โ”€โ”€ docs/superpowers/        # design specs + phased implementation plans

Development

cargo test --manifest-path src-tauri/Cargo.toml                    # Rust unit + gated integration tests
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets    # lint (clean)
npm test                                                           # frontend (Vitest)
npm run check                                                      # svelte-check / TypeScript

The project was built in three reviewed phases โ€” (1) backend enumeration core, (2) browse UI, (3) uninstall โ€” each documented under docs/superpowers/specs/ and docs/superpowers/plans/.

Security

  • The app never runs as root; only the specific uninstall operation escalates, per action, via polkit.
  • Package identifiers are passed as argument arrays, never interpolated into a shell (injection-safe).
  • Guards block removal of Essential apt packages and base/core snaps before any privileged call.

Roadmap

  • Installing apps (not just uninstalling)
  • AppImage detection
  • Per-app permission management (Flatpak/Snap interfaces)
  • Live, line-by-line uninstall progress
  • Published release binaries

Tech stack

Tauri v2 ยท Rust ยท SvelteKit (Svelte 5) ยท TypeScript ยท WebKitGTK ยท PackageKit/polkit

License

MIT ยฉ 2026 Rabiul Islam

Top categories

Loading Svelte Themes