TypeScript implementation of the MetaObjects standard.
| Package | Purpose |
|---|---|
@metaobjectsdev/metadata |
Loader, registry, typed views |
@metaobjectsdev/codegen-ts |
Code generation (TS targets) |
@metaobjectsdev/codegen-ts-react |
React codegen (form-file generator) |
@metaobjectsdev/codegen-ts-tanstack |
TanStack hooks + grid codegen |
@metaobjectsdev/runtime-ts |
Server-side runtime (Node, Fastify integration) |
@metaobjectsdev/runtime-web (under client/web/) |
Browser core: currency, filter-qs, fetcher types |
@metaobjectsdev/react (under client/web/) |
React runtime: useEntityForm, <CurrencyInput> |
@metaobjectsdev/tanstack (under client/web/) |
TanStack runtime: EntityFetcherProvider, <EntityGrid> |
@metaobjectsdev/migrate-ts |
Database migration tooling |
@metaobjectsdev/sdk |
Programmatic SDK (memory, paths, workspace) |
@metaobjectsdev/cli |
The meta CLI binary (init, gen, migrate) |
@metaobjectsdev/forge |
AI-collaboration capabilities (agent-docs, future MCP) |
Bun workspace — the workspace root is the repository root (run bun install there, not here).
bun install # once, at the repo root
bun test # the server suite (from this directory)
bun run --filter '*' typecheck # whole workspace (from the repo root)The CLI binary is meta:
meta init # scaffold a new project
meta gen # generate code from metadata
meta migrate # database migrationsPublishing these packages to npm: see docs/RELEASING.md — the
RC → smoke-test → promote procedure plus the must-know gotchas (publish with bun publish,
rm bun.lock && bun install after every version bump, runtime imports must be dependencies).
my-project/
├── metaobjects/ # entity declarations (one file per domain)
│ ├── meta.common.json
│ ├── meta.commerce.json
│ └── ...
├── .metaobjects/ # tool state (gitignored: .gen-state/)
│ ├── config.json
│ └── .gen-state/
└── metaobjects.config.ts # generator wiring + per-target output