Skip to content

Releases: DRNKNDev/valv

Release list

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 14 Jul 09:12

First release of Valv: valv (CLI) and valvd (sync daemon), the Valv macOS app, and the open-core sync engine behind them.

Sync

  • server-authoritative op log: every change is an op the server orders, so two devices converge on the same tree instead of racing
  • content-defined chunking with deduplication, so an edit to a large file uploads only the chunks that actually changed
  • version history on every file, with valv versions <path> to list stored versions and valv restore <path> --version <id> to roll one back
  • conflicting edits become conflict copies beside the original rather than a silent overwrite
  • moves and renames are tracked as moves, not as a delete plus a create
  • deletes are tombstoned and propagate correctly to a device that was offline when they happened
  • realtime push over a websocket, with a delta pull that resumes from a cursor

CLI (valv)

  • valv login signs a device in through the browser and writes its local config
  • valv mount <path> takes an explicit source: --folder to attach a folder you can already reach, --key to redeem an access key, or --new to create a folder from that path
  • valv status reports this machine's principal, daemon health, and every mounted folder's sync state
  • valv sync is a barrier, not a nudge: it repeats a push+pull round trip and exits 0 only once a round leaves nothing pending, so scripts can wait on it instead of polling
  • valv sync exits 75 (sync_timed_out) when it doesn't settle inside its 120s bound, and 1 (sync_mount_error) when a mount is persistently faulted while the backend is reachable; a backend outage is treated as connectivity and retried, not as a mount fault
  • valv pause and valv resume stop and restart background watching and sync for the device
  • --json is honored by every command, with a stable output contract and named error codes
  • valv update resolves, verifies, and installs the latest released valv/valvd

Sharing & access keys

  • valv share <path> --to <email> invites a person, who accepts in a browser with their own account
  • valv share <path> --key <name> issues a runnable access key, shown once, for a machine that has no Valv account
  • a headless machine redeems that key with valv mount <path> --key <token>: no browser, no account, no device token on disk
  • access keys cannot re-delegate: a machine you hand a key to cannot share the folder onward
  • --read-only grants read access without write, and a read-only mount refuses local pushes instead of accumulating changes it can never send
  • grants are node-scoped, so a grant can cover a subtree rather than the whole folder, with nearest-ancestor-wins resolution
  • valv share <path> with no flags lists who has access and since when; valv revoke <path> takes --to, --key, or --id

Daemon (valvd)

  • installs itself as a real service on first use: your first valv login or valv mount sets up a systemd user unit on Linux, or a launchd agent on macOS, and starts it
  • runs without an account credential, so an access-key-only machine is a first-class deployment
  • GET /status reports the running version, the machine's principal, backend connectivity, and per-mount sync state
  • surfaces a forbidden push as a real mount error rather than retrying it forever, and keeps its pending-op count honest
  • checks for its own updates in the background

macOS app

  • menu-bar app with a File Provider extension: mounted folders appear in Finder and materialize on demand
  • Finder Sync extension for sharing a folder straight from Finder
  • Manage Folders window showing each folder's real sharing list, and handing over a runnable access key for a headless machine
  • in-app updates via Sparkle, over a signed appcast

Server & core (self-hosters)

  • the sync backend is open core (oss/core): schema, op submission, blob store, and realtime, runnable against SQLite or Postgres
  • S3-compatible blob storage with per-tenant chunk keys and signed uploads/downloads
  • garbage collection of unreferenced chunks, runnable on a cron
  • protocol version handshake with a server-side floor, so an out-of-date client is told to update rather than failing obscurely
  • upload quota enforcement that fails closed

Install

  • curl -fsSL https://valvsync.com/install | bash installs valv and valvd to a user-writable directory on PATH, and prints the exact command to add it if it isn't there
  • every release ships a SHA256SUMS manifest, minisign-signed, and the install script verifies each downloaded asset against it
  • macOS binaries (aarch64-apple-darwin) are Developer ID signed and notarized, so a tarball downloaded in a browser runs without a Gatekeeper prompt; Linux binaries (x86_64-unknown-linux-gnu) are checksum-only
  • downloading a tarball from this page and extracting it by hand is a supported path, independent of the install script

Testing

  • a smoke suite that drives real valvd processes against a real backend and blob store: two-device sync, conflict copies, offline deletes, moves and renames, version restore, grant scoping and revocation, large-file chunk reuse, and the headless access-key mount path against a genuine systemd unit and launchd agent