Grant Milestone Progress Report (March)
What progress was made on your grant this month?
- Built the complete backup and restore workflow: users can now
vup initto set up a vault,vup adddirectories,vup backupto create encrypted snapshots,vup snapshotsto list them, andvup restoreto recover files — all verified end-to-end with checksum matching - Designed and implemented a daemon architecture where
vupcommands talk to a backgrounds5node over IPC. This means the CLI stays snappy, multiple commands can share the same node, and config changes (likevup add) take effect immediately without restart - All backup data is encrypted client-side before leaving the device. Recovery keys are displayed during
vup initand accessible throughvup config. Node identity can optionally be age-encrypted at rest - Backups are incremental: only changed files (detected by size+mtime) are uploaded. Unchanged files are skipped. Cache directories (CACHEDIR.TAG) and hidden files are handled correctly
- Restore is a single command that reconstructs the full directory tree from the encrypted snapshot, preserving file contents and structure
- Upgraded the networking stack (iroh 0.94→0.97) and rewrote the local IPC layer from raw QUIC to iroh endpoints, which is simpler and more reliable
- Added several new infrastructure crates that will be reused across milestones: a new FS V2 format with built-in encryption and compression, a typed RPC protocol between CLI and daemon, and blob store adapters for writing to multiple backends simultaneously
| Milestone | Task | PR | Notes |
|---|---|---|---|
| M2: Backup & Restore | vup backup |
#1 | Incremental encrypted snapshots, direct upload to configured store |
vup snapshots |
#1 | List vault snapshots with hash and date | |
vup restore |
#1 | Full restore to target path, checksum-verified | |
| Progress reporting | #1 | Task progress (files scanned/changed/skipped, bytes uploaded) via RPC; visual progress bars planned for M5 | |
| Resume support | #1 | Partial snapshot checkpoints between source paths; content-addressed dedup skips already-uploaded blobs | |
| Age key management | #1 | Age-encrypted identity, recovery key export via vup config |
Validation (git checkout the PR):
cargo install --path vup_cli
vup init # interactive setup — store, recovery key
vup add ~/Documents
vup backup
vup snapshots
vup restore --vault backup --target /tmp/restore-test
# restored files match originals
What will you be working on next month?
- Testing, testing, testing!
- Multi-device sync:
vup sync push/pullcommands and async relay mode using any remote store as an encrypted intermediary - File sharing with
vup share— generate E2EE links for files and folders - FUSE mount for browsing snapshots as a virtual filesystem
- Automatic backup via
--watchflag with filesystem change detection