Initialize vivo
Checks prerequisites and scaffolds your config and secrets files.
$ vivo init Vivo wraps restic to orchestrate backups with multi-remote sync — S3, B2, and more. Credentials stay encrypted at rest with SOPS + age.
curl -sSf https://raw.githubusercontent.com/dantuck/vivo/main/install.sh | sh How it works
restic snapshots your directories to a local repository
repo integrity is verified before any remote sync
old snapshots are pruned by your retention policy
data is pushed to all configured remote backends
Features
SOPS + age keeps your remote keys out of plaintext configs. Secrets are decrypted in-memory only at runtime.
Push the same backup to S3, Backblaze B2, MinIO, and more in one run. Add as many remotes as you need.
Use --start-step to skip already-completed phases. Resume from forget, or run sync-only.
Run `vivo update` to pull the latest release. Background version checks notify you after each run.
Tasks can call other tasks and run shell commands post-backup. Circular references are detected and skipped.
Test your full configuration without writing a single byte. Skips remote sync, forwards --dry-run to restic.
Configuration
Configure backups in a clean KDL file. Set your repo, directories to back up, retention policy, and remote destinations — all in one place.
Secrets are stored separately in a SOPS-encrypted YAML file and injected as environment variables at runtime — never written to disk in plaintext.
~/.config/vivo/backup.kdl ~/.config/vivo/secrets.yaml // default task to run default-task "backup" tasks { task "backup" { backup { repo "$HOME/.local/share/restic/main" directory "$HOME" exclude-file "$HOME/.config/vivo/excludes" retention { daily 7 weekly 5 monthly 12 yearly 2 } remote "s3:https://s3.amazonaws.com/my-bucket" { credentials "aws" } remote "b2:my-bucket:restic/main" { credentials "b2" } } command "notify-send 'Backup complete'" } }
Remote Backends
AWS S3, MinIO, rustfs, or any S3-compatible endpoint. Uses restic copy for fast, verified transfer. Initialize the remote repo once before first sync.
restic init --repo s3:https://s3.amazonaws.com/my-bucket Cost-effective cold storage via the b2 CLI. Uses b2 sync with automatic replacement of stale files. No remote restic repo initialization needed.
Quick Start
Checks prerequisites and scaffolds your config and secrets files.
$ vivo init Set your repo path, directories to back up, and remote destinations.
$ vivo config edit Set your restic password and remote credentials, encrypted with SOPS + age.
$ vivo secrets edit Dry-run first to verify your setup, then run the real backup.
$ vivo --dry-run $ vivo
Install
Linux and macOS. Downloads the latest binary from GitHub Releases and verifies the SHA256 checksum.
$ curl -sSf https://raw.githubusercontent.com/dantuck/vivo/main/install.sh | sh Requires Rust installed. Builds from source and installs to your Cargo bin directory.
$ cargo install vivo Clone from Codeberg or GitHub and build manually.
$ git clone https://codeberg.org/tuck/vivo
cd vivo
cargo build --release
cp target/release/vivo /usr/local/bin/
Already installed? Run vivo update to upgrade to the latest release,
or vivo update --dry-run to preview without applying.