v1.0.0 — first stable release
LemurPouch is LAN file sharing that works on the most restrictive networks. One relay binary on the LAN, two browsers connecting outbound — no inbound ports, no WebRTC, no UDP, no STUN/ICE/TURN. Every file is
end-to-end encrypted; the relay routes ciphertext byte-for-byte and never sees content.
Quick start
macOS / Linux:
curl -fsSL https://lemurpouch.com/install.sh | shWindows (PowerShell):
irm https://lemurpouch.com/install.ps1 | iexDocker:
docker run --rm -p 8080:8080 ghcr.io/steelbrain/lemur-pouch:latestThen open http://<your-LAN-IP>:8080/ on each device. The two browsers verify each other by a six-word BIP-39 fingerprint, exchange a friendship invite, and start sending files.
What it does
- Outbound-only transport. WebSocket to the relay — works wherever the firewall lets a browser load a webpage.
- End-to-end encrypted. Ed25519 identity, X25519 key agreement, HKDF-SHA256 session keys, XChaCha20-Poly1305 sealed envelopes. Six-word fingerprint for human verification.
- Two-tier consent. Friendship invite (per-IP rate-limited) plus a per-transfer accept on every individual file.
- Session-only state. Identities, friendships, and queued invites live in relay memory. Restart = clean slate.
- Single static binary. React frontend embedded via
go:embed; cross-compiled with CGO disabled.
Platforms
Standalone binaries: macOS / Linux / Windows on amd64 and arm64 (six archives). Docker image: unified manifest spanning linux/amd64, linux/arm64, windows/amd64 — docker pull resolves to the right one for
the host.
Verify any download against the published SHA256SUMS.
What's not in this release (by design)
- No persistence — relay restart loses friendships and active transfers.
- No native daemon, no TLS, no resumable transfers.
- No payload logs, no metrics.
The full protocol, threat model, and wire format live in the Protocol Reference appendix of AGENTS.md.
Full Changelog: https://github.com/steelbrain/lemur-pouch/commits/v1.0.0