hashtree
Content-addressed filesystem on Nostr. Merkle roots can be published to get mutable npub/tree/path addresses. Data is chunked, optionally encrypted by default (CHK), and works with Blossom-compatible storage and WebRTC fetches.
Cost / License
- Free
- Open Source (MIT)
Platforms
- Online
- Linux
- Mac
- Windows
Features
Properties
- Privacy focused
Features
- Decentralized
- No registration required
- Dark Mode
- Ad-free
- No Tracking
- Peer-To-Peer
- WebRTC
hashtree News & Activities
Recent activities
- justarandom added hashtree
- justarandom added hashtree as alternative to OnionShare, Send, Wormhole and RetroShare
hashtree information
What is hashtree?
Content-addressed filesystem on Nostr. Merkle roots can be published to get mutable npub/tree/path addresses. Data is chunked, optionally encrypted by default (CHK), and works with Blossom-compatible storage and WebRTC fetches.
Content-Addressed Storage
A simple merkle tree for git repos, file sharing, and anything else. Sync peer-to-peer between browsers and devices, or via servers.
Content-Addressed
Files and directories stored as merkle trees, identified by hash. Verify integrity automatically. Deduplicate across repos.
Encrypted by Default
Content Hash Key (CHK) encryption: the key is the hash of the plaintext. Same content always produces the same ciphertext, enabling deduplication even on encrypted data.
Mutable References
Use npub/path URLs as stable permalinks. The latest merkle root is published to Nostr relays, so links always resolve to the current version.
Peer-to-Peer
Share directly between browsers and devices over WebRTC. Also works with Blossom servers, HTTP, or any custom transport.
No Gatekeepers
No DNS, no SSL certificates, no accounts — just a keypair. Ideal for autonomous agents and humans alike.
Structure
ts/ - TypeScript/JavaScript SDK packages. See ts/README.md. rust/ - Rust CLI/daemon, git remote helper, and crates. See rust/README.md. apps/ - Applications (web + desktop) iris-files/ - Iris Files app (Tauri desktop + web). See apps/iris-files/README.md.
Design highlights
SHA256 hashing Deterministic MessagePack encoding for tree nodes CHK encryption by default (hash + key in CIDs) Simple storage interface: get(hash) -> bytes, put(hash, bytes) 2MB chunks optimized for Blossom uploads Nostr-published roots for mutable addresses WebRTC fetches with Blossom fallback
Installation
Quick install (macOS/Linux)
curl -fsSL https://github.com/mmalmi/hashtree/releases/latest/download/hashtree-$(uname -m | sed 's/arm64/aarch64/')-$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/apple-darwin/' | sed 's/linux/unknown-linux-musl/').tar.gz | tar -xz && cd hashtree && ./install.sh
Cargo (requires Rust)
CLI + daemon + git remote helper (default)
cargo install hashtree-cli
Minimal install without P2P/WebRTC/git-remote (smaller binary)
cargo install hashtree-cli --no-default-features
Getting started
Web app + JS SDK: follow ts/README.md CLI + daemon + git remote: follow rust/README.md
Protocol spec
docs/HTS-01.md - hashtree core protocol (draft)
License
MIT

