Roadmap
Kalayaan already covers the full path from cms.config.ts to a live site on your own Cloudflare
account — content modelling, drafts and versioning, media, roles and access, localization, AI
features, GraphQL, an MCP server, and a plugin/module extension seam
for business-specific routes and self-contained features. This page tracks what’s planned but not
yet built, so you know what to expect before you rely on it.
It reflects the current state of main. Have a request
or want to help? Open an issue.
Content & editorial
- Image transformations — on-the-fly resize, crop, and format conversion when serving media
(via Cloudflare’s
/cdn-cgi/image). Today media is served as the original stored file. - Direct-to-R2 (presigned) uploads — upload large files straight to storage instead of streaming them through the Worker. Uploads are currently Worker-proxied, which is simple and free but caps practical file size.
- Reliable webhook delivery — a Queue-backed dispatcher with automatic retries and a dead-letter queue. Webhooks currently fire best-effort in the background, with no retry on failure.
- Front-end preview — shareable preview links that render an unpublished draft on your site. The editor’s Preview button is a placeholder for now.
Databases & storage
- Run entirely off an external database — Postgres and MySQL adapters exist for your content, but the system tables (users, media, versions) still require D1. Moving those stores behind the adapter would let a full CMS run on Postgres or MySQL alone.
- MongoDB adapter — a document-database adapter (native mapping,
$lookup-based relations, schema-as-validators migrations). - Postgres/MySQL conformance in CI — the adapter conformance suite runs against dockerized databases in CI so external-DB support is regression-tested on every change.
AI
- Alt-text review — accept/reject chips for AI-suggested image alt text. Suggestions are currently generated and applied automatically.
- AI Gateway routing — route Workers AI calls through Cloudflare AI Gateway for caching, rate limiting, and usage analytics.
- Smarter semantic search — chunked embeddings for long documents, plus a backfill/reindex command to embed content that already exists. Search currently embeds each document once, on publish.
Extensibility
- A worked module example — the Plugins & modules guide covers
the API with snippets, but there’s no full example project (e.g. a small marketplace) showing a
Module’s collections + routes +PaymentProviderwired together end-to-end. - Module-level config validation — a module declaring its own config block (e.g. Stripe keys,
fee percentages), validated at resolve time alongside the rest of
cms.config.ts. - More than one payment provider per project — today only the first registered module’s
provides.paymentfactory is used; later ones are silently ignored rather than erroring.
Integrations & distribution
- GraphQL mutations — the GraphQL API is read-only today (queries resolve relations into nested objects); write operations are planned.
- Streaming MCP — Server-Sent Events for the MCP endpoint. It currently returns a single response per request (the stateless subset of the transport).
- Cloudflare Access setup in the CLI — the runtime already supports Cloudflare Access as an auth
mode;
kalayaan initandkalayaan deploywill gain prompts to configure and provision it. - Deploy-to-Cloudflare button — one-click deploy of a starter project from the docs.
Verification milestones
These are internal quality gates, each pending a dedicated CI job:
- P3 — adapter conformance green on Postgres and MySQL in CI.
- P4 — a nightly real-account smoke test for Workers AI and Vectorize.
- P5 — a scripted
kalayaan-skillagent run: empty directory to a deployed URL.
Recently shipped: business-specific plugin routes and custom RBAC subjects; the Module system
(build-time collections + a PaymentProvider seam) via cms.modules.ts; persistent, field-aware
dashboard columns; a branded project home page; per-locale editing; machine-translation review;
single-document relation population; and enforced custom field types. See the
changelog for the full history.