{"id":98016,"date":"2026-10-05T15:02:00","date_gmt":"2026-10-05T19:02:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=98016"},"modified":"2026-09-29T07:53:55","modified_gmt":"2026-09-29T11:53:55","slug":"emdash-revisions-content-recovery-98016","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/emdash-revisions-content-recovery-98016\/","title":{"rendered":"Use EmDash&#8217;s Revisions to Never Lose Content"},"content":{"rendered":"<p>You make a change, hit save, and something breaks. A paragraph you spent an hour writing? Gone. A page layout you carefully arranged? Replaced by an earlier, worse version. WordPress users know this pain. <a href=\"https:\/\/emdashcms.com\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">EmDash<\/a>, Cloudflare&#8217;s new open-source CMS (version 0.1, built in roughly 2 months by Astro core team member Matt Cain), ships with a revision and draft system designed to prevent exactly this. Here&#8217;s how it works and how you use it.<\/p>\n<h2>What EmDash&#8217;s Revision System Actually Saves<\/h2>\n<p>Every time you save a page or post in EmDash, the system creates a snapshot. Not just the content body \u2014 the full state including title, featured image, SEO metadata, categories, and custom fields. The source confirms: &#8220;we have the revisions. Very nice.&#8221;<\/p>\n<p>In the playground at emdashcms.com (a temporary instance that lasts one hour), revisions are limited. On a real deployed instance, every save generates a new revision entry. Open a published post, make an edit, and the original version stays intact under the revision history. You never overwrite \u2014 you layer.<\/p>\n<p>The practical difference from WordPress? WordPress also saves revisions, but they live in a separate <code>wp_postmeta<\/code>codecodecodecodecode table that bloats your database. EmDash stores them as structured JSON (portable text format), keeping the data clean and the full history queryable without extra plugin overhead.<\/p>\n<h2>Recover Content from a Previous Revision in 4 Steps<\/h2>\n<p>Here&#8217;s the exact workflow <a href=\"https:\/\/overcentral.com\/en\/eu-cra-reporting-requirements-80362\/\" title=\"EU CRA Demands What Shipped and When You Knew\" data-iacss-internal=\"1\">when you<\/a> need to undo a bad edit on a page or post in EmDash:<\/p>\n<ol>\n<li>Open the content item from the <strong>Posts<\/strong> or <strong>Pages<\/strong> section in the admin dashboard.<\/li>\n<li>Look at the right sidebar panel. You&#8217;ll see a <strong>Revisions<\/strong> section with timestamps listed in reverse chronological order \u2014 most recent save first.<\/li>\n<li>Click any revision timestamp. The preview pane loads that exact version of the content: title, body, featured image, and all metadata fields.<\/li>\n<li>If the preview shows the version you want, click <strong>Restore<\/strong>. That revision becomes the current published or draft version.<\/li>\n<\/ol>\n<p>What happens to the version you just overwrote? It becomes another revision entry. Nothing is deleted. The system keeps every save you&#8217;ve made.<\/p>\n<p>This process works for both published content and content still in draft. A post saved five times before publishing has five revision entries you can return to.<\/p>\n<h2>How Drafts Prevent Publishing Mistakes<\/h2>\n<p>EmDash separates draft content from published content at the database level. When you create a new post, it starts in draft status by default. You can save multiple times, make edits across days, and nothing goes live until you explicitly click <strong>Publish<\/strong>.<\/p>\n<p>The critical detail: EmDash&#8217;s draft system supports <strong>scheduled publishing<\/strong>. You set a date and time, save as draft, and the system publishes automatically at that moment. If you change your mind before the scheduled time, switch the status back to draft or delete the entry entirely.<\/p>\n<p>The front-end editor also respects drafts. Click the <strong>Edit<\/strong> button while viewing your site&#8217;s front end, and you enter an inline editing mode. Save those edits \u2014 they go to the draft version, not the live version. You preview the changes, then decide to publish or discard.<\/p>\n<p>This is the edge case most CMS users miss: editing on the front end should never immediately overwrite the live page. EmDash&#8217;s draft-first architecture ensures that.<\/p>\n<h2>EmDash vs WordPress: Revision Features Compared<\/h2>\n<table class=\"mw-table\">\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>EmDash (v0.1)<\/th>\n<th>WordPress (6.x)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Revision storage format<\/td>\n<td>Structured JSON (portable text)<\/td>\n<td>Serialized PHP in <code>wp_postmeta<\/code>codecodecodecodecode<\/td>\n<\/tr>\n<tr>\n<td>Draft-publish separation<\/td>\n<td>Built-in, with scheduled publishing support<\/td>\n<td>Built-in, but scheduled publish requires cron<\/td>\n<\/tr>\n<tr>\n<td>Front-end inline editing<\/td>\n<td>Yes \u2014 edits go to draft, not live<\/td>\n<td>Yes (via block editor), but edits apply directly<\/td>\n<\/tr>\n<tr>\n<td>Revision restore from preview<\/td>\n<td>Click a timestamp, preview, then restore<\/td>\n<td>Click a timestamp, compare diff, then restore<\/td>\n<\/tr>\n<tr>\n<td>Custom post type revisions<\/td>\n<td>Supported natively \u2014 flexible content types include revision history<\/td>\n<td>Supported only if the custom post type explicitly enables <code>revisions<\/code>codecodecodecodecode via <code>register_post_type()<\/code>codecodecodecodecode<\/td>\n<\/tr>\n<tr>\n<td>Revision retention<\/td>\n<td>Every save retained (no built-in limit in v0.1)<\/td>\n<td>Configurable via <code>WP_POST_REVISIONS<\/code>codecodecodecodecode constant (default: 5 per post)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/overcentral.com\/en\/meta-muse-ai-agent-80441\/\" title=\"Meta Launches Muse AI Agent, Needs User Trust\" data-iacss-internal=\"1\">AI agent<\/a> access to revisions<\/td>\n<td>MCP server can query and restore revisions programmatically<\/td>\n<td>Requires custom REST endpoint or plugin<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The table shows one clear advantage for EmDash: custom post types get revisions without any plugin. In WordPress, you need to add <code>'revisions' =&gt; true<\/code>codecodecodecodecode to your <code>register_post_type()<\/code>codecodecodecodecode call, and many site owners forget this step. EmDash&#8217;s flexible content types (pages, posts, projects, or any custom type you create) all inherit revision support automatically.<\/p>\n<h2>What Revisions Don&#8217;t Cover (Yet)<\/h2>\n<p>EmDash is version 0.1. Some gaps exist.<\/p>\n<p>First, the playground at emdashcms.com <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> include full revision history. You can see the system saving in real time, but you cannot browse past revisions in the temporary instance. To test revisions properly, deploy EmDash to a <a href=\"https:\/\/www.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Cloudflare<\/a> Workers account or a local Node.js server.<\/p>\n<p>Second, there is no visual diff tool. WordPress shows you what changed between two revisions with highlighted additions and deletions. EmDash shows only the raw restored content. You cannot, as of this beta, compare revision A against revision B side by side.<\/p>\n<p>Third, there is no automatic cleanup. Every save becomes a permanent revision. On a site with heavy editing activity, the revision count grows without limit. In WordPress, you can set <code>WP_POST_REVISIONS<\/code>codecodecodecodecode to cap the number. EmDash offers no such setting yet.<\/p>\n<h2>The Real Safety Net: Combine Drafts, Revisions, and the Import Tool<\/h2>\n<p>The most overlooked recovery path in EmDash is the WordPress import tool. If you migrate a WordPress site into EmDash (using the WXR export file or the dedicated export plugin), your entire content history comes with it. Posts, pages, media, custom post types \u2014 all of it. The import maps Yoast SEO fields to EmDash&#8217;s built-in SEO fields automatically.<\/p>\n<p>This means even if you delete content inside EmDash, you can re-import from your original WordPress export. It&#8217;s not a substitute for proper revision history, but it is a hard backup that survives accidental deletion.<\/p>\n<p>For production use in 2026, that extra layer matters. EmDash&#8217;s architecture is the most coherent challenge WordPress has faced \u2014 the plugin sandbox alone justifies the experiment. But the revision system, like everything else in v0.1, will evolve. Keep a separate backup of your content exports until it does.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You make a change, hit save, and something breaks. A paragraph you spent an hour writing? Gone. A page layout you carefully arranged? Replaced by an earlier, worse version. WordPress users know this pain. EmDash, Cloudflare&#8217;s new open-source CMS (version 0.1, built in roughly 2 months by Astro core team member Matt Cain), ships with [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":99229,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98016.png","fifu_image_alt":"Use EmDash's Revisions to Never Lose Content","footnotes":""},"categories":[31],"tags":[],"class_list":["post-98016","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98016.png","fifu_image_alt":"Use EmDash's Revisions to Never Lose Content","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98016","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=98016"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98016\/revisions"}],"predecessor-version":[{"id":99230,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98016\/revisions\/99230"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/99229"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=98016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=98016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=98016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}