Skip to content

Repository files navigation

Scope

See, update, and uninstall every app on your Linux system — all in one place.

Scope — unified app management for Linux

Linux users install software from APT, Snap, Flatpak, and AppImage — then have to remember which tool installed what just to remove it. Scope scans all four sources into one unified list, enriches entries with desktop metadata and icons, and provides a preview-first uninstall/update flow with Polkit privilege escalation.

  • Unified package view — every installed app in one place, regardless of source
  • Non-blocking operations — uninstalls and updates run in the background; keep using Scope while they complete
  • Preview-first safety — every destructive action shows exactly what will happen before it executes
  • Icon resolution — freedesktop.org icon theme spec, with coloured-initials fallback
  • Protected packages — 40+ system-critical packages are deny-listed and cannot be removed

Architecture

Tauri v2 (Rust backend + React webview). Frontend calls typed invoke commands; backend never runs frontend strings through sh -c.

flowchart LR
  Webview["React Frontend"] <-->|invoke| CMDS[commands/]
  CMDS --> SCAN[scanner/] & OPS[operations/]
  OPS --> SAF[safety/] & SYS[system/]
  SCAN --> DE[desktop_entries/] & IC[icons/]
  IC --> PROTO[scope-icon:// protocol]
  SYS --> PK[pkexec / Polkit] --> PM[APT · Snap · Flatpak · AppImage]
  SCAN --> PM
Loading
  • Parallel scanning — 4 scanners in tokio::JoinSet with per-command timeouts, desktop-entry enrichment on blocking thread pool
  • Preview-then-apply — Backend issues OperationPlan → stores in PlanStore (5-min TTL) → frontend sends only plan_id to apply → re-scans + revalidates + executes
  • scope-icon:// protocol — Custom URI scheme serves resolved icon paths; follows freedesktop.org Icon Theme Spec (Inherits= chains, GTK theme detection, hicolor fallback)
  • Safety deny-list — 40+ system-critical APT packages blocked, Snap runtimes blocked, AppImage path guard with canonicalized root checks

Tech Stack

Layer Stack Why
Shell Tauri v2 (Rust) Native Linux window, Polkit root access, no Electron
Frontend React 19 + TypeScript 5.8 Component model, strict-mode type checking
Bundler Vite 7 Fast HMR, Tauri dev-server integration
Async runtime tokio (process, fs, sync) Parallel scans, per-command timeouts
Scanning walkdir, regex, glob Filesystem scans, apt output parsing, desktop entry discovery
Serialization serde + serde_json All DTOs cross the Rust ↔ JS boundary
Self-update tauri-plugin-updater + tauri-plugin-process In-app download, progress bar, restart
CI GitHub Actions Build .deb/.rpm/.AppImage on tag push

Install

Download: GitHub Releases.deb, .rpm, .AppImage. The app auto-updates itself.

# Ubuntu / Debian
curl -LO https://github.com/khurrambhutto/scope/releases/latest/download/scope_0.1.6_amd64.deb
sudo dpkg -i scope_0.1.6_amd64.deb

Build from source (needs libwebkit2gtk-4.1-dev, Rust stable, Node 20+):

sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
npm install
npm run tauri dev

Status

  • Multi-source scanning (APT, Snap, Flatpak, AppImage) with parallel execution
  • Desktop-entry enrichment + freedesktop.org icon resolution
  • Uninstall from Scope (all sources, preview-first, pkexec auth, deny-list protected)
  • Update from Scope (APT/Snap/Flatpak, preview-first, pkexec auth)
  • Non-blocking background operation tasks
  • Right-side detail drawer with master-detail layout
  • Sidebar navigation with future-phase placeholders
  • CI release pipeline builds .deb, .rpm, .AppImage
  • Self-updater with in-app notification and progress bar
  • AppImage auto-update (preview shows "not yet implemented")
  • Snap target version display (snap refresh --list doesn't report target)
  • AppImage update detection (always reports has_update: false)
  • Whole-system cleanup (caches, orphans, leftovers)
  • Disk usage visualization
  • Arch/Fedora package-manager scanner support

Contributing

Concrete areas needing help:

  • AppImage auto-update — implement in operations/update.rs:166
  • Snap version info — parse target version from snap info in scanner/snap.rs
  • Unit tests for operations — mock run_elevated, test preview → revalidate → apply lifecycle
  • Arch/Fedora scanners — add scanner/pacman.rs or scanner/dnf.rs using the Scanner trait
  • Frontend tests — Vitest + React Testing Library on PackageScreen, usePackages

PRs: keep business logic in domain modules, keep Tauri commands thin, run npm run build && cargo check --manifest-path src-tauri/Cargo.toml before submitting.

License

MIT

About

Scope is a Linux desktop app for discovering, updating, and uninstalling installed packages and apps in one place.

Topics

Resources

Stars

10 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages