---
name: build-core-database
description: Build a feature's schema — the core-database (components, resources, archetypes). The first main-service layer.
input: feature
output: feature
---

Create `services/main-service/core-database/` — `core-database.ts` plus one single-export file per facet
the feature actually uses (`components`, `resources`, `archetypes` are each optional on
`Database.Plugin.create`). Create only the facet files you need; omit the rest rather than
shipping empty `Database.components({})` boilerplate. A feature with **no entities** (a
singleton whose whole state is resources) is just `resources.ts` + `core-database.ts`.

- `components.ts` → `Database.components({ document, settings, presence, session })` (scopes optional) — only if the feature has entities.
- `resources.ts` → `Database.resources({ … })` (every entry needs a `default`) — for singleton / global state.
- `archetypes.ts` → `Database.archetypes(components, { … })` — only alongside components.
- `core-database.ts` → `Database.Plugin.create({ imports?, components?, resources?, archetypes? })`, exporting the `CoreDatabase` namespace.

The schema root; comes after `data/` (and `services/`). Bind each schema from its `data/`
type — don't author shapes here. Components use JSON schemas; resources use the
`{ default }` convention (a schemaless aggregate binds via `{ default: State.create() }`).

The how is in the auto-loading `features/services/main-service/index.md` + `components.md` / `resources.md` /
`archetypes.md` rules.
