emDash is free, and — unlike most "free" software — it can genuinely cost nothing to run, under conditions worth being precise about. This piece models the real monthly cost of operating an emDash site honestly, including the part the vendor-written cost pages get wrong: that a content site can run on Cloudflare for $0, and exactly what tips you into paying.

Figures below are grounded in Cloudflare's published pricing, checked on 17 October 2026, and are presented as ranges. Confirm current rates at developers.cloudflare.com/workers/platform/pricing before you rely on them.

Where cost actually comes from

A CMS has three cost centres, and only the first is obvious:

01Hosting and infrastructure

The monthly bill to keep the site online.

02Build and design

One-time or periodic, and usually the largest number.

03Maintenance

The recurring labour of updates, fixes and security: the line most owners never price and most regret.

emDash changes the shape of all three relative to WordPress. We will take hosting in detail, because it is where the published numbers are, and then be honest about the other two.

The hosting fork: Cloudflare vs self-hosted

There are two realistic ways to run emDash, and they have different cost structures.

Option A — Cloudflare Workers (the default), starting at $0. emDash runs on Cloudflare's developer platform, and this is the part the generic cost pages get wrong. A content site that uses only emDash's built-in features runs on Cloudflare's free Workers plan at $0/month, database (D1), storage (R2) and cache (KV) included within the free allowances. And "built-in features" covers most of what a publisher, blog or brochure site actually needs: SEO, redirects, sitemaps, search, menus, taxonomies, image handling, caching and scheduled publishing are all part of emDash core, not plugins. We run plugin-free emDash content sites on the free plan today — this is a tested observation, not a theoretical one.

One constraint the generic cost pages rarely mention: the free plan allows 10 ms of CPU time per request. A lean template renders within that; a heavier one may not. This publication's own site, which runs on the Workers Paid plan, spends roughly 20–280 ms of CPU rendering a page that is not already in the edge cache, depending on the page. Check your own template's CPU time in Workers Logs before you count on $0.

Two things move you onto the Workers Paid plan ($5/month base):

  • Sandboxed plugins. Plugins installed from the emDash registry run in an isolated sandbox, which on Cloudflare is a Dynamic Worker, and Dynamic Workers need the Workers Paid plan. A plugin registered in the site's own configuration instead runs inside the site process; that works on the free plan, but without the sandbox's isolation, so it is a trade you make deliberately rather than a free lunch. Running registry plugins with their isolation intact is a functionality decision, not a traffic one.
  • Traffic or usage beyond the free allowances. A high-traffic site can cross the free request, database or storage ceilings on volume alone, with or without plugins.

Once you are on Paid, the $5 base includes generous allowances, and metered usage for a typical small-to-mid content site is small — often a few dollars or less — because R2 charges nothing for bandwidth (no egress fees). Realistic range on Paid: roughly $5–10/month, rising with traffic and, in particular, with write-heavy workloads. KV writes are the one metered line that can surprise you at scale (the free plan allows 1,000 a day; Paid includes a million a month), and a well-built emDash site keeps them low.

The honest headline: a plugin-free emDash content site can cost $0 to host; a site that runs sandboxed registry plugins starts at about $5/month. Most of the step from free to paid is a decision about functionality, not a function of your traffic.

Option B — self-hosted Node.js on a VPS. emDash also runs on any server with Node.js. A small virtual private server from a mainstream provider runs roughly $5–12/month and gives you full control and predictable billing, in exchange for taking on the operational work: you own the updates, the backups, the security patching and the uptime. The cost in money is similar to Cloudflare; the cost in labour is higher.

The honest read: for most owners, Cloudflare is cheaper in total because it absorbs the operational labour, and the bill for a content site ranges from $0 (plugin-free, free plan) to single digits (on Paid). Self-hosting makes sense when you specifically want control, predictable billing, in-process plugins without the Paid plan, or independence from Cloudflare — the last of which is a legitimate strategic reason we take seriously.

ScenarioWhere it runsMonthly hosting
Content site using only built-in featuresCloudflare Workers Free$0, if the template renders within 10 ms of CPU per request
Site running sandboxed registry pluginsCloudflare Workers PaidFrom $5; roughly $5–10 for a typical small-to-mid site
High-traffic site beyond the free allowancesCloudflare Workers Paid$5 base plus metered usage, rising with traffic and writes
Self-hostedA Node.js virtual private serverRoughly $5–12, plus the updates, backups, patching and uptime you take on

The costs that dwarf hosting

Hosting is the number everyone asks about and the smallest one that matters.

  • Build and design. A new emDash site is an Astro build. Whether you do it yourself, use an AI builder, buy a theme, or hire, this is almost always the largest cost in the first year.
  • Maintenance. This is where emDash's architecture pays back. Point releases ship roughly monthly, and the new upgrade-emdash command produces a per-site upgrade work order that scopes each update — which lowers the recurring cost and risk of staying current. More materially, the sandboxed-plugin model reduces the frequency and severity of the security incidents that make WordPress maintenance unpredictable. You are trading a volatile, incident-driven cost for a steadier, planned one.

The bottom line, per reader

  • Owner of a small content site: if your site uses only emDash's built-in features, budget $0 to host on Cloudflare's free plan — genuinely nothing — plus your build cost up front and modest ongoing maintenance. Add about $5/month the moment you want registry plugins running in their sandbox. The infrastructure is free or cheap; the build is where your money goes.
  • Owner weighing emDash against managed WordPress: compare total cost of ownership, not hosting line items. emDash's hosting is cheaper and its maintenance profile is steadier, but you are responsible for a build that managed WordPress hands you off the shelf.
  • Agency pricing client work: the low, predictable infrastructure cost is a margin opportunity and a selling point; the build is your billable scope.

The $0 free-plan claim is from running plugin-free emDash sites ourselves. The metered ranges are modelled from Cloudflare's published pricing, checked on 17 October 2026; we keep them current against Cloudflare's pricing page and re-date on each check. emDash's documentation settles one question we had flagged: sandbox: false, which runs sandboxed plugins in-process, is refused on Cloudflare Workers and is described as a debugging option only. On the free plan, the in-process route is to register a plugin in the site's configuration, without isolation.