---
title: "Development"
manual: "Backend Manual"
version: "main"
permalink: "https://docs.typo3.org/permalink/proudnerds/pn-backend-manual:development@main"
source: "Development.rst"
rendered: "2026-10-17T07:19:19+00:00"
---

# Development {#development}

```bash
composer install
.Build/bin/phpunit -c phpunit.xml --testsuite unit
```

The JavaScript is a plain ES module without a build step, registered in
`Configuration/JavaScriptModules.php`. Flush the caches after changing
that file, because the import map is cached. Labels use the translation domain
`pn_backend_manual.messages` (`Resources/Private/Language/messages.xlf`).

| File | Role |
| --- | --- |
| `Widgets\ManualWidget` | The dashboard widget; holds the options |
| `Controller\ManualController` | Full view, route `pn_backend_manual` |
| `Manual\ManualFinder` | Finds a manual among the widgets the user may use |
| `Manual\ManualLoader` | Reads an `EXT:` file, sets up the image resolver for its extension and builds public URLs |
| `Rendering\MarkdownRenderer` | Markdown to title, introduction, body, table of contents with sections, and heading numbers |
| `Rendering\ImageResolver` | Allows only images inside `Resources/Public` |
| `Resources/Public/JavaScript/manual-contents.js` | Marks the current entry in the table of contents of the full view |
| `Resources/Public/JavaScript/manual-print.js` | Opens the print dialog from the print button |
| `Resources/Public/JavaScript/manual-search.js` | Filters the table of contents on the search field |
| `Resources/Public/JavaScript/manual-feedback.js` | Puts a feedback link next to each chapter and section |

> [!NOTE]
> `ManualFinder` uses the dashboard's `WidgetRegistry`, which is marked
> `@internal` in TYPO3 and has no public alternative. It is the only class
> that touches it; check it when updating TYPO3.

## Render this manual {#render-this-manual}

```bash
docker run --rm -v "$(pwd)":/project -w /project \
    ghcr.io/typo3-documentation/render-guides:latest \
    --config=Documentation --no-progress --fail-on-log
```

The output is in `Documentation-GENERATED-temp/Index.html`.
