Introduction
OneSVD is an open-source, content-addressed file store that fingerprints every file and folder so you can prove exactly what you're storing.
OneSVD watches a directory, builds a Merkle tree over its contents, and serves a live web UI for browsing, sharing, and verifying it. Every file and folder gets a SHA-256 fingerprint, and a folder's fingerprint is derived from its children — so a single root hash certifies the entire tree.
It runs as three small processes you host yourself: a filesystem watcher, a hub that serves the web UI and API, and the web client. A single install script sets all three up on Ubuntu.
New here? Install the node, then walk the quickstart — you'll have a live, fingerprinted file tree in a couple of minutes.
What it's for#
OneSVD is built for storing things you need to trust later: build artifacts, backups, configuration state, and release pipelines. Because the tree is content-addressed, you can verify nothing changed in transit or at rest, down to the byte.
- Integrity you can check. The root hash changes if and only if the contents change.
- Self-hosted by default. Your files stay on hardware you control. No license keys, no limits.
- Live, not batch. The watcher reacts to changes as they happen and the UI updates in real time.
- Git runners built in. Point a runner at a repo and OneSVD clones, builds, and drops the artifacts into your tree on every commit.
How it fits together#
The watcher owns the truth: it scans the directory, computes hashes, and publishes a snapshot to the hub over a loopback connection. The hub holds a mirror of that tree, serves it to browsers over WebSocket, and handles uploads, downloads, sharing, and the runner system. The client is a single-page app the hub serves.
You don't have to think about any of that to use it — the install script wires the three together and hands you a URL.
Where to go next#
- Install on Ubuntu — the one-line setup.
- Quickstart — add your first files and see the tree update.
- The Merkle tree — how content addressing actually works here.