steve dd7b37a5c1
CI / Test (linux/amd64) (pull_request) Successful in 21s
CI / Lint (pull_request) Successful in 24s
CI / Build (windows/amd64) (pull_request) Successful in 20s
CI / Build (linux/amd64) (pull_request) Successful in 21s
CI / Build (linux/arm64) (pull_request) Successful in 20s
lint: align local gofumpt rules with golangci-lint v2.5.0
Bumping CI to v2.5.0 surfaced two new gofumpt findings (in two test
files that gofumpt v2.1.6 considered fine). Local re-format with
the matching tool brings them in line.

Pre-commit hook config: prepend $GOPATH/bin to PATH inside the hook
entry so gofumpt + golangci-lint resolve when ~/go/bin isn't on the
operator's interactive shell PATH (common — go install puts them
there but PATH config varies). Without this, the hooks fail with
'Executable not found' even when the tools are installed.

Pin the Makefile setup target to v2.5.0 so a fresh clone gets the
same binary CI runs — keeps pre-commit and CI from drifting again.
2026-05-03 21:31:47 +01:00
2026-05-01 00:03:59 +01:00
2026-05-01 00:03:59 +01:00
2026-05-02 11:12:58 +01:00
2026-05-02 11:12:58 +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-alpha. Phase 0 (project bootstrap) complete; Phase 1 (MVP) in progress. See spec.md for the design and tasks.md for the roadmap.

What it does (target)

  • Central visibility into backup state for every endpoint
  • Trigger any restic operation remotely (backup, forget, prune, check, unlock, snapshots, stats, diff, restore)
  • Manage per-host backup schedules from the UI
  • Live job progress streamed back to the UI
  • Restore wizard (browse snapshots, pick paths, restore to original or alternate host)
  • Repo health surfacing (size, dedup ratio, last check, lock state)
  • Alerting on failure or staleness
  • Cross-platform agent (Linux + Windows)
  • Ransomware-resistant repo access via append-only credentials

Architecture (one-line summary)

A small Go control-plane on the Proxmox host, lightweight Go agents on each endpoint that hold an outbound WebSocket to the control-plane, and a restic/rest-server on Unraid that holds the actual backup data. The control-plane never touches backup bytes.

Full architecture diagram and component breakdown: spec.md §3.

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
internal/agent/    service integration, restic runner, local scheduler
internal/restic    restic CLI wrapper
internal/store     SQLite persistence
internal/crypto    secret encryption
internal/auth      passwords, sessions, agent tokens
web/               server-rendered templates + static assets
deploy/            Dockerfile, docker-compose.yml, install scripts
design/            UI wireframes (Phase 0 design pass)

Local development

Requires Go 1.25+ (built and tested on 1.26). 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 run-server      # runs the server (dev defaults)

License

PolyForm Noncommercial 1.0.0 — see LICENSE. 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%