Upgrade management dashboard for Garuda Linux and Arch-based distros
Project description
garuda-pilot
Upgrade management dashboard for Arch-based Linux distros. Runs as a local web service that provides upgrade previews with risk analysis, full searchable upgrade history, btrfs snapshots, and Arch news integration.
Works on any Arch-based distro — Garuda, CachyOS, EndeavourOS, Manjaro, vanilla Arch, and more. The name is historical; the tool is not Garuda-specific.
Features
- Upgrade Preview — see all pending updates before upgrading, sorted by risk score. Includes package descriptions, build dates, category badges, and expandable upstream links. Clickable CVE/Flagged/News summary badges filter the table.
- Risk Scoring — each pending package gets a 0-100 risk score based on category (kernel, graphics, system, mesa, xorg), CVE severity, news mentions, flagged-outdated status, hardware context (nvidia + kernel), and version bump magnitude.
- OS-Aware Upgrade Launch — detects your distro and available tools, recommends the right upgrade command (
garuda-update,eos-update,pamac,pacman,paru,yay). Database is auto-backed up before every upgrade. - Btrfs Snapshots — shows snapper history with pre/post snapshot pairs automatically created before upgrades (when snap-pac is not active). Works alongside snap-pac without duplicating snapshots.
- Upgrade History — every past pacman transaction is imported and searchable. Transactions are classified by type (System Upgrade, Manual Install, AUR Helper, etc.) with filter checkboxes. Navigate between transactions with prev/next buttons or arrow keys.
- Transaction Details — drill into any transaction to see packages, pacman command, warnings (.pacnew conflicts, DKMS errors), and scriptlet output.
- Security Advisories — fetches CVE data from the Arch Security Tracker. Filter by severity and status, deep-link from CVE badges in the preview.
- Arch & Garuda News — recent news items with automatic package name extraction. Clickable tags filter the preview table to affected packages.
- Hardware-Aware — detects your GPU vendor and kernel at startup, used to flag dangerous combos (e.g. nvidia module loaded + kernel update).
- System Health — runs
garuda-healthon Garuda, or 11 built-in parallel checks on other distros (disk space, failed services, orphan packages, pacnew files, NTP sync, journal errors, swap, core dumps, mirror freshness, pacman lock). - Database Backup — schema-versioned backups with auto-pruning (keeps last 5). Backup card on dashboard, full management on about page.
- Dark Theme — works fully offline (vendored HTMX, no CDN).
Distro support
| Distro | Upgrade command | Health checks | Snapshots |
|---|---|---|---|
| Garuda Linux | garuda-update (recommended) |
garuda-health |
garuda-update manages them |
| CachyOS | pacman + paru/yay |
Built-in (11 checks) | snapper pre/post if snap-pac absent |
| EndeavourOS | eos-update (recommended) |
Built-in | snapper pre/post if snap-pac absent |
| Manjaro | pamac upgrade (recommended) |
Built-in | snapper pre/post if snap-pac absent |
| Vanilla Arch | pacman + paru/yay |
Built-in | snapper pre/post if snap-pac absent |
Requirements
- Python >= 3.11
pacmanandcheckupdates(frompacman-contrib)lspci(frompciutils, for GPU detection)garuda-health— optional, Garuda only; other distros use built-in checkssnapper— optional, for btrfs snapshot history and pre-upgrade snapshots
Installation
Install via pipx (recommended)
sudo pacman -S python-pipx pacman-contrib pciutils
pipx install garuda-pilot
Install via pip
pip install garuda-pilot
Install from AUR
paru -S garuda-pilot
Development install
git clone https://github.com/interceptor/garuda-pilot.git
cd garuda-pilot
poetry install
poetry run garuda-pilot
Usage
garuda-pilot
The dashboard is available at http://127.0.0.1:8471
First run
On first startup, garuda-pilot will:
- Create its database at
~/.local/share/garuda-pilot/garuda-pilot.db - Import your full pacman.log history (all past transactions)
- Detect your GPU and kernel
Navigate to /preview to run checkupdates and see pending updates with risk scores.
Pages
| URL | Description |
|---|---|
/ |
Dashboard — summary cards, backup status |
/preview |
Upgrade preview — pending updates with risk scores, filters, news warnings, upgrade launcher |
/history |
Transaction list — all past upgrades, filterable by type, searchable by package |
/history/{id} |
Transaction detail — packages, command, warnings, scriptlet output, prev/next nav |
/news |
Arch & Garuda news — recent items with extracted package names |
/security |
Security advisories — CVE data from Arch Security Tracker, filterable by severity |
/health |
System health — garuda-health (Garuda) or built-in checks (others), with history |
/snapshots |
Btrfs snapshots — snapper history, create snapshots |
/changelog |
Release history |
/about |
About page — README, database backup management |
Configuration
Optional config file at ~/.config/garuda-pilot/config.toml:
host = "127.0.0.1"
port = 8471
db_path = "~/.local/share/garuda-pilot/garuda-pilot.db"
pacman_log = "/var/log/pacman.log"
All fields are optional — defaults are shown above.
Risk Scoring
Each pending package is scored 0-100:
| Factor | Points |
|---|---|
| Category: kernel | +40 |
| Category: graphics (nvidia, vulkan, etc.) | +30 |
| Category: system (systemd, glibc, etc.) | +25 |
| Category: mesa | +20 |
| Category: xorg/wayland | +15 |
| Critical CVE | +35 |
| High CVE | +25 |
| Medium CVE | +15 |
| Mentioned in Arch news | +20 |
| Mentioned in Garuda news | +15 |
| NVIDIA module loaded + kernel update | +30 |
| Major version bump (e.g. 1.x → 2.x) | +15 |
| Flagged out-of-date on archlinux.org | +10 |
| High reverse dependency count (>10) | +10 |
| Trivial package (docs, fonts, themes) | capped at 5 |
| Patch-only update (same base version) | capped at 10 |
Risk labels: low (0-19), medium (20-39), high (40-59), critical (60-100)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file garuda_pilot-0.5.10.tar.gz.
File metadata
- Download URL: garuda_pilot-0.5.10.tar.gz
- Upload date:
- Size: 154.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaedb77652d5b4044e264880b9d8b4ae904acdeb0337d0b19387ee1d8add6c89
|
|
| MD5 |
ef4556c46380d98503386d7850d4d858
|
|
| BLAKE2b-256 |
5a740a0a689c14367dc0da4b33c756cc979c1a3eac725076f2117c170d4cac07
|
Provenance
The following attestation bundles were made for garuda_pilot-0.5.10.tar.gz:
Publisher:
publish.yml on interceptor/garuda-pilot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
garuda_pilot-0.5.10.tar.gz -
Subject digest:
eaedb77652d5b4044e264880b9d8b4ae904acdeb0337d0b19387ee1d8add6c89 - Sigstore transparency entry: 1725142790
- Sigstore integration time:
-
Permalink:
interceptor/garuda-pilot@371f58dda4f775f36901f1d76838bc0a7c149e96 -
Branch / Tag:
refs/tags/v0.5.10 - Owner: https://github.com/interceptor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@371f58dda4f775f36901f1d76838bc0a7c149e96 -
Trigger Event:
release
-
Statement type:
File details
Details for the file garuda_pilot-0.5.10-py3-none-any.whl.
File metadata
- Download URL: garuda_pilot-0.5.10-py3-none-any.whl
- Upload date:
- Size: 183.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0aae7010bccc40bde3b1614a4d96447fabae98854125d56fae46ec7d864e98ac
|
|
| MD5 |
daa777778579ac286e4319d89e45e14b
|
|
| BLAKE2b-256 |
6e250ca5faee8f9dd803eff68acad0e99c1f87696d2a415e17dfc6a3430b5e11
|
Provenance
The following attestation bundles were made for garuda_pilot-0.5.10-py3-none-any.whl:
Publisher:
publish.yml on interceptor/garuda-pilot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
garuda_pilot-0.5.10-py3-none-any.whl -
Subject digest:
0aae7010bccc40bde3b1614a4d96447fabae98854125d56fae46ec7d864e98ac - Sigstore transparency entry: 1725142865
- Sigstore integration time:
-
Permalink:
interceptor/garuda-pilot@371f58dda4f775f36901f1d76838bc0a7c149e96 -
Branch / Tag:
refs/tags/v0.5.10 - Owner: https://github.com/interceptor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@371f58dda4f775f36901f1d76838bc0a7c149e96 -
Trigger Event:
release
-
Statement type: