Skip to content

Latest commit

 

History

History
45 lines (41 loc) · 4.64 KB

File metadata and controls

45 lines (41 loc) · 4.64 KB

Roadmap

Planned

Feature Description Priority
GUI Config Editing Structured editing of the config in the GUI, currently only via YAML High
Linux GUI packaging Native .deb/.rpm packages and a repository for streamlined installation High
Windows GUI packaging MSI installer and/or winget package for first-class Windows support High
Snapshot filtering By host, tag, path, date ranges Medium
Async I/O Non-blocking storage operations Medium
JSON output mode Structured JSON output for all CLI commands to enable scripting and integration with monitoring tools Medium
Per-token permissions Expand permissions from full/append-only to also limit reading and maintenance Medium
Hardlink & special file support Extend ItemType with Hardlink, BlockDevice, CharDevice, Fifo, Socket; inode tracking during walk; link()/mknod during restore Medium
macOS dataless file modes Per-source dataless: skip|hydrate|hydrate-evict to control whether cloud-only files (iCloud Drive, Dropbox, OneDrive, etc.) are skipped, hydrated for backup, or hydrated then evicted via NSFileProviderManager. The skip side has landed — skip-with-parent-reuse is the hardcoded default, unlistable cloud-only directories are non-fatal, and both are tallied and reported at the end of a run. The configurable modes (and hydration itself) have not. Medium
Nominal snapshot timestamp Add optional time_nominal to SnapshotMeta for the data's real-world timestamp (e.g. ZFS snapshot time), distinct from backup start/end times Low

Implemented

Feature Description
Pack files Chunks grouped into ~32 MiB packs with dynamic sizing, separate data/tree packs
Retention policies keep_daily, keep_weekly, keep_monthly, keep_yearly, keep_last, keep_within
snapshot delete command Remove individual snapshots, decrement refcounts
prune command Apply retention policies, remove expired snapshots
check command Structural integrity + optional --verify-data for full content verification
Type-safe PackId Newtype for pack file identifiers with storage_key()
compact command Rewrite packs to reclaim space from orphaned blobs after delete/prune
REST server axum-based backup server with auth, append-only enforcement, quotas, freshness tracking, and server-side compaction
REST backend StorageBackend over HTTP with range-read support
Tiered dedup index Backup dedup via session map + xor filter + mmap dedup cache, with safe fallback to HashMap dedup mode
Restore mmap cache Restore-cache-first item-stream lookup with safe fallback to the full index when cache entries are stale or incomplete
Append-only repository layout v2 Snapshot listing derived from immutable snapshots/<id> blobs; index stores authenticated generation and index.gen is an advisory cache hint
Bounded parallel pipeline Byte-budgeted pipeline with bounded worker/upload concurrency derived from limits.threads and limits.connections
Heap-backed pack assembly Pack writers use heap-backed buffers after the mmap path was removed for reliability on some systems
cache_dir override Configurable root for file cache, dedup/restore/full-index caches, and preferred mmap temp-file location
Parallel transforms rayon-backed compression/encryption within the bounded pipeline
break-lock command Forced stale-lock cleanup for backend/object lock recovery
Compact pack health accounting Compact analysis reports/tracks corrupt and orphan packs in addition to reclaimable dead bytes
File-level cache inode/mtime/ctime skip for unchanged files — avoids read, chunk, compress, encrypt. Keys are 16-byte BLAKE2b path hashes (with transparent legacy migration). Stored locally under the per-repo cache root (default platform cache dir + vykar, or cache_dir override).
Daemon mode vykar daemon runs scheduled backup→prune→compact→check cycles with two-stage signal handling
Server-side pack verification vykar check delegates pack integrity checks to vykar-server when available; --distrust-server opts out
Upload integrity REST PUT includes X-Content-BLAKE2b header; server verifies during streaming write
vykar-protocol crate Shared wire-format types and pack/protocol version constants between client and server
Type-safe SnapshotId Newtype for snapshot identifiers with storage_key() for snapshots/<id> objects