Centralized Backup
Management
A self-hosted hub for managing restic backups across all your servers. One dashboard to schedule, monitor, browse, and restore — powered by a single binary and a lightweight node agent.
$ docker run -p 4865:4865 -v valvet-data:/data valvet
[hub] listening on 0.0.0.0:4865
[hub] database ready (WAL mode)
[hub] visit /setup to create admin account
$ valvet-node enroll --hub http://hub:4865 --token <token>
[node] enrolled as server-01
[node] websocket connected, waiting for commands
Everything you need
A complete backup management platform in a single stack.
Hub + Node Architecture
Central hub manages multiple node agents over WebSocket. Nodes auto-reconnect with exponential backoff.
Restic-Powered
Battle-tested, encrypted, deduplicated backups. Restic binary is auto-downloaded and managed by the node agent.
Real-Time Monitoring
Live backup progress, node system stats, and job history. SSE-powered dashboard updates without polling.
Snapshot Browser & Restore
Browse files inside any snapshot, download individual files or folders, and restore to the same or different node.
Plan Scheduling
Cron-based backup plans with pre/post hooks, include/exclude patterns, and retention policies.
Single Binary Deploy
Hub ships as one binary with embedded web UI. Run bare metal or Docker. No external database required — SQLite with WAL.
Architecture
A hub-and-spoke model designed for simplicity.
VALVET HUB
● Node Agent
runs restic
reports back
web-server-01
● Node Agent
runs restic
reports back
db-server-01
● Node Agent
runs restic
reports back
nas-01
Single Binary Hub
Axum server + embedded React UI + SQLite. No external dependencies.
Lightweight Agent
Auto-downloads restic. Connects over WebSocket with token rotation.
End-to-End Encrypted
Restic encrypts everything at rest. Tokens hashed with SHA-256, passwords with argon2id.
Quick Start
Up and running in under a minute.
docker run -d -p 4865:4865 \
-v valvet-data:/data \
--name valvet \
ghcr.io/lindstrm/valvet
Visit http://localhost:4865/setup and create your admin account.
curl -fsSL http://hub:4865/install.sh | sh -s -- \
--hub http://hub:4865 \
--token <enrollment-token> \
--name "my-server" Use the dashboard to create a backup plan — pick a node, repository, schedule, and paths. Your first backup runs immediately or on the next cron tick.