BUILD · THE CMS CORE

EmDash at the core.

Every Praxis site runs EmDash, Cloudflare's own CMS, and EmDash's core runs unmodified. Its screens for content, media, comments, menus, redirects, users, plugins and settings come first in your admin, as EmDash made them. Around them, Praxis adds the copilot on every screen, the Composer for pages, and the rooms of the experience layer. These screens are EmDash's work. This page shows what each one does, and what changes when it runs on Praxis.

Every figure on this page is as of October 2026.
On this pageWhat it does
  1. What it does
  2. The content model, and the lists you work from.
  3. One library for pictures, video and files.
  4. Comments
  5. Old addresses keep working.
  6. People are managed once, in your account.
  7. EmDash's plugins, with the copilot kept at arm's length.
  8. EmDash's own WordPress import
  9. What EmDash gives, and what changes on Praxis.
  10. How it works
  11. What keeps it safe
  12. Common questions

What it does

EmDash's screens come first in your admin's rail, in EmDash's own order: 43 screens behind the sign-in, as of October 2026, each known to the copilot by its plain name. Praxis's nine rooms follow them.

EmDash's Pages list on a demo store: seven published pages, among them Shop, Product Story and Home.

Content and content types

The content model, and the lists you work from.

  • Dashboard. Your site's figures. On Praxis, the title, the loading screen and the logo say Praxis, and the welcome popup is skipped for customers who arrive from their account.
  • Pages, Posts and your own collections. Browse, filter and act in bulk. On Praxis, "Add New" opens the Composer, and EmDash's editor refuses to save a page built there, turning its refusal into a link: "This page is built in the Composer. Open it there."
  • The content calendar. Publication across all your collections, on one calendar.
  • Revisions and scheduling. EmDash keeps each record's revisions and publishes on a schedule. On Praxis, pages and posts face the publishing check before scheduling and again when due. When the copilot schedules a post, it asks first.
  • Copy and recovery. Copy a page or post as a new draft, or bring one back from Trash as a draft. For Composer pages and posts, restoring an earlier revision replaces the draft and cancels its schedule, with no Undo. Revision history cannot bring back unsaved work or anything deleted forever.
  • Content Types and Relations. Your collections, their fields, and the relations between types.
  • English and Spanish. The copilot can translate a page into a linked draft in the other language, for you to check before publishing. HTML blocks and some other words can stay untranslated. Each language can have its own menu, starting with the same words and links for you to edit.
  • In a sentence: "Schedule the post for Monday at 9am" · "Take the old promo page offline".
EmDash's Media library on a demo store: a grid of twelve pictures and files.

Media

One library for pictures, video and files.

  • The library, with folders, cropping and a focal point for each picture.
  • On Praxis, an old preview link is sent on to the file's working address.
  • Uploads and deletions that the copilot proposes wait for your approval.
  • In a sentence: "Write alt text for the new photos".

Comments

  • The moderation queue, for Editors and above.
  • The copilot can moderate one comment or many, or delete them, each behind a card.
  • Comments carried over from a WordPress site arrive with their threads intact.

Menus, widgets, sections and bylines

Menus.

Edit menus directly. They are the same menus the Navigation room builds, and the copilot changes menus through Navigation, where a live header preview and a publish card wait. The copilot can also copy a menu for another language once you approve its card.

Widgets.

Widget areas, and the widgets in them.

Sections.

EmDash's library of reusable sections. Sections that arrive with a migration join it.

Bylines and Byline Schema.

Author records, and the fields each one carries.

EmDash's Redirects screen on our own site, its 404 Errors tab: the addresses visitors asked for that did not exist when they asked, with the copilot's dock open beside it.

Redirects and the 404 log

Old addresses keep working.

  • Redirect rules, and a summary of the addresses visitors asked for and did not find.
  • On Praxis, redirects run first on every request, before any page is built: 301, 302, 303, 307 and 308 redirects, 410 and 451 answers, and patterns.
  • In a sentence: "Redirect /old-sale to /spring-sale" · "Which broken links are visitors hitting?"
EmDash's Users screen on a demo store: one admin user, below a banner saying roles are managed in your Praxis account, under Team.

Users and roles

People are managed once, in your account.

  • EmDash's list of the site's users. On Praxis, a banner reads "Roles are managed in your Praxis account → Team.", and the invitation buttons become "Manage team in Praxis".
  • The roles are Viewer, Contributor, Author, Editor and Admin, plus the site's owner, who holds billing authority; Viewer comes only through SCIM.
  • "Open admin" in your account opens the site with a signed pass at your own role, good for 120 seconds.
EmDash's Plugins screen on a demo store: the five installed plugins.

Plugins and the registry

EmDash's plugins, with the copilot kept at arm's length.

  • EmDash's plugin manager, each plugin's settings, and its plugin registry, where one is configured.
  • When the copilot enables or removes a plugin, or changes its settings, it asks first. It never switches off or removes Praxis's own plugins.
  • The copilot never accepts a plugin's request for new powers, and a plugin's secret settings stay on its own screen.
  • In a sentence: "What plugins are installed?" · "Which plugins are on?".

EmDash's own WordPress import

  • EmDash's WordPress import wizard is still in your admin, beside Praxis's own Migration room: two importers, side by side.
  • The Migration room is the one our engineers run with you, with page-by-page review, before and after, and a named list of everything that did not come.

Settings, backups and site export

General and Social.

The site's name and address, formats, and social links. On Praxis, renaming the site is passed on to your account.

SEO.

The title separator, the default social image, Google and Bing verification, robots.txt, and an AI-training opt-out. On Praxis, the robots.txt box is set aside whenever a Praxis bot policy exists.

Security.

Passkeys. On Praxis, sign-in itself is managed through your Praxis account, and an emailed sign-in link is refused: "Sign-in is managed through your Praxis account."

Allowed email domains and API tokens.

Who may sign up by their email domain, and personal tokens, which read published content and drafts within their scopes and your role.

Email, Backups and Media usage.

Email setup with test sends, backup settings, and the index of where each file is used. Taking or downloading a backup from that screen is not available yet.

Site transfer.

Export the site as one transfer archive.

In a sentence: "Change the tagline" · "Let anyone with an address at our company's domain sign up".

Screen by screen

What EmDash gives, and what changes on Praxis.

Screen What EmDash givesOn Praxis, and what the copilot may do
Dashboard Your site's figures Titled Praxis; the welcome popup skipped for customers arriving from their account
Pages, Posts Lists, filters, bulk actions "Add New" opens the Composer; a Composer page cannot be saved from EmDash's editor; publish, unpublish, trash and schedule wait for approval
Other collections, Calendar Records in your own types; the publication calendar Unchanged; scheduling waits for approval
Media Folders, crop, focal point Old preview links sent on to the working file; uploads, deletions and repairs wait for approval
Comments The moderation queue Moderation, bulk acts and deletion wait for approval
Menus Direct menu editing The same menus as Navigation; the copilot reads here, writes through Navigation, and copies a menu for another language after approval
Redirects Rules and the 404 summary Run first on every request, with 301 to 308, 410, 451 and patterns; every rule change waits for approval
Widgets, Sections, Bylines, Byline Schema Widget areas, reusable sections, author records Imported sections join the library; most writes wait for approval
Content Types and Relations Schemas, fields, relations Schema changes wait for approval
Users The site's users Roles managed in your Praxis account's Team; every change waits for approval
Plugins, Registry Install and manage plugins No installs or updates; no new powers for any plugin through the copilot; secret settings stay on screen; every plugin change waits for approval
Import EmDash's WordPress wizard Still there, beside the Migration room
Settings General, Social, SEO, Security, email domains, tokens, Email, Backups, Media usage, Site transfer Renames passed to the account; robots set aside under a Praxis policy; sign-in through the account; read-only tokens; settings changes wait for approval
Categories and Tags Their rows in EmDash's menu Moved to Site › Taxonomies, their one home

How it works

  • EmDash runs inside every Praxis site as a pinned dependency, at a fixed version: 1.4.0, as of October 2026.
  • Praxis extends it through EmDash's own doors: its plugin system, its block types and plugin routes, and Praxis's own middleware and routes around it. Praxis's nine rooms are rows of those plugins, after EmDash's own rows.
  • What Praxis changes on one of EmDash's screens, it changes from its own host code: a banner, a button sent somewhere else, a refusal in plain words.
  • On EmDash's own screens, your own click is the decision, as EmDash designed it. The approval card is how the copilot acts there for you.
  • EmDash's core runs unmodified, as the published package.
  • The copilot knows each of EmDash's screens by its plain name, so the dock can say where you are and what you have open.
Illustration of the admin’s rail as one column: EmDash’s rows above, from Dashboard to Settings, and Praxis’s nine rooms below, from Copilot to Account & billing, with a thin gold line marking where EmDash’s own screens end.

Built on EmDash and Cloudflare

What keeps it safe

The copilot asks, on every screen.

When it publishes, schedules, uploads, moderates, redirects, changes a schema, a user, a plugin, a setting or a backup on EmDash's screens, it stops at a card first.

No new powers for plugins.

The copilot refuses a plugin's request for more.

Secrets stay on their screens.

The copilot refuses a plugin's secret settings, which are entered on the plugin's own screen.

Composer pages are protected.

EmDash's editor cannot save one, and EmDash's own Publish button applies the same publishing check as the Composer and the copilot.

One way in.

Sign-in runs through your Praxis account, and "Open admin" passes you in at your own role.

Read-only tokens.

A personal token reads published content and drafts within its scopes and your role.

Common questions

Is this EmDash's own admin?

Yes. EmDash's screens come first in your admin, as EmDash made them, and Praxis's rooms follow.

Can I still use EmDash's editor?

Yes, for content not built in the Composer, such as the records in your own collections. New pages and posts start in the Composer.

Where did Categories and Tags go?

To Site › Taxonomies, with any groupings of your own.

Why are there two WordPress importers?

EmDash's own wizard remains, and Praxis adds the Migration room our engineers use, with review, before and after, and every loss named.

Can I install EmDash plugins?

No. Admins can manage the installed plugins on the Plugins screen. When the copilot changes one, it asks first, and it never grants a plugin new powers.

Can I export my site?

Settings › Site transfer exports the site as one transfer archive. Your measurement data has its own exports, on Privacy & Data.

How does AI act on my site?

Every AI action on your site goes through one governed gate.

Do you change EmDash?

Its core runs unmodified, as the published package. Everything Praxis changes on a screen, it changes from its own code around EmDash.