Drop a file.
Commit it to the cluster.

Bunkr is a distributed file system that splits, encrypts and replicates your files across a 5-node cluster. Kill any 2 nodes — your data still survives. Zero-knowledge. Single Go binary, now with a terminal-native CLI.

AES-256-GCM Raft consensus Zero-knowledge 17 commands
LIVE CLUSTER · /WS/EVENTS
● CONNECTED
node-3LEADER
regionus-east-1a
chunks412
term9
node-1FOLLOWER
regionus-west-2a
chunks412
node-2FOLLOWER
regionus-west-2b
chunks412
node-4FOLLOWER
regioneu-west-1a
chunks412
node-5DOWN
regionap-south-1a
chunks0
LEADERFOLLOWERDOWNQUORUM 4/5 · TERM 9
chunk size4 MB
cluster size5 nodes
tolerates2 failures
encryptionAES-256-GCM
commands17 CLI
New · v1.4.2

The CLI is here. Live in your terminal.

Bunkr now ships with a terminal-native client. Upload, encrypt, replicate, kill nodes, and watch the cluster think — all from your shell. No browser required.

Terminal-native client

Bunkr CLI — your terminal, your cluster.

A single command to upload, encrypt, replicate, and commit files to your cluster. Works over SSH, in CI pipelines, or from a tmux pane. No browser needed.

$npx bunkr-cli
AES-256-GCM
Per-chunk encryption, keys never leave your machine
Raft consensus
Leader election + log replication from the paper
5-node cluster
Kill any 2 nodes, data survives
Zero-knowledge
Server holds 0 bytes of plaintext
Content-addressed
SHA-256 dedup across the cluster
gRPC transport
Streaming replication with backpressure
17 commands
The pipeline

From bytes to ballots in under 200ms.

Every file you commit moves through a four-stage pipeline. Each stage is observable, every transition is logged to the WAL, and the cluster never serves a chunk it can't verify.

01

Chunk

Files stream through a 4MB chunker. Content-addressable — identical chunks dedupe automatically.

4MBSHA-256streaming
02
A7F39c·2a·ff·81

Encrypt

Per-chunk keys derived via HKDF, sealed with AES-256-GCM. The server never sees your master key.

AES-256-GCMHKDFzero-knowledge
03

Replicate

Leader fans chunks to 5 followers over gRPC. Quorum-acknowledged before commit returns.

gRPC5 replicasquorum 3/5
04
0x00 APPEND term=9 idx=4120x01 CRC32 0xa3f27c91 ✓0x02 COMMIT idx=412

Commit

Binary WAL with CRC32, fsynced before ack. Crash-safe — replay reconstructs state exactly.

WALCRC32fsync
Three ways in

Dashboard. CLI. REST.

Whatever you're doing — debugging consensus visually, scripting backups, or wiring Bunkr into a service — there's an interface that fits.

bunkr.local/dashboard

Web Dashboard

Real-time cluster visualization — leader election, kill/revive controls, encrypted upload pipeline, WebSocket event stream.

14:42:01node-3 elected leader · term 9
14:42:01AppendEntries → 4 followers
14:42:03commit idx=410 · quorum 4/5
14:42:09chunk a7f3… replicated 5/5
14:42:14node-5 heartbeat timeout
14:42:14mark node-5 as DOWN
14:42:15commit idx=411 · quorum 4/5
14:42:22WAL fsync · 1.2ms
14:42:24snapshot at idx=400
14:42:30commit idx=412 · quorum 4/5
14:42:36node-5 reconnect · catching up
~ — bunkr

CLI

Single Go binary. Scriptable. Works over SSH, in CI, from a tmux pane.

POST /v1/files

REST + WebSocket

JSON over HTTPS for control, WebSocket for the event firehose.

POST /v1/files
authorization: Bearer …

→ 201 Created
{
"id": "f_8a3c…"
}
Architecture

Built from the Raft paper. Top to bottom.

~7,000 lines of Go. No off-the-shelf consensus library — leader election, log replication, and snapshotting implemented from the extended paper. The hard parts, by hand.

Raft consensus

Leader election, log replication, and snapshot install — all implemented from the extended Raft paper. Survives split-brain and clean leader handoffs.

consensus.go · 1,840 LoC

Zero-knowledge encryption

Master key never leaves the client. Per-chunk keys derived via HKDF, AES-256-GCM seals each chunk with its own nonce and AEAD tag.

crypto/hkdf · crypto/cipher

Content-addressable storage

Chunks keyed by SHA-256 of plaintext. Identical bytes deduplicate across the cluster automatically. Nothing stored twice.

store.go · CAS layer

Binary WAL with CRC32

Every state mutation appends to a write-ahead log with a length-prefixed binary frame and CRC32. Crash mid-write? Replay drops the torn record and resumes.

wal.go · framed binary

gRPC transport

Mutual-TLS gRPC between nodes. Streaming replication, backpressure-aware, with codegen'd protobuf schemas for every RPC.

proto/raft.proto · mTLS

Live event stream

WebSocket firehose of every cluster event — heartbeats, vote requests, AppendEntries, commits, kills. Watch the cluster think.

/ws/events · JSON frames

Kill 2 nodes.
Your data survives.

5 replicas. 3-node quorum. Lose any two — the cluster is still readable, writable, and consistent. Bring the dead nodes back and they catch up automatically via snapshot install + log replay.

node-1
FOLLOWER
node-2
FOLLOWER
node-3
LEADER
node-4
FOLLOWER
node-5
DOWN
QUORUM 4/5FILES 2 readableSTATUS HEALTHY · quorum held
Two themes

Cosmic Indigo. Concrete & Saffron.

The dashboard ships with two distinct moods. One quiet, one loud. Same data — pick the one you'd rather stare at all day.

Cosmic Indigo dashboard
Cosmic Indigo · dark, glow, dot grid
Concrete and Saffron dashboard
Concrete & Saffron · brutalist, hard shadows

Spin up a 5-node cluster in 60 seconds.

One command in your terminal. No browser, no config, no signup.

$ npx bunkr-cli  ·  $ bunkr cluster up --nodes=5