Browser vendors migrated the web from http to https in the mid-2010s. That 's' adds encryption via TLS, which is great.
However, https also adds:
KPS (key-pinned stream) restores the freedom to talk to cryptographic identities instead of just those with authority-controlled names.
<ip>:<port>:<keyhash>.
The keyhash is the SHA-256 of the server's self-signed TLS cert,
multibase-encoded (e.g. uEi…).
Everything above removes authority requirements from the server. But the browser app itself is still hosted somewhere — typically on GitHub Pages — which requires https, which requires a CA-signed cert for a registered domain. That's the last authority-controlled link in the chain between you and the server.
A Chromium extension build of the same app loads from
chrome-extension://<id>/: trusted at
install time rather than by a public CA. Build it yourself
with npm run build:extension in
demo/web/ and load
dist-extension/ as an unpacked extension. Now
neither the page nor its connection to the server depends
on a domain registrar or a certificate authority.
The transport is the point; this demo bolts two example services onto it, one stream per service.
chat stream) — a public
bulletin plus end-to-end encrypted direct messages. Each
client mints a fresh Ed25519 identity; their DM key is
signed by it, so the server can route messages but can't
read or forge DMs.
eth-rpc stream) — the
server proxies JSON-RPC calls to curated public endpoints for
Ethereum, Arbitrum, Optimism, Base, and Polygon; the browser
renders a small live explorer from the responses. The server
sees your queries; the public RPC endpoints only see the
server's IP.
kps.key.<ip>:<port>:<keyhash>.No domain. No certificate authority. No signalling relay. If the address reached you intact, the connection cannot be intercepted.
Needs Go 1.24+. From the repo root:
cd demo/server
go run .
Output looks like:
listening; dial from the browser:
192.168.1.50:41108:uEi...
On first run the server writes its TLS key to
kps.key and the chosen UDP port to
state.json. Both are reused on subsequent
starts so the address stays byte-identical across restarts.
KPS is just UDP underneath. The browser must reach the server's UDP port directly:
127.0.0.1 address.-ip 192.168.x.x.