Quickstart

5 minutes — init, sync, pull, verify.

This walks you through the everyday flow on a small directory of photos. You'll need frostvex installed on at least two boxes — a laptop and a server, or two servers, doesn't matter.

1. Initialize a pool

Pick a directory you want to keep in sync. We'll use ./photos:

$ cd ~/holiday
$ frostvex init ./photos

That writes a .frostvex/ subdirectory next to your files. It contains the manifest, a content-addressed chunk store, and a per-pool keypair. Nothing leaves the box yet.

The init walks the tree once and produces a stable pool id — an 18-character handle that's a stable identifier across renames. Save it; you'll see it in stat output and you'll need it to share with peers.

2. Push to a remote

The remote can be addressed by SSH-style host:path or as a URL. Both work — pick what's easier:

$ frostvex sync ./photos --to backup-srv:/srv/photos/
# or equivalently:
$ frostvex sync ./photos --to fvex://backup-srv/srv/photos/

You should see something like this:

Output of frostvex init followed by frostvex sync — pool created with 244 files, sync streams 12 changed files, parity verified, total 0.51s with peak 18.4 MB/s.

The first sync is more expensive than subsequent ones — frostvex has to ship a manifest and the chunk store. After that, only deltas move. On a typical photo library, steady-state sync is dominated by manifest hashing, not network.

3. Inspect

The stat subcommand is your first stop when something looks off:

frostvex stat output showing pool path, 244 files at 88.6 MB, last sync 6 minutes ago, parity ok with Reed-Solomon 8+4, 99.4% bandwidth efficiency, 3 connected peers.

What each line means:

4. Pull from a peer

If you want the reverse direction — say, copy from your laptop down to a backup server — use pull:

frostvex pull from peer://laptop:f8a9 — discovers laptop on LAN, negotiates manifest, pulls 31 files (~7.2 MB), verifies parity, completes in 0.18s.

The peer:// scheme uses the local discovery service. If the peer is across the internet, you'll want a stable hostname or IP — see peers in the config docs.

5. Verify

Strict verify reads every chunk, recomputes the BLAKE3 hash, and cross-checks against the parity blocks. Slow but worth it — most "silent" corruption shows up here.

frostvex verify --strict completes in 1.42s at 62 MB/s, all 244 entries verified.

You probably want this in cron. Once a week is overkill for most people; once a month is fine.

What's next

Common gotcha. Frostvex never deletes a file you didn't ask it to. If a sync would remove something on the destination, it gets quarantined to .frostvex/quarantine/ first. You can clean those up with frostvex prune when you're confident, or set auto_prune = true in frostvex.toml.