{"adoption": {"forks": 127, "observed_at": "2026-08-28T04:06:18.876132+00:00", "stars": 2147}, "canonical_url": "https://ross.abutalabs.com/products/reverse-linear-sync-engine", "card": {"archived": false, "artifact_type": "learning-resource", "description": "A reverse engineering of Linear's sync engine. Endorsed by Linear CTO.", "domain": ["microservices", "developer-tools"], "enriched": true, "function": ["documentation", "developer-tools"], "health_score": 35, "homepage": "https://github.com/wzhudev", "language": "JavaScript", "license": null, "license_family": "other", "maturity": "stable", "member_repos": ["wzhudev/reverse-linear-sync-engine"], "name": "wzhudev/reverse-linear-sync-engine", "platform": ["cross-platform"], "pushed_at": "2025-06-02T07:16:37+00:00", "repo": "wzhudev/reverse-linear-sync-engine", "stars": 2147, "tags": ["sync-engine", "data-sync", "operational-transformation", "crdt", "offline-first", "collaboration", "reverse-engineering", "linear", "write-up", "real-time", "algorithms", "web-server"], "topics": ["data-sync", "reverse-engineering", "linear", "collaboration", "sync-engine"], "urls": [], "use_cases": ["understand how Linear syncs data in real time", "learn alternatives to OT and CRDTs for collaboration", "design a sync engine for offline-first apps", "study partial syncing with permission controls", "research how collaborative software handles conflicts", "compare last-writer-wins vs OT vs CRDT approaches"], "what_it_is": "A detailed reverse-engineering write-up of Linear's data sync engine, endorsed by Linear's CTO as more complete than internal documentation. It explains how Linear achieves real-time collaboration, offline support, and partial syncing without OT or CRDTs.", "when_to_avoid": ["you need ready-to-use sync software or a library to drop into your app", "you want a formal academic treatment with proofs", "you need a maintained, licensed codebase - this is a document with no license"], "when_to_choose": ["you are designing or evaluating a data sync engine for a collaborative app", "you want a deep, practitioner-verified explanation of Linear's architecture", "OT/CRDT libraries feel too complex or heavyweight for your data model"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/reverse-linear-sync-engine", "repo": "wzhudev/reverse-linear-sync-engine", "role": "main", "score": 35}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "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:06:18.876132+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:18.876132+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:51:09.061330+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1035b2037fd09934cce81f22176985121993304223e7bb761c72c4f3aa64fd80", "fetched_at": "2026-08-28T04:06:18.876132+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzhudev/reverse-linear-sync-engine"}, {"content_hash": "d1b53646058a5d011e4b52cf6986fa8d4c404ecec6753e3caaa83fb5518d48d4", "fetched_at": "2026-08-29T10:31:19.724550+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/wzhudev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 24, "longevity": 58, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 824, "days_push": 457, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 35, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}