# feat: live presence between Snowbounds on one notebook \(\#35, feature \`live\`\) · clo/snowbound

[View on GitCafe](https://git.cafe/clo/snowbound/commit/ab00bdcf0c7a9eddb387eab4ad09df0b862c7b32)

Repository: [clo/snowbound](https://git.cafe/clo/snowbound)

Visibility: public

Requested revision: ab00bdcf0c7a9eddb387eab4ad09df0b862c7b32

Requested commit: ab00bdcf0c7a9eddb387eab4ad09df0b862c7b32

Commit: ab00bdcf0c7a9eddb387eab4ad09df0b862c7b32

Tree: dfe96636deee5ae2cb177578f9b2740c7722e1b2

Author: clover caruso

Committer: clover caruso

## Message

```
feat: live presence between Snowbounds on one notebook (#35, feature `live`)

Peers find each other by mDNS (`_snowbound._tcp`) or connect directly, meet through
SPAKE2 on a secret both hold (the notebook TOC identity, or a code typed on both), then
exchange AES-256-GCM frames of a kind and a CBOR map that later versions extend by kinds
and fields. Hello carries a name and the account picture; Presence carries section, page
and caret as text object + UTF-16 offset. The app (only with SNOWBOUND_LIVE=network or
loopback) draws avatars beside the search box, dots on page tabs and peers' carets,
flags and selections; clicking an avatar opens their page. TextOutline::caret_at now holds
the caret geometry the editor used inline. Design: resources/live-share.md.

Assisted-by: claude-opus-5.5

```

## Parents

- [f3bfb4de18ec03dca625dd95d5d5f2ae34383837](https://git.cafe/clo/snowbound/commit/f3bfb4de18ec03dca625dd95d5d5f2ae34383837?format=markdown)

[Source at this commit](https://git.cafe/clo/snowbound/tree/ab00bdcf0c7a9eddb387eab4ad09df0b862c7b32?format=markdown)
