Architecture
Package Map
timbl: public runtime package for config authoring, startup, request handling, and official defaults@timbl/core: public contract package for schema definitions, query primitives, plugin types, and adapter interfaces@timbl/client: public framework-agnostic REST client built on top of the HTTP contract@timbl/adapter-better-auth: official Better Auth integration@timbl/plugin-rss: official optional RSS plugin@timbl/plugin-seo: official optional SEO plugin
Dependency Direction
@timbl/coredefines durable contractstimbldepends on@timbl/core@timbl/clientdepends on documented HTTP behavior, not runtime internals- optional packages depend on
timbland/or@timbl/core - applications depend on public packages only
- examples and docs must not import from
src/...
Layering
Core
Core contains:
- schema and registry rules
- validation and normalization
- query contracts
- serialization pipeline
- plugin contracts
- adapter interfaces
Runtime
Runtime contains:
- config loading
- adapter resolution
- route construction
- request handling
- startup and shutdown behavior
- official default integration wiring
HTTP Boundary
The stable runtime boundary is:
Request -> Responsefor serving CMS behavior- optional
listen()for owning the process lifecycle
Hono is the official default delivery integration. The framework contract is the observable fetch/listen boundary, not Hono internals.
Public Surface Rules
timblis the default package for most users@timbl/coreis the advanced contract packageunsafeis available for deliberate escape hatches only- undocumented internals are not semver-stable
ErrorCodes(in@timbl/core) is the canonical enum of error response codes; new codes are additive and semver-stable
Extraction Rule
A boundary only earns its own package when it has:
- a clear independent user
- a stable public API
- dedicated documentation
- dedicated tests
- a release and compatibility story separate from repo internals
See also
- API Tiers: which surfaces are stable, advanced, unsafe, or internal
- Content Model: what the packages model
- Extension Model: how plugins and adapters fit the boundaries