- Rust 86.1%
- Shell 7%
- Python 6.9%
- In-app update on Debian/Ubuntu (`.deb`): download the package that matches the
host CPU architecture (`amd64` on x86_64, `arm64` on aarch64). Release asset
names follow `backuppilot-{version}-{arch}.deb`. Previously, when both
architectures were attached to a release, the updater could fetch the wrong
package (e.g. `arm64` on an `x86_64` system).
|
||
|---|---|---|
| crates | ||
| data | ||
| docs | ||
| packaging | ||
| po | ||
| scripts | ||
| .gitignore | ||
| build.sh | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| LICENSE.md | ||
| README.md | ||
| VERSION | ||
BackupPilot
A native Linux desktop backup client for Proxmox Backup Server (PBS).
BackupPilot wraps the official proxmox-backup-client in a modern GNOME app (GTK4 and Libadwaita) with a background service. You can protect local files and folders, run scheduled backups, monitor job health, and restore from snapshots — without using the command line.
Note
Platform support depends on
proxmox-backup-clientBackupPilot does not ship its own backup engine — it orchestrates the official PBS client on your machine. Proxmox supports
proxmox-backup-clientprimarily on Debian-based systems (Debian, Ubuntu, and derivatives). On RHEL-compatible distributions, community packages may exist, but support is unofficial and varies. On other Linux setups, whether backups work at all depends on having a working PBS client installed.
- Website: onesystems.ch
- Source & issues: git.onesystems.ch/backuppilot/app
- Support: Submit a ticket
What you need
| Requirement | Notes |
|---|---|
| Linux desktop | GNOME or another desktop with GTK4 / Libadwaita |
| Proxmox Backup Server | A reachable PBS instance with a repository you can use |
proxmox-backup-client |
Must be installed on the system (or on the host when using Flatpak) |
Flatpak builds call proxmox-backup-client on the host through a wrapper. For Flatpak install notes (including the offline bundle), see packaging/flatpak/.
Main features
- Backup profiles — Multiple independent profiles with source paths, exclusions, and schedules (hourly, daily, weekly, at login, or custom cron)
- Incremental backups — To PBS via
proxmox-backup-client; start manually or let the background service run jobs automatically - Restore — Browse snapshots and restore files or folders to the original path or another location, with overwrite protection
- Encryption & limits — Optional client-side encryption keys and per-profile bandwidth limits
- Smart start conditions — Optional checks for AC power, reachable PBS, or selected network connections before a job starts
- Health monitoring — Warnings when backups are overdue, with configurable thresholds
- History & logs — Run history with status, duration, and error details
- Desktop integration — System tray, quick actions, and notifications (English, German, French, Italian)
Installing BackupPilot
Pre-built packages are the easiest way to get started:
| Format | Typical use |
|---|---|
.deb |
Debian, Ubuntu, and derivatives |
.rpm |
Fedora, openSUSE, RHEL-compatible systems |
.flatpak |
Offline bundle from releases (app + GNOME Platform — no Flathub). Host must have proxmox-backup-client. |
Download the package that matches your system from the publisher’s website or release archive. After installation, launch BackupPilot from your application menu.
The app installs a user service (backuppilot-daemon) that handles scheduled backups. It should start automatically with your desktop session; you can also enable Start BackupPilot in the background in the app settings.
Latest releases:
https://git.onesystems.ch/backuppilot/app/-/releases
Quick start
- Install
proxmox-backup-clientif it is not already on your system (from your distribution or Proxmox repositories). - Open BackupPilot and follow the setup hints on the dashboard.
- Create a backup profile:
- Add the folders or files you want to back up
- Connect to your PBS repository (server, datastore, credentials; optional namespace and backup ID)
- Optionally set encryption, bandwidth limits, and a schedule
- Run a test backup from the profile or dashboard and check the activity log.
- Restore when needed from the restore view: pick a snapshot, browse the archive, and choose where files should go.
Before each scheduled run, BackupPilot can run preflight checks (network and PBS reachability) so jobs do not start when the server is unavailable.
Pre-backup hooks (per profile) run your own scripts or commands first — for example database dumps into a staging folder — then the normal file backup to PBS runs. Post-backup hooks run afterward (cleanup, notifications, checks). Configure both in the profile editor, in YAML (pre_backup / post_backup), or test with backuppilot-cli pre-backup and post-backup <profile>.
Where your data lives
| Item | Location |
|---|---|
| Database | ~/.local/share/backuppilot/backuppilot.db |
| Configuration | ~/.config/backuppilot/ |
Uninstalling the app does not remove these directories automatically; back them up or delete them manually if you no longer need them.
Tips
- Use
backuppilot --helpfor command-line options (e.g. opening a specific view). - For crashes or a frozen UI, try:
RUST_BACKTRACE=1 backuppilot --debug - Interface language follows your system locale when a translation is available.
Building from source
This section is for developers and advanced users who want to compile BackupPilot themselves.
Repository layout
This repository is a Rust workspace with these crates:
| Crate | Binary | Role |
|---|---|---|
backuppilot-core |
— | Models, SQLite, PBS client integration |
backuppilot-daemon |
backuppilot-daemon |
D-Bus background service |
backuppilot-gui |
backuppilot |
GTK4 / Libadwaita user interface |
backuppilot-cli |
backuppilot-cli |
Command-line tools |
Prerequisites
- Rust ≥ 1.78 (rustup)
proxmox-backup-clienton the system (for real backup runs)- Development libraries: GTK4, Libadwaita, gettext
Debian / Ubuntu:
sudo apt install build-essential pkg-config \
libgtk-4-dev libadwaita-1-dev gettext libintl-dev \
libnotify-bin python3-pil
libnotify-bin provides notify-send for desktop notifications when backups finish.
Recommended: build helper
From this repository root:
./build.sh # interactive menu
./build.sh local 1.0.0 # release build for local testing
./build.sh all 1.0.0 # .deb, .rpm, and Flatpak under build/dist/
This keeps VERSION and Cargo.toml in sync. Packaging templates live in packaging/. Run ./build.sh help for all targets.
Upload packages to GitLab Generic Packages and/or OneRepo (prints asset names and URLs for releases):
# Optional: cp scripts/.env.example scripts/.env and fill in tokens
export GITLAB_URL="https://git.onesystems.ch"
export PROJECT_ID="<project-id>"
export VERSION="1.0.0"
export TOKEN="<gitlab-private-token>"
export ONEREPO_TOKEN="<onerepo-token>"
export ONEREPO_PROJECT="backuppilot"
./scripts/upload-gitlab-packages.sh
# Only OneRepo:
./scripts/upload-gitlab-packages.sh --onerepo-only
# Only GitLab:
./scripts/upload-gitlab-packages.sh --gitlab-only
Manual build and run
cargo build --release
# Background service (separate terminal or session)
./target/release/backuppilot-daemon
# GUI
./target/release/backuppilot
# Verbose diagnostics
RUST_BACKTRACE=1 ./target/release/backuppilot --debug
Manual install (user session)
./build.sh local 1.0.1 --install
This installs to ~/.local/bin for the current user only, adds ~/.local/bin to
~/.profile and ~/.bashrc (once), and registers the desktop entry with a full path.
Open a new terminal or run source ~/.profile after install.
For all users on the machine, use the .deb package instead (/usr/bin, no PATH setup).
Icons
App icons are generated from docs/icon.png:
./scripts/generate-icons.sh
Flatpak offline bundle (for release archives):
./build.sh flatpak-offline 1.0.0
Packaging templates and install notes: packaging/flatpak/.
Translations
Languages are listed in po/LINGUAS (German, English, French, Italian).
./scripts/i18n-update.sh # refresh .pot and .po (optional: .venv-i18n)
./scripts/i18n-compile.sh
LANG=de_DE.UTF-8 ./target/release/backuppilot
License
BackupPilot is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See LICENSE.md for details.
Release history: CHANGELOG.md.
