2026-05-01 00:03:59 +01:00
2026-05-01 00:03:59 +01:00

restic-manager

Self-hosted, browser-based, single-pane-of-glass for managing restic backups across a fleet of Linux and Windows endpoints.

Status: pre-1.0, feature-complete for the original use case. Phases 04 + 6 are landed (MVP, scheduling, restore, RBAC + OIDC, observability); Phase 5 (OSS readiness — docs site, contributor onboarding, end-to-end CI) is in flight. See spec.md for the design and tasks.md for the live roadmap.

What it does

  • Central visibility into backup state for every endpoint.
  • Trigger any restic operation remotely (backup, forget, prune, check, unlock, snapshots, stats, diff, restore).
  • Per-host schedules with named source groups + retention.
  • Live job log streamed to the browser; downloadable as text/NDJSON afterwards.
  • Restore wizard: browse a snapshot's tree, pick paths, restore in-place or to a new directory.
  • Repo health surfacing (size, raw size, last check, lock state), plus a 30/90-day repo-size trend.
  • Alerting over webhook, ntfy, or SMTP.
  • Cross-platform agent (Linux systemd + Windows SCM).
  • Append-only-friendly: separate admin credential for prune.
  • Optional Prometheus /metrics endpoint + sample Grafana dashboard.
  • Optional OIDC SSO (Authelia, Authentik, etc.).

Screenshots

Sign in Empty dashboard Add host
Sign in Dashboard, fresh Add host
Alerts Settings Audit log
Alerts Settings Audit log

(Screenshots from a fresh smoke install with no hosts. A populated fleet view and the live-log + restore wizard surfaces are part of the docs site under docs/book/make docs to render locally.)

Architecture (one-line)

A small Go control-plane in Docker, lightweight Go agents on each endpoint holding an outbound WebSocket to the control-plane, and a restic repository (rest-server, S3, B2, SFTP — anything restic speaks) that holds the actual backup data. The control-plane never touches backup bytes.

Full architecture diagram and component breakdown: spec.md §3, or the rendered version in the docs site.

Repository layout

cmd/server/        control-plane binary
cmd/agent/         endpoint agent binary
internal/api       shared API types (REST + WS envelopes)
internal/server/   HTTP, WS, UI handlers, alert engine
internal/agent/    service integration, restic runner, local scheduler
internal/restic    restic CLI wrapper
internal/store     SQLite persistence
internal/crypto    secret encryption (AEAD)
internal/auth      passwords, sessions, agent tokens
web/               server-rendered templates + static assets
deploy/            Dockerfile, docker-compose.yml, install scripts, Grafana dashboard
docs/              prose docs + the mdBook site under docs/book
e2e/               compose stack + Playwright tests for end-to-end CI

Quickstart

The reference deployment is a single Docker container fronted by your existing reverse proxy. See the installation guide for the full path; the very short version:

export RM_VERSION=v0.9.0    # pin a real tag
export RM_BASE_URL=https://restic.example.com
export RM_TRUSTED_PROXY=10.0.0.0/8
docker compose -f deploy/docker-compose.yml up -d

The server prints a one-time bootstrap token to the log on first start. POST it to /api/bootstrap (or open /bootstrap in a browser) to create the admin user.

Local development

Requires Go 1.25+. The floor is set by modernc.org/sqlite v1.50.

make build           # builds cmd/server and cmd/agent into ./bin
make test            # runs go test ./...
make lint            # runs golangci-lint
make smoke-restart   # systemd --user smoke server (see CLAUDE.md)
make docs            # renders the mdBook site to docs/book/book/

End-to-end test harness against a Docker Compose stack with a sibling Linux agent: see docs/e2e.md. Runs in CI on every PR.

Documentation

License

PolyForm Noncommercial 1.0.0. Free for personal, hobby, research, educational, governmental, and other noncommercial use. Commercial use requires a separate license.

S
Description
No description provided
Readme 2.9 MiB
2026-05-09 12:58:56 +01:00
Languages
Go 68.6%
HTML 28.5%
CSS 1.4%
TypeScript 0.5%
Makefile 0.4%
Other 0.5%