A single Grove node โ one device running grove.py and web.py. Every cell has its own identity (keypair), storage, and dashboard. Your laptop, a Raspberry Pi, a VPS โ each is a cell.
All the cells you're connected to. Your personal distributed network.
Another cell in your fleet. Peers sync files, relay messages, and back each other up.
A peer you've promoted to friend status. Friends can share files with you (via grants). Non-friend peers can still store your encrypted chunks but can't share files with you.
A peer marked as a preferred sync target. Your chunks will always be synced to favorite peers first, regardless of speed ranking.
A 4MB piece of a file, encrypted with ChaCha20-Poly1305. Files are split into chunks for storage and transfer. Chunk filenames are their SHA-256 hash (content-addressed).
A JSON file describing a complete file: its name, size, chunk hashes, encryption metadata, and source path. Format: {filename}.{hash8}.json. Manifests live in ~/.grove/manifests/.
A cryptographic permission to access a shared file. When you share a file with a peer, you create a signed grant containing the manifest hash, the encrypted file key, and your signature. Grants are verified using Ed25519 signatures.
The system's record of which chunks live on which peers. Used to decide where to replicate, what's under-replicated, and what's at risk. Stored in ~/.grove/placement.db (SQLite).
How many copies of each chunk exist across the fleet. Default desired factor: 2 (your cell + one peer). Configurable per-cell.
A WebSocket server that lets cells communicate when they can't reach each other directly (e.g., behind NAT). Cells connect to a relay and exchange messages through it. Relay operators can't read message contents (end-to-end encrypted).
How two cells communicate. Types:
100.x.x.x)200: / 201: / 202: addresses)192.168.x.x)A token-like credit system for resource sharing. Peers earn bounty by storing chunks for others. Spend bounty to store your data on peers. Currently tracks storage contributions.
Built-in AI chat powered by local LLM inference (llama.cpp or Ollama). Can also route queries to peer cells with more powerful hardware.
Background process that runs every ~5 minutes. Probes all peers, checks for missing chunks, pulls/pushes data to maintain replication targets, records speed measurements, and runs health checks.
1. Upload โ File saved to GROVE_HOME (your file tree)
2. Chunk โ Split into 4MB chunks, encrypted with ChaCha20
3. Manifest โ JSON manifest created describing the file
4. Local storage โ Chunks stored in ~/.grove/chunks/{hash[:2]}/{hash}
5. Sync โ Opp sync pushes chunks to peers (speed-ranked)
6. Placement โ Placement DB tracks which peers hold which chunks
7. Healing โ If a peer goes offline, chunks re-replicate elsewhere
1. Select file โ Choose file(s) in dashboard
2. Pick peers โ Select which friends to share with
3. Create grant โ Signed grant with encrypted file key
4. Push grant โ Grant sent to peer's cell
5. Peer sees file โ Appears in their Feed tab
6. Peer downloads โ Chunks pulled from your cell (or other holders)
~/.grove/ # Runtime directory (GROVE_DIR)
โโโ config.json # Cell configuration
โโโ node.key # Ed25519 private signing key
โโโ node.pub # Ed25519 public key
โโโ node_x25519.key # X25519 private key (for chat encryption)
โโโ node_x25519.pub # X25519 public key
โโโ .key # Master encryption key (256-bit)
โโโ peer_secret # Shared secret for peer API auth
โโโ dashboard_auth # Dashboard password hash
โโโ placement.db # SQLite: chunk placement tracking
โโโ peer_speeds.json # Recorded route speeds
โโโ peer_health.json # Peer uptime tracking
โโโ chunks/ # Encrypted chunk storage
โ โโโ ab/ # First 2 hex chars of hash
โ โ โโโ ab3f7c... # Full hash filename
โ โโโ ...
โโโ manifests/ # File manifests
โ โโโ photo.jpg.a1b2c3d4.json
โโโ grants/ # Received share grants
โโโ invites/ # Created invite tokens
โโโ models/ # AI model files (.gguf)
โโโ grove.py # Core library
โโโ web.py # Web dashboard + API server
~/GroveHome/ # User file tree (GROVE_HOME)
โโโ Documents/
โโโ Photos/
โโโ ... # Your actual files
โโโโโโโโโโโโ
โ Relay โ (WebSocket hub, optional)
โโโโโโฌโโโโโโ
โ
โโโโโโโโโโโผโโโโโโโโโโ
โ โ โ
โโโโโดโโโ โโโโโดโโโ โโโโโดโโโ
โ Cell โ โ Cell โ โ Cell โ
โ (Mac)โ โ (Pi) โ โ (VPS)โ
โโโโโโโโ โโโโโโโโ โโโโโโโโ
โ โ โ
Tailscale / Yggdrasil / LAN / WAN
Cells find the best route to each peer automatically. Routes are benchmarked every 6 hours and scored by throughput + latency.