Vilice is a proof of concept. Run it on a box you can afford to lose.

vilice backup

Snapshot an app (or --all, or --machine).

operate recorded before it runs

vilice backup --help
vilice backup — Snapshot an app (or --all, or --machine)

Snapshots an app's declared volumes together with its spec, so what
comes back is self-contained: the data, and how to redeploy it.

Backups go to a restic repo you own. restic encrypts on this box with
your key, so the destination only ever sees ciphertext and can live on
infrastructure you do not trust.

Configure the repo once with --repo; the password is read on stdin and
written to a 0600 file, never passed on argv where it would land in
the record and the process table.

Vilice stays database-agnostic. An app that needs a consistent dump
declares a backup hook in its spec; Vilice never learns what Postgres
or SQLite is.

Usage:
  vilice backup <app> | --all | --machine | --repo <url>

Flags:
  --all         Snapshot every app on the box.
  --machine     Snapshot Vilice's own record off-box.
  --repo <url>  One-time setup: set the restic repo, read its password on
                stdin, and initialise it.

Examples:
  Point the box at a repo. Do this once, before anything else.
    vilice backup --repo s3:s3.example.com/vilice < repo.pass

  Snapshot one app's volumes and spec.
    vilice backup blog

  Snapshot every app on the box.
    vilice backup --all

Scope:  operate — reachable by an operate or grant key
Record: written before the command runs