The packages Genesis is built on, the rules that keep projects healthy, and how to stay current.
Genesis is the consumer of a maintained package ecosystem:
| Package | Layer | Role |
|---|---|---|
@olwiba/cn | Primitives | Accessible, token-driven components and the design preset |
@olwiba/ui | Blocks | App shells, marketing sections, content layouts |
@olwiba/dx | Tooling | Dev banner, build-time plugins, asset generation (devDependency) |
@olwiba/docs | Documentation | The docs framework these pages run on |
@olwiba/genesis-render | Rendering | JSON-to-UI engine behind the app pages |
@olwiba/genesis-start | Scaffolding | Creates and stamps new projects from the template |
@olwiba/genesis-sync | Maintenance | Reports drift between your project and ecosystem releases |
Dependencies flow downward: CN is the foundation, DOCS and UI build on it, and Genesis consumes them all as published packages.
The rule that keeps a project maintainable: routes are thin. A route does routing, data wiring, and composition of olwibaUI blocks. Local components are only for irreducibly project-specific glue, like binding your tRPC data into a block's props.
Before adding a file to src/components/, ask: is this reusable across projects? If yes, it belongs upstream in the ecosystem. Components that render UI without routing or project-config logic are drift candidates.
Ecosystem packages are versioned and published. Updates arrive like any dependency:
bunx @olwiba/genesis-sync # report where you have drifted behind
bun add @olwiba/ui@latest # update deliberatelyAlways use published versions. Local path dependencies and bun link are unsupported: they break SSR module resolution and bypass the release path that makes upstream fixes trustworthy.
A template you clone is a snapshot; it goes stale the day you start. An ecosystem of published packages keeps improving under your project: a fixed primitive, a polished block, or a better tool lands upstream once, and every project inherits it through a normal update. Your foundation appreciates instead of rotting.