{"adoption": {"forks": 117, "observed_at": "2026-08-28T04:03:55.175446+00:00", "stars": 1186}, "canonical_url": "https://ross.abutalabs.com/products/derbyjs-racer", "card": {"archived": false, "artifact_type": "library", "description": "Realtime model synchronization engine for Node.js", "domain": ["web-development", "microservices", "backend"], "enriched": true, "function": ["state-management", "websocket", "middleware", "serialization"], "health_score": 57, "homepage": null, "language": "TypeScript", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["derbyjs/racer"], "name": "derbyjs/racer", "platform": ["browser"], "pushed_at": "2025-08-27T23:07:33+00:00", "repo": "derbyjs/racer", "stars": 1186, "tags": ["realtime-sync", "operational-transformation", "sharedb", "offline-first", "collaborative-apps", "pubsub", "real-time", "nodejs", "javascript"], "topics": [], "urls": [], "use_cases": ["build collaborative text editors with realtime multi-user editing", "sync application state between browser clients and Node.js servers in realtime", "support offline edits that automatically sync on reconnect", "subscribe clients to specific queries or documents with live updates", "scale realtime apps horizontally across multiple servers with PubSub", "render initial page state on the server and reinitialize the same model in the browser"], "what_it_is": "Racer is a realtime model synchronization engine for Node.js built on ShareDB, providing a unified model and event interface for servers and browsers. It uses Operational Transformation for conflict resolution, supports realtime query subscriptions, offline operation, and persistent storage (e.g., MongoDB).", "when_to_avoid": ["you only need simple REST APIs without realtime sync", "you use databases other than MongoDB and don't want to write a ShareDB adapter", "you need built-in, production-ready access control (still under development)", "you prefer a batteries-included framework rather than a model synchronization layer"], "when_to_choose": ["you need multi-user realtime collaboration with automatic conflict resolution", "your app must keep working offline and sync changes later", "you want one model API shared between server rendering and client interaction", "you're building with Derby or ShareDB and need a higher-level model layer"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/derbyjs-racer", "repo": "derbyjs/racer", "role": "main", "score": 42}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "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:03:55.175446+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:55.175446+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:23:53.324440+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3b0b5b3934b8bd8505ea28a6433cd00a4f37b03f72aaf3296fd52406999a348c", "fetched_at": "2026-08-28T04:03:55.175446+00:00", "kind": "readme", "missing": false, "url": "https://github.com/derbyjs/racer"}, {"content_hash": "df7d87873944b094b9bb5a23722737c44ce3613e1374b6b76bdb05431d5bacd8", "fetched_at": "2026-08-29T12:30:56.661556+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/racer"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 39, "longevity": 100, "rhythm": 13}, "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": 5548, "days_push": 371, "days_rel": 371, "gap_med": 348, "n_releases_24m": 2}, "score": 42, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}