^
nullhat
pure website · no install
not signed in · saved online until service restarts

nullhat

Pure website chat — no install, no local daemon, no exe. Create an account, add friends by username, keys are tied to your account and saved online. Runs on Render with free *.onrender.com DNS and stays on until the service restarts.

Heads up: This pure-website mode stores private keys server-side tied to your username for convenience (so you can add by username from any browser). That means the server operator could decrypt messages if compelled — unlike the zero-knowledge companion mode. Use only for casual pilot, not high-risk comms.

How to chat in 3 steps

  1. Create account — pick username + password. We generate your encryption key (X25519 + Ed25519 + Kyber hybrid) and tie it to your username. Saved online.
  2. Send friend request — go to Friends → enter username → Send request. They accept and you become friends. No key pasting.
  3. Chat / Group — open Chats → send. Messages are encrypted (X3DH+Ratchet+Kyber, ciphertext saved) and show instantly on both sides. Add group on Groups page.

Tip: after adding, both users should refresh. Group messages fan out per member (server stores per-recipient ciphertext).

Why nullhat?

Clean, no-JS, server-rendered. Easy navigation, signed-in session stays with Flask cookie. Deploy to Render — free DNS, no exe, no Tor needed. For <100 pilot users, SQLite is enough; messages live until free instance restarts (Render sleeps after 15m — keep alive via uptime ping).

Deploy your own in 3 commands

git push to GitHub
Render → New Web Service → connect repo
Build: pip install -r requirements.txt
Start: gunicorn server.app:app --bind 0.0.0.0:$PORT

Free DNS: your-app.onrender.com · Custom free: DuckDNS / Cloudflare Tunnel