TYPO3 Capability Manifests: Declaring What an Extension Does

The concept project typo3-capability-manifest brings declarative manifests to TYPO3 extensions. Each extension declares in a YAML file which subsystems, database tables, network connections, and overrides it uses, all verifiable via the CLI.

Auf einen Blick

  • Each extension declares in Configuration/Capabilities.yaml which TYPO3 subsystems, databases, network connections, and XCLASS overrides it uses.
  • CLI commands generate, verify, and audit manifests, with a weighted Risk Score (network:outbound:any = 5, xclass:override = 4) from 0 to 15+, mapped to Low / Medium / High / Critical.
  • A Site Capability Policy defines project-wide which capabilities are permitted and what maximum Risk Score is accepted.
  • The project is at alpha stage: a proof of concept, not a production-ready standard.

Anyone installing a TYPO3 extension gets almost no structured information about what it actually does. Which database tables does it create? Does it open outbound network connections? Does it override TYPO3 classes via XCLASS? Today, the only way to answer these questions is to read the source code, which rarely happens in practice.

The concept project typo3-capability-manifest proposes a different approach: each extension declares its actual capabilities in a standardised YAML file. CLI tools then generate manifests, verify declarations against the code, and calculate a Risk Score. The idea was inspired by Cloudflare's EmDash model for WordPress , which takes a similar approach in the WordPress ecosystem.


Table of Contents  

Overview

The concept and idea behind Capability Manifests for TYPO3.

Features in Detail

Manifest structure, CLI commands, Risk Scoring, and Site Policy.

Installation

Composer installation and first steps with the CLI commands.

Conclusion

Assessment and outlook on the roadmap.

Overview  

In principle, TYPO3 extensions can reach almost every part of a TYPO3 system: they can override classes (XCLASS) , register hooks and events, make network requests, and extend database schemas. This is by design and part of the extensibility that makes TYPO3 so flexible. But it also makes risk assessment hard.

typo3-capability-manifest tackles this through declaration: a Configuration/Capabilities.yaml file inside the extension describes the capabilities it actually uses. That declaration can then be checked automatically against the code. Any discrepancies, whether declared but not found or found but not declared, are reported as audit findings.

The project ships example manifests for the 20 most widely used TER extensions, which serve as a reference for the manifest structure.

TYPO3 v13.4 LTS and v14

This extension supports TYPO3 ^13.4 || ^14.0 and PHP ^8.2, so it is not limited to TYPO3 v14. Alpha status means the concept is fully worked out and the CLI commands work, but the manifest format may still change. Use in production at your own risk.

Features in Detail  

Manifest Structure  

A Configuration/Capabilities.yaml declares what an extension does:

Capability KeyMeaningRisk Weight
network:outbound:anyArbitrary outbound HTTP/TCP connections5
xclass:overrideXCLASS override of TYPO3 classes4
auth:providerCustom Authentication Provider4
database:writeWrite access to database tables3
database:readRead access to database tables1
subsystem:frontendUses TYPO3 frontend rendering0

The Risk Score is the weighted sum of all declared capabilities. Thresholds: 0–4 Low, 5–9 Medium, 10–14 High, 15+ Critical.

CLI Commands  

CommandFunction
capability:generateAnalyses the extension code and generates a draft manifest
capability:verifyVerifies declaration against actual code; reports discrepancies
capability:auditComplete audit report: DECLARED & VERIFIED / DETECTED BUT NOT DECLARED / DECLARED BUT NOT FOUND
capability:policy-checkChecks all installed extensions against the Site Capability Policy

Site Capability Policy  

In config/capability-policy.yaml, the project team defines which capabilities are permitted and what Risk Score is acceptable:

The policy offers allow and deny lists for individual capabilities, plus a global max_risk_score. Extensions that exceed the threshold or declare forbidden capabilities are flagged as policy violations.

Roadmap  

The project is at alpha stage. Planned additions include:

Backend Module

Visualisation of all installed extension manifests and policy status in the TYPO3 backend

Composer Integration

Warnings during composer require if an extension exceeds the policy thresholds

TER Integration

Surface manifest data in the TYPO3 Extension Repository as extra information when downloading an extension

Installation  

Frequently Asked Questions  

Conclusion  

typo3-capability-manifest is an early concept project, but it addresses a concrete problem: the lack of transparency over what installed TYPO3 extensions actually do. Declarative manifests, machine-readable Risk Scores, and policy-based checks could measurably simplify the security assessment of TYPO3 instances, provided the format becomes an established standard.

Cloudflare's EmDash model for WordPress shows that such an approach can win acceptance, and bringing it to TYPO3 is the logical next step.

Acknowledgements

The concept builds on Cloudflare's EmDash model . Thanks to the TYPO3 security community for their early feedback. The project is licensed under the GPL.

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.