← goonk.se
waste-go

Private. Peer-to-peer.
No company in the middle.

Encrypted chat and file sharing for small groups of people who actually trust each other. No account. No phone number. No server reading your messages. Works in your browser.

Alice
anchor
signaling only
WebRTC · DTLS · end-to-end
Bob

The anchor helps peers find each other. Your data never passes through it.

Terminal UI — three-panel layout, keyboard-driven, connects to a running daemon
Browser mode — identity shown as short ID, saved networks, no install required
Daemon mode — folder sharing panel, two peers connected, no server in the data path

The apps you use weren't built for this

Signal
Requires a phone number. You're a data point to a foundation, not a person.
Discord
A company with terms of service, investors, and the ability to read everything you send.
WhatsApp / Telegram
Metadata is the product. Even end-to-end encrypted content comes with surveillance of who you talk to.
Syncthing / SFTP
Great tools. Impossible to ask non-technical friends to set up.

WASTE — the original — figured this out in 2003. Small trusted groups, encrypted, no central server. It got pulled within 24 hours of release, leaked back out, and slowly became a relic. The idea was right. The implementation didn't survive contact with NAT, modern browsers, or 20 years of better cryptography.

waste-go is the same idea rebuilt from scratch.

How it works

01

You run an anchor

A small Go binary on any VPS. Its only job: help peers find each other by relaying sealed blobs. It never sees your network name, your messages, or your files.

02

Peers connect directly

WebRTC handles NAT traversal. Once two peers have exchanged signaling through the anchor, the connection is direct — DTLS-encrypted peer-to-peer. The anchor drops out of the picture.

03

Identity, not accounts

Each peer has an Ed25519 keypair. You add someone's key to your keyring, they add yours. No username/password. No server to trust. Connections are verified cryptographically on both ends.

04

Share a link, they're in

Generate an invite link. Send it over any channel. The recipient visits the URL — no install required, everything runs in the browser via WebAssembly. They're on the network in seconds.

Three ways to use it

🌐

Browser mode

Visit a URL. That's it. Crypto runs via libsodium compiled to WebAssembly — same primitives as the native client, same security guarantees. Identity persists in localStorage. Works on mobile. Can be pinned to your home screen as a PWA.

No install required
⚙️

Daemon mode

A Go process running locally. Full feature set: per-network identity isolation via HKDF, multi-share file libraries, transfer resume, terminal UI. Connects via JSON IPC — any UI can talk to it.

Power users
🖥️

Desktop app

A Wails shell packaging the React frontend and daemon into a single native binary. Same codebase as the web UI — no Electron, just the OS webview. Windows, macOS, Linux.

Self-contained

What "encrypted" actually means here

Identity
Ed25519 keypair. Your key is your identity — no server vouches for you.
Signaling
XSalsa20-Poly1305 sealed to the recipient's key. The anchor relays opaque ciphertext it cannot open.
Forward secrecy
Ephemeral X25519 keys per session (YAW/2.1). Wiped on disconnect. Recorded traffic stays unrecoverable even if long-term keys leak later.
Transport
WebRTC DataChannels — DTLS 1.2/1.3, AEAD, per-session forward secrecy. The same transport your browser uses for video calls.
Identity binding
SDP travels inside an authenticated sealed box. On channel open, both peers sign over the DTLS fingerprints. A malicious anchor cannot MITM this.
Files
Transferred directly peer-to-peer over a dedicated DataChannel. SHA-256 verified on arrival. Transfer resume survives disconnections.

YAW/2 — the protocol waste-go implements — was designed by a friend and formally specified before any code was written. The 2.0 baseline is locked for interop. Extensions are additive and backward-compatible.

Interested?

The full case study covers the engineering decisions in depth — the identity binding problem, the NAT traversal tradeoffs, the forward-secrecy upgrade, and why the protocol spec came before the code.

built on the same anchor

flit

Ephemeral, end-to-end encrypted file transfer between your own devices. Think AirDrop — without Apple.

flit transfer view — verified peer, multi-file send with filenames shown as sent, incoming files queued for accept
Verified peer — multi-file send and receive in the same session
flit Known devices tab — Samsung device listed with Connect, Rename, Forget buttons
Known devices — one tap to reconnect, no QR needed
flit QR pairing screen — large QR code displayed with 'Waiting for peer…' status
QR pairing — first-time or one-off transfer
what it does

Point-to-point file transfer between devices you own. No accounts, no upload limits, no files touching a server disk. Works across different networks — home WiFi to mobile data — via the same TURN relay as waste-go.

how it works

Sender generates a QR code. Receiver scans it. Both peers connect to the waste-go anchor, complete the YAW/2.1 handshake, open a WebRTC data channel, and the file transfers directly between devices. The anchor steps out after the handshake.

android share sheet

Install flit as a PWA and it registers as a Web Share Target. "Share → flit" appears in the OS share sheet alongside native apps — works from Photos, Files, Chrome downloads, anywhere.

go cli

For headless homelab boxes. flit send file.tar.gz renders a QR in the terminal using Unicode block characters — readable by a phone camera at normal screen distance.

daemon mode

flit daemon runs as a persistent receiver on a home box — auto-accepts files from trusted peers and saves them to a configured directory. One goroutine per peer, exponential backoff reconnect. Configure once in ~/.flit/daemon.toml, run it in tmux or as a systemd unit, forget about it.

desktop / CLI
waste-go anchor
signaling only — same server
WebRTC · DTLS · end-to-end
Android PWA

flit reuses the waste-go anchor — no new server, same crypto, same identity model.