{"rid":"storage/trystero","card":{"rid":"storage/trystero","eid":"github-dmotz","topic":"storage","slug":"trystero","provider":"Trystero (WebRTC signalling over BitTorrent / Nostr / MQTT / IPFS / Supabase / Firebase)","url":"https://github.com/dmotz/trystero","domain":"github.com","category":"relay/P2P — pure SIGNALLING, zero relayed bytes","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"none","identity_kind":"anonymous","identity_basis":"stated","needs_card":0,"needs_phone":0,"needs_id":0,"needs_institution":0,"country":null,"crypto":null,"interfaces":null,"egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":2,"usd_month":null,"usd_per_tb_month":null,"summary":"No storage and no relayed bandwidth: Trystero borrows an existing decentralised network purely to exchange WebRTC SDP offers.","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"trystero","provider":"Trystero (WebRTC signalling over BitTorrent / Nostr / MQTT / IPFS / Supabase / Firebase)","url":"https://github.com/dmotz/trystero","category":"relay/P2P — pure SIGNALLING, zero relayed bytes","free_tier":{"stated":"No storage and no relayed bandwidth: Trystero borrows an existing decentralised network purely to exchange WebRTC SDP offers.","unit":"mixed","metered_on":"stored-bytes","source_url":"https://github.com/dmotz/trystero","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not stated","source_url":"https://github.com/dmotz/trystero","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://github.com/dmotz/trystero","notes":"not stated"},"egress":{"terms":"Data flows peer-to-peer via WebRTC; the signalling network never sees the payload. The operator's cost is SDP messages only.","metered":false},"interface":["unknown"],"interface_detail":"JavaScript library, `joinRoom` API","tooling":"npm @trystero-p2p/*","chaining":"The cleanest signalling example: because only SDP crosses the third party, there is no bandwidth quota to hit and no operator who could impose one. Note the caveat that WebRTC needs a TURN relay when both peers are behind symmetric NAT — that is where real relaying cost reappears, and Trystero does not supply it.","limits":[],"limits_note":"Signalling only. Browser WebRTC connection-count limits force a room/namespace design.","identity_cost":{"kind":"anonymous","detail":"anonymous","country":null},"reliability_note":"No TURN service included; symmetric-NAT pairs will fail to connect rather than fall back.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://github.com/dmotz/trystero","date":"2026-10-21","proved":"'To establish a direct peer-to-peer connection with WebRTC, a signalling channel is needed to exchange peer information (SDP). Typically this involves running your own matchmaking server but Trystero abstracts this away'; strategies listed: BitTorrent, Nostr, MQTT, Supabase, Firebase, IPFS, self-hosted WebSocket relay"},{"url":"https://peerjs.com/","date":"2026-10-21","proved":"'Use our free cloud server or host your own PeerServer' (free signalling broker; relayed data still needs a TURN server)"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","notes":"No storage and no relayed bandwidth: Trystero borrows an existing decentralised network purely to exchange WebRTC SDP offers.","extras":{},"binding":"none","binding_note":"no constraint in the record binds at this scale; the record carries no limit of a kind the vocabulary names"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"}],"unknown":[["$.free_tier.notes","process"],["$.interface","interface-unknown"],["$.per_object_cap.notes","not-extracted"],["$.per_object_cap.stated","not-extracted"],["$.retention.notes","not-extracted"],["$.retention.stated","not-extracted"]],"history":[],"drift":[]}