# Build Systems

> Build a feature's ecs system-database — the real-time tick loop (systems the scheduler runs each frame). For real-time features only.

- Skill: `adobe/build-systems-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add adobe/build-systems-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/adobe/build-systems-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Adobe (https://skillmd.com/u/adobe)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/adobe/build-systems-2

---


Create `ecs/system-database/system-database.ts`: `Database.Plugin.create({ extends:
Database.Plugin.combine(ComputedDatabase.plugin, scheduler), systems })` where the `systems`
map is declared **inline** (see `features/ecs/systems.md` — inline is required for `db` to be
typed and for system-name inference; a `systems/` folder is optional, only for extracted
per-frame body helpers).

- A system is a `SystemDeclaration`: `{ create, schedule?: { before?, after?, during? } }`.
  `create(db)` runs once (capture queries / index handles / closures); the returned function
  advances the world one tick. Return `void` for an init-only system (seeding entities).
- The step math lives in `data/`; each system reads store rows, calls the pure `data/` step,
  writes back — via `db.store` (writable) for hot per-row work, or `db.transactions.*` for
  discrete events. Iterate archetypes per `archetypes.md` (tail→head when destroying rows).
- Order under `schedule` (mirror the `data/` step's internal sequence); drive the loop by
  combining `scheduler` (rAF), gated by the `schedulerState` resource.

**Only for real-time features** (games, sims) — turn-based features skip this phase entirely.
Comes after `build-computed`. The how is in the auto-loading `features/ecs/systems.md` rule.

