{"id":98015,"date":"2026-10-05T12:38:00","date_gmt":"2026-10-05T16:38:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=98015"},"modified":"2026-09-29T07:53:47","modified_gmt":"2026-09-29T11:53:47","slug":"em-dash-missing-visual-editor-98015","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/em-dash-missing-visual-editor-98015\/","title":{"rendered":"EmDash Needs a Visual Editor. Here&#8217;s Why It Doesn&#8217;t Have One."},"content":{"rendered":"<p>You spin up an <a href=\"https:\/\/www.cloudflare.com\/products\/em-dash\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">EmDash<\/a> site, land in the admin, and the editing experience stares back at you: a block editor with a few text fields, no drag-and-drop canvas, no inline styling toolbar that actually shows you what the page looks like. This isn&#8217;t a beta bug. It&#8217;s a deliberate architectural <a href=\"https:\/\/overcentral.com\/en\/ichra-choice-arrangements-label-97925\/\" title=\"ICHRA Gets CHOICE Arrangements Label from CMS, SBA\" data-iacss-internal=\"1\">choice<\/a>, and it tells you everything about what Cloudflare thinks a CMS should be \u2014 and what it shouldn&#8217;t.<\/p>\n<p>The missing visual editor is the single loudest signal that EmDash was built for developers and <a href=\"https:\/\/overcentral.com\/en\/rogue-ai-agents-liability-vacuum-97898\/\" title=\"Rogue AI agents expose liability vacuum as OpenAI faces claims\" data-iacss-internal=\"1\">AI agents<\/a>, not for content creators who think in layouts. Let&#8217;s unpack why it&#8217;s missing and what you actually need to fill the gap.<\/p>\n<h2>The Portable Text Problem<\/h2>\n<p>EmDash stores all rich content as portable text \u2014 a structured JSON format pioneered by Sanity. That&#8217;s not HTML. It&#8217;s a machine-readable data structure that defines blocks, marks, and annotations. Portable text is great for multi-channel publishing. You can render it to web, mobile, email, or API without parsing markup. But it&#8217;s terrible for traditional WYSIWYG editors.<\/p>\n<p>A visual editor expects to manipulate DOM nodes directly. It needs to see the rendered HTML, apply styles, move elements around. Portable text is abstract. The editor would have to convert the JSON to HTML on the fly, then convert user changes back to JSON. That&#8217;s two translation layers with constant risk of data loss or corruption.<\/p>\n<p>Most CMSs that use structured content solve this with a dedicated rich text editor that understands the schema \u2014 like Sanity&#8217;s own block editor or Contentful&#8217;s. EmDash ships with a basic block editor that&#8217;s essentially a wrapper around the portable text spec. It works for plain prose. It collapses the moment you try to insert a custom component, a background image, or a multi-column layout.<\/p>\n<p>So the first answer to &#8220;why no visual editor&#8221; is: the data model doesn&#8217;t support it without significant engineering.<\/p>\n<h2>The Dynamic Worker Sandbox Blocks Live Preview<\/h2>\n<p>Here&#8217;s the non-obvious part that even experienced practitioners miss. EmDash&#8217;s plugin sandbox \u2014 the dynamic worker architecture \u2014 makes real-time visual previewing nearly impossible.<\/p>\n<p>A visual editor needs to run code on the server to render the page with draft content. In WordPress, that&#8217;s trivial: the PHP engine renders the page with the latest post revisions, and the front-end editor shows it. In EmDash, every plugin runs inside its own V8 isolate. The theme engine is Astro, which is static-first. To preview a draft with live styling, you&#8217;d need to spin up a dynamic worker that renders the page, inject the draft data, and stream the result back to the browser. That worker has to be scoped with the right permissions, started in milliseconds, and torn down immediately.<\/p>\n<p>Is it technically possible? Yes. Cloudflare could build it. But it would require a custom rendering pipeline that bypasses the static generation flow. That&#8217;s not in the v0.1.0 roadmap. The playground doesn&#8217;t even support revisions in preview mode \u2014 you can edit, save, and see the live site, but there&#8217;s no &#8220;what you see is what you get&#8221; feedback loop while you&#8217;re editing.<\/p>\n<p>For a developer, this is fine. You edit the JSON, save, and reload. For a content editor who expects to resize an image and see it snap into place, it&#8217;s a dealbreaker.<\/p>\n<h2>What You Actually Use Instead<\/h2>\n<p>If you&#8217;re building with EmDash today and you need visual editing, you have three options. None are great. All are better than pretending the missing feature doesn&#8217;t matter.<\/p>\n<h3>1. The Astro Front-End Editor (Limited)<\/h3>\n<p>EmDash ships with a front-end editor mode. Click &#8220;edit&#8221; on any page, and the page reloads with an overlay that lets you edit text inline. It works for single-line changes. It <a href=\"https:\/\/overcentral.com\/en\/rascal-does-not-dream-trailer-release-80139\/\" title=\"Rascal Does Not Dream Drops Trailer for Final Film\" data-iacss-internal=\"1\">does not<\/a> let you add new blocks, rearrange sections, or modify styling. The editor is powered by Astro&#8217;s content collections API \u2014 it can update text fields but not the page structure.<\/p>\n<p>This is fine for a blog post where you just fix a typo. It&#8217;s useless for a landing page where you need to swap hero images or change the call-to-action layout.<\/p>\n<h3>2. Self-Hosted Visual Builders (Not Yet Compatible)<\/h3>\n<p>You can&#8217;t drop Elementor or Divi into EmDash. Those are PHP-based and expect a WordPress database. But you could theoretically run a separate Astro-based visual builder \u2014 like Astro Studio&#8217;s visual editor or a custom implementation using Tina CMS \u2014 and connect it to EmDash&#8217;s API. Tina CMS, for example, uses Git-backed content and a visual editor that works with any framework. You&#8217;d need to configure a custom content source that writes to EmDash&#8217;s database via its API.<\/p>\n<p>This is a serious engineering project. You&#8217;re effectively building a visual layer on top of a CMS that wasn&#8217;t designed for one. The portable text format means Tina&#8217;s block editor would need a custom serializer. The sandboxed plugin model means any real-time preview would have to hit a dedicated API endpoint that bypasses the static cache.<\/p>\n<h3>3. Accept It as a Headless CMS (The Honest Path)<\/h3>\n<p>The most pragmatic answer: treat EmDash as a headless CMS with an admin panel. Use the API to connect it to a separate front-end framework \u2014 Next.js, SvelteKit, or Astro itself \u2014 and build your own visual editing experience on the front end. This is what Sanity and Contentful users do. You lose the &#8220;one-click deploy&#8221; simplicity, but you gain full control over the editing interface.<\/p>\n<p>EmDash&#8217;s API tokens support granular permissions. You can build a custom editor that renders draft content from D1, allows drag-and-drop layout changes, and saves structured JSON back. The cost is developer time. The benefit is you&#8217;re not waiting for Cloudflare to ship a feature they may never prioritize.<\/p>\n<h2>The Deeper Problem: EmDash&#8217;s Target User Isn&#8217;t You<\/h2>\n<p>Cloudflare is transparent about who EmDash is for: developers comfortable with TypeScript, Astro, and the terminal. The blog post emphasizes AI agents, MCP integration, and programmatic content management. The visual editor is not a priority because the intended workflow is &#8220;write structured content, let agents handle the rest.&#8221;<\/p>\n<p>That&#8217;s a valid product bet. It&#8217;s also a bet that alienates the 90% of WordPress users who need to hand a site to a client who wants to drag a button into a hero section. EmDash&#8217;s missing visual editor isn&#8217;t an oversight. It&#8217;s a signal that Cloudflare is building for a future where content is managed by code and AI, not by humans clicking buttons.<\/p>\n<p>If that future arrives, EmDash wins. If it doesn&#8217;t \u2014 if content creators still want to see what they&#8217;re building \u2014 EmDash will remain a developer toy. The visual editor gap is the single most important feature to watch in the next six months. If Cloudflare ships one, it&#8217;s a real WordPress competitor. If they don&#8217;t, it&#8217;s a niche tool for the serverless crowd.<\/p>\n<h2>The One Thing Generalists Miss<\/h2>\n<p>The portable text format doesn&#8217;t just block visual editors \u2014 it also prevents AI agents from generating visual layouts directly. An agent can write structured JSON for a blog post, but it cannot output a rendered page with CSS. That means any AI-driven content generation in EmDash is limited to text and data, not design. The agent can create a new custom post type and populate it, but it cannot restyle the theme or arrange blocks visually. That isolation is intentional for security, but it creates an invisible ceiling on what &#8220;AI-native&#8221; actually means here.<\/p>\n<p>EmDash&#8217;s architecture forces a decoupling of content and presentation that is philosophically pure but practically painful. The visual editor isn&#8217;t coming soon. Plan accordingly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You spin up an EmDash site, land in the admin, and the editing experience stares back at you: a block editor with a few text fields, no drag-and-drop canvas, no inline styling toolbar that actually shows you what the page looks like. This isn&#8217;t a beta bug. It&#8217;s a deliberate architectural choice, and it tells [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":99221,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98015.png","fifu_image_alt":"EmDash Needs a Visual Editor. Here's Why It Doesn't Have One.","footnotes":""},"categories":[31],"tags":[],"class_list":["post-98015","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98015.png","fifu_image_alt":"EmDash Needs a Visual Editor. Here's Why It Doesn't Have One.","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=98015"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98015\/revisions"}],"predecessor-version":[{"id":99222,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98015\/revisions\/99222"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/99221"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=98015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=98015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=98015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}