Every control of the system on one page. If you only want to talk to somebody, use the simple client instead: one link to share, one code to show.
Browser front end over web/kantzk.mjs, the JavaScript transcription of the
Lean 4 core in RequestProject/Kant/. The Lean development is the proved artefact:
content addressing, framing under a 5 MB cap, out-of-order reassembly, LSB steganography,
replica convergence, the credit ledger and Gödel numbering all have machine-checked proofs there.
This page is unverified glue.
Two browsers meet in a room. The room name is the digest of a secret that
travels only inside the chat code, so a relay learns the room but never the secret
(Kant.Rendezvous.roomOf, scan_same_room). Everything either side sends is a
self-certifying line: a doctored line is refused rather than displayed
(Kant.Relay.parseMsg_eq_none_of_mismatch), and two clients handed the same lines by any
route, in any order, display the same chat (clients_agree).
This section talks to nobody. Your lines live in a spool in this browser; the
whole spool copies out as one mailbag — a single line of ASCII you can send in a DM, tweet
as a numbered thread, print as a QR code, or hang off a link. Whoever pastes it is caught up to
the moment it was made, and nothing else ever reaches them: you are exactly as up to date as the
last code you pasted (Kant.Uucp.Node.mem_sneakernet_iff). A doctored bag is refused
whole (bag_rejects_forgery), the parts of a thread may arrive in any order
(readThread_perm), and what you end up displaying is exactly what a relay would have
shown you (sneakernet_matches_relay).
Everything you hand to somebody else carries the whole address of the page —
https://kant.cicada71.net/#ff81…f605 — with the part before the # coming
from kant.config rather than from this program
(Kant.SiteCard.qrPayload_origin_prefix). A card is that URL, a line of text and a
picture, exported as one SVG that still carries the card itself
(readCard_cardSvg); the caption cannot break out of its element
(card_text_no_markup) and the picture in the middle covers at most a twenty-fifth of
the code, so it stays scannable (logo_area_bound). Send it to the room and it arrives
as the same card (readChatCard_chatMsg); paste it into any other chat as text and it
still comes back whole (readChatText_chatText).