Shardnet
Store and share files without servers.
Encrypted on your device. Split across the network.
Nothing to trust.
v0.97.0 · Alpha · Linux x86_64 · static binary · no dependencies
Encryption
Erasure coding
No infrastructure
Useful when the file must not touch a cloud provider — legal hold, sensitive IP, or jurisdictions where data residency matters. Because there is no central index, there is nothing to subpoena, block, or deplatform. The swarm continues to serve a file as long as at least 10 of its 15 storage nodes remain online.
How a file travels
Your file leaves encrypted. Arrives in fifteen fragments.
Lives on no single machine.
Encrypt
Shard
Distribute
| Transport | QUIC (quinn 0.11) + TLS 1.3 (rustls) |
| Identity | Ed25519 — keypair generated locally on first run |
| Routing | Kademlia DHT — k=20, XOR metric, 256 buckets |
| Erasure coding | Reed-Solomon — 10 data + 5 parity shards |
| Encryption | AES-256-GCM — key never leaves the uploading node |
| Sybil resistance | Argon2id proof-of-work at node startup |
| Serialisation | Bincode — binary, length-prefixed frames |
| Rate limiting | Token bucket per source IP, sliding window |
| NAT traversal | STUN + UDP hole punching + TTL-bounded relay fallback |
| Address discovery | Interface scan — RFC1918, CGNAT (100.64/10), IPv6 aware |
| Dynamic IP | STUN refresh every 60 s — survives mobile and VPN IP changes |
For agents
Persist context
Coordinate
Share artifacts
# save — upload context blob, receive magnet curl -X POST http://localhost:9201/api/files/upload -F "[email protected]" # → {"magnet": "y36fKjLL…", "filename": "ctx.json"} # restore — download by magnet (any node, any session) curl -X POST http://localhost:9201/api/files/download \ -H "Content-Type: application/json" \ -d '{"magnet": "y36fKjLL…"}' # → {"path": "/path/to/downloads/ctx.json"}
Full API reference (written for LLM consumption) → llms-full.txt · Runnable examples (Python · shell · Node.js) → examples/
Magnet links contain the decryption key — treat them as secrets.
Never pass a magnet to an LLM in a prompt or tool argument. ·
Store magnets in a secret manager (vault, KMS, env var) — not in conversation history or logs. ·
LLM frameworks log tool call arguments by default: exclude download endpoints from traces. ·
For strict isolation, use envelope encryption: the app holds the AES key; the agent receives only an opaque reference ID.
What you can build
Decentralized publishing
Write in Markdown. Upload with /put and share the magnet link.
Readers open it in the app — no browser, no web server needed.
The Reader tab renders Markdown up to 512 KB.
Good for articles, docs, or wikis that should outlive any single host.
Agent coordination
Chat messages prefixed with \x1f (ASCII Unit Separator) are
filtered from the terminal display for human users, but visible to API and WebSocket clients.
A straightforward pattern for coordinating bots or LLM agents in a shared room
without polluting the human-readable feed.
Threshold access
Every file splits into 15 fragments. Any 10 reconstruct it. Spread the 15 locations across 15 separate nodes — no single party can reconstruct the file alone. A Shamir-like custody pattern at the storage layer, with no extra cryptography required.
Download · v0.97.0
/read), join chat rooms, inspect the routing table. Check node status and storage at any time with /status. Daemon mode (--daemon) and passive listen-only mode (--passive) for headless or observer deployments.Linux x86_64 · static binary
Linux x86_64 · static binary
127.0.0.1:9201 — chat, upload/download, Reader, and an Events log in the Files tab.Android 8+ · ARM64 / ARMv7 · APK
SHA-256 checksums · v0.97.0
| shard-cli | 9b5aa70f3e51d80e9a8d4314705093406d2fff0363b893da3bf50a66f3f7999d |
| shard-gui | 3c5d9187b73e0cfdbdbf3a17b8d03973c29ad57834e0a7b49cad3d5f0b5a80e7 |
| shard_0.97.0.apk | 76ed98905a49d2ea396c363aa38d50682530ca3269b4ba006c19378ef854a357 |