With EmDash, Cloudflare has introduced an ambitious project: an entirely new CMS, written in TypeScript, built on Astro, with a radically different approach to plugin security. The timing — 1st of April — caused justifiable scepticism, but the product is real: the code is on GitHub, the architecture is well thought out, and industry heavyweights like Joost de Valk (founder of Yoast SEO) have seriously engaged with it.
For TYPO3 agencies, EmDash is not a direct competitor. However, the ideas behind it deserve attention — especially the capability manifest concept.
Table of Contents
EmDash: The new CMS
What Cloudflare has built and why it is relevant
The Plugin Problem
96% of all WordPress vulnerabilities stem from plugins
Transferring to TYPO3
Three concepts that can be applied immediately
Capabilities.yaml
The manifest format for TYPO3 extensions
Risk Assessment
Scoring system for extension capabilities
Site Policy
Enterprise governance for extensions
EmDash vs TYPO3
Runtime isolation vs static analysis
Installation
Repository, CLI examples, GitHub repo
EmDash: The new CMS by Cloudflare
On the 1st of April 2026, Cloudflare released EmDash — an open-source CMS positioning itself as the "spiritual successor to WordPress". The complete source code is available on GitHub; the project runs on Cloudflare's own infrastructure (D1, R2, Workers) or on any Node.js server with SQLite.
The core innovation: every plugin declares in a capability manifest which permissions it requires. Undeclared capabilities are physically impossible — enforced by v8 isolates (Cloudflare Dynamic Workers).
A capability manifest is a structured declaration of all subsystems a plugin is allowed to access. It is comparable to app permissions on a smartphone: a calculator app requesting camera access would immediately be suspicious. The same principle applied to CMS plugins — but with technical enforcement rather than mere transparency.
Joost de Valk, founder of Yoast SEO and one of the most influential voices in the WordPress ecosystem, described EmDash as the most interesting thing to happen to content management in years. The tech press reacted with mixed feelings: technically impressed, but sceptical regarding its market chances against WordPress, which holds over a 43% market share and has 60,000 plugins.
This plugin can exclusively read content and send emails. No file access, no database manipulation, no outbound network traffic — technically impossible, not just by convention.
The WordPress Problem (and why TYPO3 is not immune)
96% of all WordPress security vulnerabilities stem from plugins. The reason is architectural: a WordPress plugin runs in the same PHP process as WordPress itself and has full access to the database, file system, and network. A compromised plugin means a compromised system.
EmDash solves this radically: each plugin runs in its own v8 isolate. It can only use the capabilities it has declared.
TYPO3 has a more nuanced permission model than WordPress — backend user groups with granular rights, ACLs on a page and content level, a PSR-15 middleware stack for request filtering. However, on an extension level, the same fundamental problem exists: every extension runs in the same PHP process and can in principle access everything. An extension with a single vulnerability compromises the entire installation.
The question is not which CMS has the more secure foundational system. The question is: do administrators know what their extensions are actually doing? Which tables does EXT:news read? Does EXT:solr make outbound network connections? Does EXT:gridelements override core classes via XCLASS?
What we are adopting from EmDash
PHP does not have v8 isolates. We cannot physically isolate extensions from one another — at least not without fundamental architectural changes. But we can achieve a large part of the security benefits through declaration and auditing:
You don't need runtime isolation to achieve the bulk of the benefits. Simply knowing what an extension does — and being able to verify it — is transformative for enterprise TYPO3 governance.
Specifically, we are transferring three EmDash concepts to TYPO3:
- Capability Manifests — Every extension declares in a
Capabilities.yamlwhich subsystems it uses - Static Analysis — An audit tool verifies the declaration against the actual code
- Site Policies — Administrators define which capabilities are permitted
The Manifest Format: Capabilities.yaml
Every TYPO3 extension receives a new file under Configuration/Capabilities.yaml:
Administrators can see immediately: this extension accesses its own tables and a few core tables, makes no outbound network connections, and does not override any XCLASS. Risk: low.
Risk Assessment
The audit tool calculates a risk score based on the declared (and detected) capabilities:
| Capability | Weight | Rationale |
|---|---|---|
| database:read (own tables) | 0 | Normal operation |
| database:read (core tables) | 1 | Reads system data |
| database:write (core tables) | 3 | Modifies system data |
| network:outbound (specific host) | 2 | External dependency |
| network:outbound (unrestricted) | 5 | Data exfiltration risk |
| xclass:override | 4 | Overrides core behaviour |
| auth:provider | 4 | Controls authentication |
| site:middleware | 3 | Intercepts all requests |
| eval()/exec() detected | 5 | Code execution risk |
Risk levels: 0–4 Low, 5–9 Medium, 10–14 High, 15+ Critical.
The CLI Tool
Our open-source package webconsulting/typo3-capability-manifest provides three commands:
The generator analyses the PHP code using nikic/php-parser, scans Services.yaml, ext_localconf.php, TCA/Overrides/, RequestMiddlewares.php, and ext_tables.sql, and creates a complete manifest.
Site Capability Policy
For enterprise environments, administrators can define which capabilities are allowed:
A typo3 capability:policy-check within the build process prevents extensions with unauthorised capabilities from being deployed. The policy file is versioned, the check runs automatically — extension governance without manual effort.
Comparison: EmDash vs TYPO3 Capability Manifests
| Feature | EmDash (Cloudflare) | TYPO3 Capability Manifests |
|---|---|---|
| Enforcement | Runtime (v8 isolate) | Declarative + static analysis |
| Can a plugin cheat? | No — physically impossible | Yes — but detectable |
| Install-time transparency | Yes | Yes |
| Runtime monitoring | Yes | Phase 4 (planned) |
| Ecosystem adoption required | New ecosystem | Existing ecosystem |
| Value without enforcement | N/A | High — visibility + governance |
| Language | TypeScript | PHP + YAML |
What the Static Analysis Detects
The tool uses nikic/php-parser for AST-based analysis and pattern matching for configuration files:
Example Manifests: Top TER Extensions
The approach can be applied as an example to popular TER extensions. Here is an overview of exemplary risk assessments:
| Extension | Risk | Key capabilities |
|---|---|---|
| news | Low | No network, no XCLASS |
| powermail | Medium | Mail, file write, scheduler |
| mask | Medium | Dynamic TCA, file write |
| solr | Medium | Network (Solr), middleware |
| gridelements | Medium | XCLASS overrides |
| container | Low | TCA override only |
| vhs | Low | Read-only ViewHelpers |
| ke_search | Low | No network, local index |
| yoast_seo | Medium | Middleware, TCA override |
| realurl | High | XCLASS, middleware (legacy) |
| content_defender | Low | Read-only TCA |
| tt_address | Low | Simple address data |
| static_info_tables | Low | Read-only reference data |
| sr_feuser_register | Medium | Writes fe_users, sends emails |
Potential Roadmap
Phase 1: CLI Tool + Manifest Format
Phase 2: Backend Module + Composer Plugin
Phase 3: Community Adoption + TER
Phase 4: Runtime Monitoring
Installation and Usage
typo3-capability-manifest on GitHub
Repository with CLI approach, manifest schema, and example material. The verified entry point is GitHub.
Conclusion
EmDash demonstrates what CMS plugin security should look like in 2026: declarative, transparent, and auditable. Whether EmDash will replace WordPress remains to be seen — the ecosystem problem is real. However, the architectural ideas behind it can be applied immediately.
For TYPO3, this means: we do not have to wait for runtime isolation. Capability manifests with static analysis and policy enforcement already give us the transparency and governance that enterprise clients require today.
Key takeaways:
- Extension security is not a WordPress-exclusive problem — TYPO3 benefits from the same approach
- Declaration + auditing delivers a large portion of the benefits of runtime isolation
- The verified entry point for the tool is the GitHub repository
- Every TYPO3 agency can apply the capability manifest approach to their extensions today