Wire-protocol specs for nostrnests-style audio rooms, in the style of Nostr NIPs and Blossom BUDs. Each spec documents one self-contained capability that a client or relay can implement; two compliant peers implementing the same set of EGGs round-trip without further coordination. Layout: README.md cover, status table, conformance levels EGG-01.md Room event (kind:30312) required EGG-02.md Auth + WebTransport handshake required EGG-03.md Audio plane (moq-lite) required EGG-04.md Presence (kind:10312) required EGG-05.md In-room chat (kind:1311) optional EGG-06.md Reactions (kind:7) optional EGG-07.md Roles & moderation (kind:4312) optional EGG-08.md Scheduling (status=planned) optional EGG-09.md User server list (kind:10112) optional EGG-10.md Theming (c/f/bg tags) decorative EGG-11.md Recording decorative EGG-12.md Catalog track (catalog.json) optional Conformance levels (Listener / Speaker / Host) defined in the README so a deployment can declare "we implement EGG-01..EGG-04" and other peers know exactly what to expect. Each spec follows the same shape (Summary / Wire format / Behavior numbered MUST/SHOULD/MAY rules / Example / Compatibility) and fits on a single printed page. Wire formats are documented exactly as nostrnests + amethyst implement them on this branch — no hypothetical capabilities, no "future" tags without an EGG number.
EGGs — Extensible Gossip Guidelines
Wire-protocol specs for nostrnests-style audio rooms. Each EGG defines one self-contained capability that a client or relay can implement. Two compliant peers that implement the same set of EGGs round-trip without further coordination.
Specs intentionally mirror the Nostr NIP and Blossom BUD formats: ASCII Markdown, RFC-2119 keywords (MUST / SHOULD / MAY), one capability per file.
Index
| # | File | Topic | Category |
|---|---|---|---|
| 01 | EGG-01 | Room event (kind:30312) |
required |
| 02 | EGG-02 | Auth & WebTransport handshake | required |
| 03 | EGG-03 | Audio plane (moq-lite) | required |
| 04 | EGG-04 | Presence (kind:10312) |
required |
| 05 | EGG-05 | In-room chat (kind:1311) |
optional |
| 06 | EGG-06 | Reactions (kind:7) |
optional |
| 07 | EGG-07 | Roles & moderation (kind:4312) |
optional |
| 08 | EGG-08 | Scheduling (status=planned) |
optional |
| 09 | EGG-09 | User server list (kind:10112) |
optional |
| 10 | EGG-10 | Theming (c/f/bg) |
decorative |
| 11 | EGG-11 | Recording (recording tag) |
decorative |
| 12 | EGG-12 | Catalog track (catalog.json) |
optional |
Conformance levels
A peer claims Listener compliance when it implements EGG-01, EGG-02, EGG-03 and at least the read side of EGG-04.
A peer claims Speaker compliance when it implements all of the above plus the publish side of EGG-03 and the write side of EGG-04.
A peer claims Host compliance when it implements Speaker compliance plus EGG-07 and the write side of EGG-08 (if scheduled rooms are exposed in its UI).
EGG-05 through EGG-12 are independently optional. Lacking any of them MUST NOT break interop on the EGGs a peer does implement.
Versioning
Each spec carries a status line at the top: draft (subject to change),
accepted (frozen except for clarifications), or replaced-by: EGG-XX
(superseded). Breaking changes ship as a new EGG number; existing numbers are
never re-purposed.
Naming
EGG = Extensible Gossip Guideline. The acronym is intentional: nostrnests serves nests; nests hold eggs.
Filing changes
Edit a single EGG per pull request. Include a wire-format example showing the delta. If a change crosses two specs, file two PRs and reference each from the other.