{"adoption": {"forks": 167, "observed_at": "2026-08-28T04:04:26.188448+00:00", "stars": 1341}, "canonical_url": "https://ross.abutalabs.com/products/n2o", "card": {"archived": false, "artifact_type": "framework", "description": "⭕ N2O: Distributed WebSocket Application Server ISO 20922", "domain": ["web-development", "backend", "iot", "microservices"], "enriched": true, "function": ["websocket", "http-server", "message-queue", "caching", "serialization", "rpc", "middleware", "web-framework"], "health_score": 71, "homepage": "https://ws.n2o.dev", "language": "Erlang", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["synrc/n2o"], "name": "synrc/n2o", "platform": ["elixir", "windows", "self-hosted"], "pushed_at": "2026-06-04T10:30:12+00:00", "repo": "synrc/n2o", "stars": 1341, "tags": ["mqtt", "tcp", "udp", "bert", "cowboy", "emq", "pubsub", "erlang", "protocol-loop", "hash-ring", "real-time", "messaging", "linux", "macos", "web-server"], "topics": ["websockets", "mqtt", "tcp", "udp", "bert"], "urls": [], "use_cases": ["build a real-time websocket chat server in erlang", "run application logic inside an mqtt broker as an emq plugin", "implement rpc over message queue with tcp or udp endpoints", "add websocket push messaging to a cowboy web app", "build iot backends speaking mqtt-sn or coap", "manage distributed processes with a hash ring of virtual nodes"], "what_it_is": "N2O is an embeddable message protocol loop library for WebSocket, HTTP, MQTT, and TCP servers written in Erlang. It provides process management, a virtual nodes ring for request routing, sessions, frame encoding (JSON/BERT/ASN.1), and unified APIs for message queues and caching backends.", "when_to_avoid": ["your team does not work in erlang or elixir", "you need a conventional request/response web framework with routing, templating, and a large ecosystem", "you require a permissively documented, mainstream license - the license is marked NOASSERTION despite ISC claims", "you need extensive community support, as the project is niche with a small user base"], "when_to_choose": ["you are building real-time websocket or mqtt applications on the erlang/otp stack", "you want a tiny (~700 LOC) embeddable protocol loop rather than a heavyweight framework", "you need multi-protocol endpoints (websocket, mqtt, tcp, udp) with one unified message loop", "you want pluggable pubsub backends like gproc or syn and formatters like json or bert"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/n2o", "repo": "synrc/n2o", "role": "main", "score": 61}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "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:04:26.188448+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:26.188448+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:43:46.193377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e9619d4804731d0c0e9677e79fb91081fe52733d8fe61ce5ce99c2c57b170b2c", "fetched_at": "2026-08-28T04:04:26.188448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/synrc/n2o"}, {"content_hash": "da78cb3a06039f35acc757263a4b395c33e028c711a0fc9a835e5a5dec2fe87b", "fetched_at": "2026-08-29T12:02:40.316153+00:00", "kind": "homepage", "missing": false, "url": "https://ws.n2o.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 85, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4905, "days_push": 90, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 61, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}