Cloudflare's EmDash Migration: Zero Downtime, Low Errors, Agent-Ready MCP
Cloudflare migrated its blog to EmDash CMS as a production testbed, load-tested with k6, built a multi-layer caching architecture on Cloudflare Workers, rolled out via canary deployment, achieved flatter latency and fewer errors, and exposed blog content via MCP for AI agents.
Customer Zero: Cloudflare's Production-First Philosophy
Cloudflare uses a "Customer Zero" approach: run new products on their own critical business first, fix issues at real scale and under real security pressure, then release to customers. This principle is codified in their internal engineering standard Codex. When EmDash launched, Cloudflare's blog team became the first internal Customer Zero for the platform.
Evaluating Fit and Scalability
Before migration, the team answered two questions: Can EmDash handle our editorial workflow? and Can it scale to our traffic?
Editorial Workflow Validation
They tested daily operations: publishing and unpublishing articles, writing new posts, scheduled publishing, and adding media assets. EmDash passed most tests, but the blog's complexity (heavy media, content entity search, author bylines, localization, SEO, CSP) surfaced issues: custom HTML blocks were hard to find, the entity editor had bugs, and the formatting toolbar scrolled away during long-form writing. The biggest gap was scheduled publishing, which wasn't fully fixed until EmDash 0.19.0.
Load Testing with k6
Cloudflare Blog traffic is uneven: ~75 RPS baseline, peaks over 5,000 RPS, with occasional unexplained spikes. They designed three k6 scenarios:
Ramp : gradually increase to 3× production baseline, then cool down.
Breakpoint : 0 to 100 RPS in 10 minutes until system breaks.
Burst : instant 7,000 RPS load to observe reaction.
Pass criteria: Availability – <0.01% HTTP 5xx; P95 latency – <5% responses >500 ms; P99 latency – <1% responses >1,000 ms.
Multi-Layer Caching Architecture
Test results led to a four-layer architecture:
Cloudflare Workers running EmDash.
Workers Cache (new, first major site to use it this way).
EmDash object cache built on Workers KV for this scenario.
Hyperdrive (Cloudflare's first-party) connecting to PlanetScale database.
Result: 99.5% of static files and ~70% of all requests terminate at the cache layer, delivering faster responses and protecting the database.
Frontend Redesign with Kumo Design System
Beyond backend, the UI was rebuilt on Cloudflare's Kumo design system to unify visual language across blog, dashboard, and marketing sites. Native light/dark mode follows system preference with an explicit toggle; both modes meet accessibility standards. The subscription box moved from top-right (often mistaken for search) to a dedicated action bar at article bottom. Article pages gained a right-side on-page navigation tracking scroll progress and a left-side "Join Discussion" widget for social/community links.
Zero-Downtime Cutover via Proxy Worker and Canary
A proxy Worker routed traffic between old and new sites using a version cookie. On 5xx errors, traffic fell back to the old blog. Cloudflare's NEW_BLOG Service Binding enabled direct Worker-to-Worker calls, bypassing public hostname, DNS, TLS, and outbound HTTP for lower latency. Rollout: 1% → 5% → 15% → 100% in a single day, each step exposing edge-case issues without affecting most readers.
Results: Flatter Latency, Fewer Errors
Under real traffic up to ~850 RPS, the new stack shows a flat P95 latency curve versus the old platform's periodic spikes. Error rates remained minimal.
MCP: Blog as an Agent-Accessible Resource
Two MCP (Model Context Protocol) servers were published:
Blog MCP : exposes search_posts, list_posts, get_post, list_tags for agents to read content. Built in hours because EmDash already exposed API and AI search endpoints.
EmDash MCP : lets agents browse, create, edit, publish, schedule, delete, and manage content. Included as a platform capability at no extra cost.
Tool names are kept in English for direct copy-paste into MCP configs.
Stress Test: Agents Week
Nine days, 28 articles, nearly 3 million pageviews. Frontend Worker stable at ~450 RPS peak. On August 10, Cloudflare's built-in DDoS protection absorbed a 28,000 RPS attack. Editorial side revealed minor UX quirks and scheduled-publishing bugs, already reported for fix before Birthday Week.
Conclusion
The migration validates Customer Zero: Cloudflare runs the hardest production scenarios first, EmDash hardens the product, and customers receive a more mature platform. Teams evaluating a CMS should try EmDash now — it's production-ready with a clear roadmap to 1.0.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
