{"adoption": {"forks": 157, "observed_at": "2026-08-28T04:07:11.554153+00:00", "stars": 2705}, "canonical_url": "https://ross.abutalabs.com/products/trystero", "card": {"archived": false, "artifact_type": "library", "description": "✨🤝✨ Build instant multiplayer webapps, no server required — Magic WebRTC matchmaking over BitTorrent, Nostr, MQTT, IPFS, Supabase, and Firebase", "domain": ["web-development", "frontend", "networking", "microservices", "privacy"], "enriched": true, "function": ["websocket", "serialization", "cryptography", "sdk"], "health_score": 96, "homepage": "https://trystero.dev", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["dmotz/trystero"], "name": "dmotz/trystero", "platform": ["browser", "bun", "cross-platform"], "pushed_at": "2026-07-22T14:05:37+00:00", "repo": "dmotz/trystero", "stars": 2705, "tags": ["webrtc", "p2p", "peer-to-peer", "serverless", "signaling", "matchmaking", "bittorrent", "nostr", "mqtt", "ipfs", "supabase", "firebase", "realtime", "decentralized", "chat", "file-transfer", "video-chat", "react-hooks", "real-time", "nodejs", "deno", "javascript"], "topics": ["webrtc", "p2p", "peer-to-peer", "chat", "matchmaking", "ipfs", "bittorrent", "webtorrent", "serverless", "firebase", "javascript", "signaling", "signalling", "realtime", "decentralized", "web3", "mqtt", "nostr", "supabase"], "urls": [], "use_cases": ["build a multiplayer web app without a backend server", "browser-to-browser file transfer", "add video or audio chat between peers", "sync collaborative cursors or shared state in realtime", "build a decentralized p2p chat room", "local-first data sync between browsers", "show realtime presence of connected users"], "what_it_is": "Trystero is a JavaScript/TypeScript library that adds serverless WebRTC peer discovery and communication to web apps, using BitTorrent, Nostr, MQTT, IPFS, Supabase, Firebase, or a self-hosted WebSocket relay as signaling strategies. It provides a simple rooms-and-actions API with automatic serialization, chunking, encryption, media streams, and React hooks, so apps can connect browsers directly without deploying matchmaking infrastructure.", "when_to_avoid": ["you need guaranteed message delivery or a client-server architecture with central authority", "your app requires large-scale fan-out to many receivers (WebRTC mesh scales poorly)", "you need to support environments without WebRTC", "you require strict compliance where peer discovery via public relays is unacceptable"], "when_to_choose": ["you want peer-to-peer WebRTC features without deploying or paying for a signaling server", "you prefer decentralized signaling via Nostr, BitTorrent, MQTT, or IPFS", "you need a simple unified API for data, file, and media streaming between browsers", "you want end-to-end encrypted direct connections where data never touches a server"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/trystero", "repo": "dmotz/trystero", "role": "main", "score": 94}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:11.554153+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:15:50.912500+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "035e2d4e892b4cd3544ceaa05c21e62f2d66e9283ecae5ca3d38ce06d589df0c", "fetched_at": "2026-08-28T04:07:11.554153+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dmotz/trystero"}, {"content_hash": "1c58bc6722e000f23ea757dfbc6ba1e74c4c6588333a010bb32e3241bc11a8f5", "fetched_at": "2026-08-29T09:59:16.452267+00:00", "kind": "homepage", "missing": false, "url": "https://trystero.dev"}, {"content_hash": "0f56aaa1b2319092cb0082c6271bd3c4851da5a626842eb64247cdc55955bae5", "fetched_at": "2026-08-29T09:59:16.461615+00:00", "kind": "site_page", "missing": false, "url": "https://trystero.dev/docs"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 93, "longevity": 100, "rhythm": 92}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2138, "days_push": 42, "days_rel": 52, "gap_med": 27, "n_releases_24m": 16}, "score": 94, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}