{"adoption": {"forks": 121, "observed_at": "2026-08-28T04:03:48.090232+00:00", "stars": 1156}, "canonical_url": "https://ross.abutalabs.com/products/ecsy", "card": {"archived": true, "artifact_type": "library", "description": "Entity Component System for javascript", "domain": ["web-development", "graphics"], "enriched": true, "function": ["game-engine", "animation"], "health_score": 10, "homepage": "https://ecsyjs.github.io/ecsy/", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "experimental", "member_repos": ["ecsyjs/ecsy"], "name": "ecsyjs/ecsy", "platform": ["browser"], "pushed_at": "2025-04-13T09:44:36+00:00", "repo": "ecsyjs/ecsy", "stars": 1156, "tags": ["ecs", "entity-component-system", "game-architecture", "framework-agnostic", "reactive-systems", "performance", "game-development", "javascript", "nodejs", "web"], "topics": [], "urls": [], "use_cases": ["build a game with an entity component system architecture in javascript", "manage game logic decoupled from rendering engines like three.js or babylon", "write reactive systems that respond to entity and component changes", "avoid garbage collection pauses in a javascript game loop", "structure a 2D canvas game with composable systems and components", "prototype web-based mixed reality or 3D applications with an ECS pattern"], "what_it_is": "ECSY is a lightweight, framework-agnostic Entity Component System (ECS) framework for JavaScript, originally developed by the Mozilla Mixed Reality team. It organizes game and application logic into entities, data-only components, and ordered systems with reactive queries, designed to integrate with rendering engines like three.js or Babylon.js via community adapters.", "when_to_avoid": ["you need a full-featured, production-hardened game engine with rendering built in", "you require strict pure ECS design with no ergonomic compromises", "you need a mature, actively maintained library - it is explicitly labeled highly experimental", "you're working outside JavaScript/web platforms"], "when_to_choose": ["you want a lightweight, framework-agnostic ECS in JavaScript or TypeScript", "you need predictable system execution order and queued reactive events", "you're building on three.js, Babylon.js, or canvas and want community ECS adapters", "you prefer simple APIs over strict pure-ECS dogma"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ecsy", "repo": "ecsyjs/ecsy", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "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:48.090232+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:48.090232+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:32:07.222040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ec62e4f7425202d8ed6ea753cf7ce148a4f2da00d5b3ebb23abc8fcf31dfe3b0", "fetched_at": "2026-08-28T04:03:48.090232+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ecsyjs/ecsy"}, {"content_hash": "192934991d7c6ed532cb7d0b3554c3a2321090a9d6ef00583c0ffe3f61ea2aca", "fetched_at": "2026-08-29T12:37:28.620109+00:00", "kind": "homepage", "missing": false, "url": "https://ecsyjs.github.io/ecsy/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 16, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2672, "days_push": 507, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}