---
title: "Breaking: #107791 - Report interfaces removed"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-107791-1234567890"
source: "Changelog/14.0/Breaking-107791-ReportInterfacesRemoved.rst"
typo3-version: "14.0"
typo3-major: 14
type: "breaking"
issue: 107791
forge: "https://forge.typo3.org/issues/107791"
tags: ["Backend", "PHP-API", "NotScanned", "ext:reports"]
rendered: "2026-09-20T18:31:11+00:00"
---

# Breaking: #107791 - Report interfaces removed {#breaking-107791-1234567890}

See [forge#107791](https://forge.typo3.org/issues/107791)

## Description {#description}

The Reports module has been refactored to use native backend submodules instead
of dynamic service-based report registration. Individual reports are now
registered as proper backend submodules in `Configuration/Backend/Modules.php`.

As a result, the following public interfaces have been removed:

-   `\TYPO3\CMS\Reports\ReportInterface`
-   `\TYPO3\CMS\Reports\RequestAwareReportInterface`

## Impact {#impact}

Extensions that register custom reports by implementing
`\TYPO3\CMS\Reports\ReportInterface` or
`\TYPO3\CMS\Reports\RequestAwareReportInterface` will no longer work.

These reports will no longer appear in the backend Reports module.

## Affected installations {#affected-installations}

TYPO3 installations with custom extensions that provide reports by implementing
`ReportInterface` or
`RequestAwareReportInterface`.

## Migration {#migration}

Custom reports must be migrated to backend submodules.

**Register as a submodule under \`system_reports\`:**

**EXT:my_extension/Configuration/Backend/Modules.php**

```php
use Vendor\MyExtension\Controller\MyReportController;

return [
    'system_reports_myreport' => [
        'parent' => 'system_reports',
        'access' => 'admin',
        'path' => '/module/system/reports/myreport',
        'iconIdentifier' => 'module-reports',
        'labels' => [
            'title' => 'my_extension.messages:myreport.title',
            'description' => 'my_extension.messages:myreport.description',
        ],
        'routes' => [
            '_default' => [
                'target' => MyReportController::class . '::handleRequest',
            ],
        ],
    ],
];
```

The controller should implement a standard PSR-7 request handler that returns a
`\Psr\Http\Message\ResponseInterface` instance.

Alternatively, you can create a standalone module with
`showSubmoduleOverview` enabled if you need to group multiple reports
under your own container module.
