← Crafts
Timbl preview

Timbl

Platform pilot Solo lead engineer

Schema-defined headless CMS on Bun — Zod-validated collections, draft/publish REST, plugins, and SQLite persistence without a hosted platform.

Overview

Most CMS options bundle hosting, heavy admin UIs, or runtime baggage. Timbl is a minimal self-hosted CMS: write a TypeScript content.config.ts, run Bun, and get a REST API with lifecycle hooks and optional Scalar/Swagger docs.

Capabilities

  • defineCMS, defineCollection, and defineGlobal with Zod-backed schema validation
  • REST CRUD with draft/publish workflow and relation/upload fields
  • SQLite + Drizzle ORM; Docker deploy with mounted db/ and uploads/
  • Lifecycle hooks: beforeValidate, beforeSave, afterSave, afterPublish, afterDelete, afterRead
  • Plugin system: registerRoute, extend collections/globals/routes/queries
  • Better Auth integration; Markdown field pipeline via unified/remark/rehype
REST /api beforeValidate persist afterSave document Client Hono lifecycle hooks SQLite/Drizzle
Request path through CMS core
export const CMSConfigSchema = z.object({
  adapters: CMSAdaptersSchema.optional(),
  apiDocs: z.optional(ApiDocsConfigSchema),
  collections: z.array(CollectionDefinitionSchema).default([]),
  globals: z.array(GlobalDefinitionSchema).default([]),
  plugins: z.array(PluginDefinitionSchema).default([]),
}).strict();
Timbl API docs and collection admin
Screenshot placeholder — Scalar API reference and collection document editor.