TYPO3 Extension Security: What We Can Learn from Cloudflare's EmDash

With EmDash, Cloudflare has introduced a CMS that revolutionises plugin security through capability manifests. We are transferring this concept to TYPO3 — as an open-source tool for extension audits.

Overview

  • Cloudflare has released EmDash — an open-source CMS featuring capability manifests that physically enforce plugin permissions.
  • PHP cannot do v8 isolates — but declaration + static analysis deliver the majority of the security benefits for TYPO3.
  • Our open-source tool typo3-capability-manifest brings extension audits, risk assessment, and policy enforcement to TYPO3.
  • Discusses exemplary risk assessments for 14 popular TER extensions.

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).

What is a capability manifest?

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 is not immune

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:

Core concept

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:

  1. Capability Manifests — Every extension declares in a Capabilities.yaml which subsystems it uses
  2. Static Analysis — An audit tool verifies the declaration against the actual code
  3. 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:

CapabilityWeightRationale
database:read (own tables)0Normal operation
database:read (core tables)1Reads system data
database:write (core tables)3Modifies system data
network:outbound (specific host)2External dependency
network:outbound (unrestricted)5Data exfiltration risk
xclass:override4Overrides core behaviour
auth:provider4Controls authentication
site:middleware3Intercepts all requests
eval()/exec() detected5Code 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:

CI/CD Integration

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  

FeatureEmDash (Cloudflare)TYPO3 Capability Manifests
EnforcementRuntime (v8 isolate)Declarative + static analysis
Can a plugin cheat?No — physically impossibleYes — but detectable
Install-time transparencyYesYes
Runtime monitoringYesPhase 4 (planned)
Ecosystem adoption requiredNew ecosystemExisting ecosystem
Value without enforcementN/AHigh — visibility + governance
LanguageTypeScriptPHP + 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:

ExtensionRiskKey capabilities
newsLowNo network, no XCLASS
powermailMediumMail, file write, scheduler
maskMediumDynamic TCA, file write
solrMediumNetwork (Solr), middleware
gridelementsMediumXCLASS overrides
containerLowTCA override only
vhsLowRead-only ViewHelpers
ke_searchLowNo network, local index
yoast_seoMediumMiddleware, TCA override
realurlHighXCLASS, middleware (legacy)
content_defenderLowRead-only TCA
tt_addressLowSimple address data
static_info_tablesLowRead-only reference data
sr_feuser_registerMediumWrites fe_users, sends emails

Potential Roadmap  

Phase 1: CLI Tool + Manifest Format

Open-source release of the audit tool. Manifest schema, static analysis engine, three CLI commands. Example manifests for top extensions.

Phase 2: Backend Module + Composer Plugin

Visual dashboard in the TYPO3 backend (Admin Tools). Composer plugin with install-time warnings. Site capability policy engine.

Phase 3: Community Adoption + TER

Proposal to the TYPO3 Core Team. TER integration (capability badges). CI templates for GitHub Actions and GitLab CI.

Phase 4: Runtime Monitoring

PSR-15 middleware for capability logging in production. Dashboard: declared vs actually used over time.

Installation and Usage  

For TYPO3 developers

typo3-capability-manifest on GitHub

Repository with CLI approach, manifest schema, and example material. The verified entry point is GitHub.

Open repository

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

Let's talk about your project

Locations

  • Mattersburg
    Johann Nepomuk Bergerstraße 7/2/14
    7210 Mattersburg, Austria
  • Vienna
    Ungargasse 64-66/3/404
    1030 Wien, Austria

Parts of this content were created with the assistance of AI.