How iicuriosity/nostr-spaces-tools works
nostr-spaces-tools is a library for decentralized, Nostr-signalled audio rooms. An application gathers a profile and network metrics, opens the Nostr channel, then creates or discovers a Space; joining selects a suitable peer, negotiates WebRTC connections over Nostr, and carries audio between participants. The graph, peer, and space classes implement the collaboration and media layers. Some NostrChannel and CollaborationGraph source excerpts are partial; additional feature links here are limited to README documentation.
Main entry points: NostrChannel.js Nostr Channel · Space.js Space Model · Peer.js Peer · CollaborationGraph.js Collaboration Graph
Components 15
Profile and Metrics
- Profile
package/classes/Profile.js - Network Metrics
package/utility/NetworkMetricsExtractor.js - Profile Storage
package/utility/IndexedDBService.js
Spaces and Discovery
- Space Model
package/classes/Space.js - Space Discovery
package/classes/NostrChannel.js - Speech Requests
package/classes/NostrChannel.js
Peer Collaboration
- Collaboration Graph
package/classes/CollaborationGraph.js - Peer Connection Record
package/classes/Connection.js - Peer
package/classes/Peer.js
Nostr Signalling
- Nostr Channel
package/classes/NostrChannel.js
Audio Transport
- WebRTC Peer
- Remote Audio
package/classes/Space.js
Other components
- Audio Application
- Nostr Relays
- Microphone
Connections 30
- Audio Application → Network Metrics: gathers metrics
- Audio Application → Profile: creates profile
- Audio Application → Nostr Channel: opens channel
- Audio Application → Profile Storage: stores profile
- Profile Storage → Profile: reconstructs
- Nostr Channel → Profile: uses credentials
- Nostr Channel → Nostr Relays: publishes events
- Nostr Relays → Nostr Channel: delivers events
- Audio Application → Nostr Channel: creates or discovers
- Nostr Channel → Space Model: constructs rooms
- Nostr Channel → Space Discovery: queries events
- Space Discovery → Nostr Relays: fetches room events
- Audio Application → Space Model: joins room
- Space Model → Collaboration Graph: constructs graph
- Space Model → Peer: creates peers
- Space Model → Collaboration Graph: selects peer
- Collaboration Graph → Peer Connection Record: records links
- Space Model → Peer: reserves connection
- Peer → WebRTC Peer: creates connection
- Peer → Microphone: captures audio
- Peer → Nostr Channel: sends SDP and ICE
- Nostr Channel → Peer: delivers SDP and ICE
- Nostr Channel → Network Metrics: measures on join
- Nostr Channel → Space Model: updates room graph
- Peer → Remote Audio: passes remote stream
- Remote Audio → Space Model: broadcasts tracks
- Audio Application → Speech Requests: requests to speak
- Speech Requests → Nostr Relays: publishes request
- Nostr Relays → Speech Requests: delivers response
- Speech Requests → Space Model: updates requests