# Cloudflare's official blog just moved to EmDash! It shrugged off a spike to 5,000 requests per second!

Hi, it's Shii! Today I found news where the Cloudflare blog itself is the star of the show. Cloudflare moved its own official blog entirely onto a new CMS called EmDash, and it looks like this was a major migration done while live production traffic kept flowing. I was hooked reading about it!

## What was announced?

According to the Cloudflare Blog, the team migrated their official blog's platform to a CMS called EmDash. EmDash is designed to run on Astro and Cloudflare, and this migration of Cloudflare's own blog became its first deployment handling serious large-scale traffic.

Alongside the migration, the design got a refresh too: dark mode support, an on-page table of contents ("On this page"), and per-post sharing were all added. This wasn't just a behind-the-scenes swap, the reader-facing side got a real update too.

## The story so far

Cloudflare has a culture called "Customer Zero," the idea that they use their own products themselves first and sharpen them from there. The post itself says something to the effect of, "We don't just build products for others; we build them to run Cloudflare itself."

On the old blog platform, things were fine under normal load, but when you looked at latency, the P95 graph (the slower end of the top 5% of response times) showed periodic spikes. After the EmDash migration, those spikes disappeared and the response profile became consistently flat and stable, according to the post.

## What changes

The most visible change is resilience under heavy traffic. Where normal load sits around 75 RPS (requests per second), the new platform is now built to handle spikes over 5,000 RPS. During "Agents Week," an event where 18 posts went out, the new platform handled a total of 9 million page views and a peak of 450 RPS with essentially no errors.

The post also mentions that the new setup absorbed a DDoS attack at around 28,000 RPS. That might sound like a backend detail, but it directly translates into a more stable reading experience for readers, since the blog stays up.

For Cloudflare's engineers, side benefits of this update included rebuilding the frontend on the Kumo design system and getting access to an EmDash MCP (Model Context Protocol) server at no extra cost.

## Dive Deep

Let's take a closer look at what actually went into this migration, I'm getting fired up!

**Building blocks**: The new blog platform is put together from pieces like these:

- EmDash itself running on Cloudflare Workers
- A Workers Cache layer for caching responses
- EmDash's own object cache built on Workers KV
- Hyperdrive paired with PlanetScale to optimize database connections
- A proxy Worker that intelligently routes traffic

**Cache hit rates**: The static file cache hit rate reaches 99.5%, and even across all requests overall, the cache hit rate comes in around 70%. That means a large share of requests never even need to reach the origin.

**Gradual cutover**: Instead of flipping all production traffic to the new platform at once, the team ramped it up step by step: 1% → 5% → 15% → 100%. It sounds like a cautious rollout strategy, checking for issues at each stage before moving on.

**Stress testing with k6**: Before the migration, the team ran three kinds of scenarios using a tool called k6:

- Ramp: gradually increasing load
- Breakpoint: probing for the limit of what the system can handle
- Burst: slamming in 7,000 RPS all at once

The pass criteria were set at an HTTP request failure rate under 0.01%, P95 latency under 500 ms, and P99 latency under 1,000 ms.

**Frontend improvements**: The team unified the design system on Kumo and added support for both light and dark mode. The placement of the email subscription form was also reconsidered and moved to reduce confusion for readers. On top of that, they added an on-page table of contents ("On this page") to help readers keep track of where they are, along with a "Discuss Online"-style sharing option for talking about posts.

**A door open for AI tools too**: An MCP server for EmDash is now available at no extra cost, letting AI assistants call functions like these:

- search_posts (search posts)
- list_posts (list posts)
- get_post (fetch a specific post)
- list_tags (list tags)

**Issues found along the way**: EmDash is still a CMS in active development, and running it at this scale surfaced a few areas for improvement. The post calls out media scalability, internationalization, SEO features, Content Security Policy handling, scheduled publishing (already resolved as of v0.19.0), and editor UX as things still being polished going forward.

The post includes a line to the effect of "We don't just build products for others; we build them to run Cloudflare itself," which really captures that Customer Zero mindset.

## Wrap-up

- Cloudflare's official blog migrated to EmDash, a CMS built for Astro and Cloudflare
- The new setup handles normal load of 75 RPS up to spikes over 5,000 RPS, and even absorbed a 28,000 RPS DDoS attack
- The team migrated safely using a gradual 1% → 5% → 15% → 100% rollout plus Ramp / Breakpoint / Burst stress testing with k6
- Cache hit rate is 99.5% for static files and around 70% overall, so caching is doing real work
- The update also brought a frontend refresh with dark mode and a table of contents, plus a free EmDash MCP server

This is a very "Customer Zero" story about Cloudflare pushing its own product to production-grade scale by using it themselves, and it's a especially good read if you're curious about architecture design for large-scale traffic and how to approach stress testing.
