Skip to content

Getting Started

Code-first, single-schema CMS built inside an Astro app. ~2k lines of core engine.

Collections config generates everything: Drizzle tables, TypeScript types, and a runtime admin UI.

Supports Astro 6’s route caching with tag-based invalidation for static-speed content delivery.

Terminal window
pnpx create-kide-app

Or just manually clone the repo and run pnpm i && pnpm dev.

CommandWhat it does
pnpm devStart dev server (auto-generates schema, pushes to DB)
pnpm buildProduction build
pnpm checkType-check (astro check) + lint (eslint)
pnpm formatFormat with Prettier
pnpm cms:generateRegenerate .generated/ from cms.config.ts
pnpm cms:seedSeed database with demo content
pnpm db:generateGenerate migration SQL from schema changes
pnpm db:migrateApply pending migrations

In dev mode, schema changes are pushed to the DB automatically. Migration files are for production deployments.

src/cms/
cms.config.ts # CMS config (database, locales, collection imports)
collections/ # One file per collection (schema, access rules)
access.ts # Auto-aggregated access rules (from collection configs)
hooks.ts # Lifecycle hooks
core/ # CMS runtime (editable)
.generated/ # Auto-generated (don't edit)
schema.ts # Drizzle tables
types.ts # TypeScript interfaces
validators.ts # Zod schemas
api.ts # Typed API

All optional. Set in .env for local dev, or as secrets on your deployment platform.

VariableDescription
AI_PROVIDERAI provider (openai)
AI_API_KEYAI provider API key
AI_MODELAI model name (e.g. gpt-4o-mini)
RESEND_API_KEYEnables automatic invite emails for new users
RESEND_FROM_EMAILEmail sender address
CF_BEACON_TOKENCloudflare Web Analytics token
CRON_SECRETSecures the scheduled publishing endpoint

Astro 6, React 19, Drizzle ORM, SQLite (local) / D1 (Cloudflare), Zod, Tiptap, shadcn/ui, Tailwind CSS v4