Pipes↑ Why · Alex reaches the laptop at home from a café Alex gets through from any network that allows the web, and directly where the network lets it.
A pipe is a stream or a datagram channel, and only the relay WebSocket is required
Every other way through is an optimisation.
Shown when a session runs over the WebSocket alone; the core has no congestion control.
0 of 2 tests passed · 1 place in the code
- not run a test
e2e/relay/client/src/main.rs:9 - not run a test
node/tests/session.rs:3 - code
relay/src/lib.rs:3
A direct pipe's certificate hash or fingerprint arrives sealed
Whoever relays the offer must not be able to stand in the middle.
Shown when a swapped hash or fingerprint fails the direct pipe.
0 of 1 test passed · 0 places in the code
- not run a swapped fingerprint fails the direct pipe
node/tests/direct.rs:89
Where the network allows, a session moves onto a direct pipe by itself
The relay is the floor, not the way: a direct pipe is quicker, and carries nothing through anyone else.
Shown when a browser and a machine that can reach each other move their session onto a WebRTC data channel; a file read after the move puts none of the session's frames through the relay.
0 of 1 test passed · 1 place in the code
- not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link
e2e/node/pair.spec.mjs:14 - code
node/src/direct.rs:7
When no direct pipe can be made, or one drops, the relay carries on
A network that blocks UDP, or a NAT nothing gets through, costs speed and nothing else.
Shown when with no route between browser and machine, their files still work over the relay; a direct pipe closed in the middle of a read hands back to the relay, and the read completes byte for byte.
0 of 2 tests passed · 2 places in the code
- not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link
e2e/node/pair.spec.mjs:14 - not run with no route between browser and machine, the session stays on the relay, and its files and terminal work
e2e/node/pair.spec.mjs:398 - code
node/src/node.rs:146 - code
web/app/node-client.js:164
Anything that forwards sees only {to, ciphertext}↑ Why · Someone checks every claim before trusting it What a relay sees is checked byte by byte in a test anyone can run.
Relays are the part someone else may run.
Shown when a relay's capture of a session holds no plaintext, no verb, and no readable message kind or counter.
0 of 5 tests passed · 4 places in the code
- not run a browser adds a Linux machine with the line it shows, uses its files, edits one in the editor, and a second browser joins from a link
e2e/node/pair.spec.mjs:14 - not run a test
e2e/relay/client/src/main.rs:9 - not run a test
e2e/relay/client/src/main.rs:311 - not run a test
node/tests/session.rs:3 - not run a test
node/tests/session.rs:240 - code
relay/src/lib.rs:3 - code
relay/src/wire.rs:23 - code
relay/src/wire.rs:141 - code
relay/src/wire.rs:211
Sessions↑ Why · Alex loses a phone, and it opens nothing A stolen phone can't stand in for another key, or read what it recorded.
Sessions are mutually authenticated by node key
A key is the address; no certificate authority or DNS is trusted.
Shown when a peer presenting another key is refused.
0 of 4 tests passed · 3 places in the code
- not run a peer presenting another key is refused
core/tests/seal.rs:22 - not run a test
e2e/relay/client/src/main.rs:9 - not run a test
node/tests/session.rs:3 - not run a caller not allowed gets silence
node/tests/session.rs:247 - code
node/src/node.rs:158 - code
relay/src/wire.rs:108 - code
relay/src/wire.rs:185
Key exchange is hybrid X25519 + ML-KEM-768
Traffic recorded today must not open to a quantum computer later.
Shown when test vectors; a session fails if either half is wrong.
0 of 1 test passed · 0 places in the code
- not run session keys depend on both halves
core/tests/seal.rs:44
Every signed or sealed thing names its algorithm
Algorithms change without breaking old data.
Shown when an unknown algorithm id is refused, never guessed.
0 of 2 tests passed · 0 places in the code
- not run a tampered or unknown entry is refused
core/tests/log.rs:53 - not run an unknown algorithm is refused never guessed
core/tests/seal.rs:31
The chain is verified once per session, and its end ends the session
A hybrid chain is 3.5 KB and doubled call latency in the spike.
Shown when a session outliving its chain's expiry or revocation is closed.
Not built: nothing in the code or tests names this yet.
Lost packets and network changes↑ Why · Alex reaches the laptop at home from a café The café wifi drops, the hotspot takes over, and Alex's shell carries on.
A session survives a pipe change with nothing lost, nothing repeated and no handshake
Networks flap; a handshake per flap is slow and a lost keystroke is wrong.
Shown when drop the pipe mid-stream, continue on another; the stream is byte-identical.
0 of 1 test passed · 1 place in the code
- not run a pipe change loses nothing repeats nothing and needs no handshake
core/tests/sess.rs:36 - code
node/src/node.rs:103
A pipe that dies in silence is noticed within seconds, and calls in flight finish
A network that drops without closing the socket leaves it looking open, and everything sent into it is lost while the page says all is well.
Shown when the browser goes offline, or the relay's packets are dropped with no close; a list and a read issued then finish within seconds of the network returning, the page never claims the relay while it's gone, and the direct pipe comes back.
0 of 4 tests passed · 2 places in the code
- not run a test
e2e/node/pair.spec.mjs:79 - not run a test
e2e/node/pair.spec.mjs:344 - not run a test
e2e/node/pair.spec.mjs:494 - not run a test
node/tests/liveness.rs:4 - code
node/src/node.rs:325 - code
web/app/relay.js:19
Messages are numbered and sealed one by one, with a key per direction
A message must open on whichever pipe it arrives, and a nonce must never repeat.
Shown when a repeated number is refused; messages decrypt in any arrival order.
0 of 2 tests passed · 0 places in the code
- not run numbered messages open in any arrival order and come out once in order
core/tests/sess.rs:11 - not run a key per direction and per channel
core/tests/sess.rs:22
Datagrams are never resent and pass a replay window
A late video frame is worthless; a replayed one is an attack.
Shown when a dropped datagram is not resent; a replayed one is refused.
How Lost packets
0 of 1 test passed · 0 places in the code
- not run datagrams are never resent and pass a replay window
core/tests/sess.rs:58