Everything a production site needs, nothing it doesn't
Lumen is a single Cloudflare Worker: template engine, data layer, media pipeline, forms, email, webhooks, and an MCP server — with zero moving parts for you to operate.
Edge-native rendering
Server-side rendering in 100+ Cloudflare locations. No origin server, no cold starts, no cache invalidation.
MCP built in
Connect opencode, Claude Code, or any MCP client and manage content conversationally with signed-JWT auth.
Composable templates
Pages, layouts, and components with props, loops, and conditionals. Pure HTML output, zero hydration.
D1 + R2 storage
SQLite content at the edge, media in R2 with signed URLs and on-the-fly transforms cached for a year.
Forms & webhooks
AJAX forms with honeypot and captcha support, transactional email, and webhooks for content events.
Guarded by default
Admin JWTs gate everything. SQL is sandboxed to data statements. Secrets never leave your Worker.
Dynamic routes
URLPattern paths like /blog/:slug with param-aware templates, validation, and custom handlers.
Local-first workflow
lumenpages-cms create seeds a local dev environment with D1 snapshots you can restore in one command.
One-command deploy
lumenpages-cms deploy provisions remote D1 + R2, uploads secrets, and puts you on a custom domain with SSL.
HTML in, HTML out
Templates are just HTML with a small expression syntax — interpolation, conditionals, loops, and components. No build step, no hydration, no client runtime. What renders is what you wrote.
- Pages, layouts, components — nest and reuse with typed props
- Dynamic routes — URLPattern paths like
/blog/:slug - Data sources — SQL, external JSON, and R2 files resolved in parallel
- Custom handlers — sandboxed JS endpoints when you need full control
<article class="post">
<h1>" }}</h1>
" }}
<img src="" }}&w=900&f=auto"
alt="" }}" />
" }}
" }}
</article>
Edge image pipeline, built in
Every image URL — static or R2 — accepts transform parameters served by Cloudflare Images. Resize, crop, face-aware gravitate, and negotiate AVIF/WebP automatically, cached for a year at the edge.
- On-the-fly transforms —
?w=800&h=600&fit=cover&f=auto - Signed media URLs — R2 objects are never publicly listable
- Direct uploads — minted signed PUT URLs from the MCP or API
# hero, sized to the box
/images/hero.jpg?w=1600&h=600&fit=cover&f=auto&q=80
# card thumbnail
/images/post.jpg?w=400&h=300&fit=cover&gravity=face&q=75
# avatar
/images/me.png?w=96&h=96&fit=crop&gravity=face&f=auto
Your agent is the admin panel
Lumen exposes its entire content API over the Model Context Protocol. Grant an agent a signed JWT and it can build pages, wire data sources, create forms and custom tables — while you keep the git-style audit of what changed.
- 40+ tools — pages, layouts, components, forms, tables, files, settings
- Custom tables — structured content with SQL access from templates
- Guardrails — SQL sandbox rejects schema changes and stacked queries
▸ "Build a blog with posts and tags"
✓ created table __posts
✓ created page /blog
✓ created page /blog/:slug
✓ wired db data sources
▸ "Show the 3 latest posts on the home page"
✓ updated page / with " }}