---
title: "Extbase: extension framework in TYPO3"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:extbase-reference@main"
source: "ExtensionArchitecture/Extbase/Index.rst"
modified: "2026-09-14T11:10:56+00:00"
---

# Extbase: extension framework in TYPO3

Extbase is the TYPO3 framework for building structured, maintainable extensions.
It provides an object-oriented foundation based on the
[Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
pattern and an
[Object-Relational Mapper (ORM)](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)
that handles persistence for you so that you can work with PHP objects rather than
raw database queries.

Extbase is the natural choice for extensions that revolve around a domain model:
event listings, product catalogues, news feeds, job boards, and any structured
content that editors manage in the backend and visitors browse in the frontend.
It gives you automatic property mapping, built-in validation, clean URL routing,
and a consistent architecture that other TYPO3 developers will immediately
recognise and feel at home with.

This chapter takes you from the first line of code to a fully working extension.
It covers the domain model and repository layer, controllers and views, frontend
plugins and backend modules, routing, validation, persistence, and caching —
with best practices throughout. Whether you are building your first extension
or working through an inherited codebase, you will find both guided walkthroughs
and in-depth reference material here.

## When to use Extbase

Extbase is the right choice when your extension revolves around **structured
data that visitors consume**: event listings, product catalogues, news feeds,
job boards, book reviews — anything that lives in the database and needs to be
browsed, filtered, sorted, or displayed in the frontend. This is where Extbase
excels, and where the investment in a proper domain model pays off quickly.
Extensions like [`georgringer/news`](https://packagist.org/packages/georgringer/news) are proof: a well-built Extbase
extension can serve millions of page views and remain straightforward to
maintain and extend.

Extbase also handles **simple frontend data entry** well — conference
registration, newsletter sign-up, visitor reviews — as long as the data
stays simple. When records have complex relationships, or when editors need to
manage them, that work belongs in a backend module rather than in a frontend form.

## When Extbase is not the right fit

Extbase is not a universal solution. If there is no structured domain to model
— a site package, a collection of content elements, a utility extension — it
adds overhead without benefit. In that case use TYPO3's native APIs directly.

Performance is another limit to keep in mind. Extbase maps every database row to a
PHP object, which is convenient for moderate datasets but becomes a bottleneck
when a single page request pulls in thousands of records. There is no hard
number; it depends on query complexity, relation depth, and how aggressively you
cache — but if you are expecting very large datasets, benchmark early and consider
whether raw database queries or a dedicated search index would serve you better
from the start.

Finally, Extbase requires a full TYPO3 frontend bootstrap and is not the right
fit for middleware, CLI commands, or scheduler tasks. For those, TYPO3's native
APIs are the best choice.

> [!NOTE]
> **See also**
>
> [Core concepts of Extbase](https://docs.typo3.org/permalink/t3coreapi:extbase-concepts@main) explains the MVC pattern and how Extbase
> implements it in detail.
>
> For extension development without Extbase, see
> [Extension development](https://docs.typo3.org/permalink/t3coreapi:extension-architecture@main).
>
> Something not working as expected? See
> [Common pitfalls in Extbase](https://docs.typo3.org/permalink/t3coreapi:extbase-appendix-pitfalls@main) for a list of common
> traps and full explanations.
>
> Know what you want to achieve but not which chapter covers it? See
> [Common tasks in Extbase](https://docs.typo3.org/permalink/t3coreapi:extbase-appendix-tasks@main) for goal-oriented answers with
> links to the full details.

-   [Quick start](https://docs.typo3.org/permalink/t3coreapi:extbase-quickstart@main)
-   [Concepts](https://docs.typo3.org/permalink/t3coreapi:extbase-concepts@main)
    -   [MVC and request flow](https://docs.typo3.org/permalink/t3coreapi:extbase-start-principles@main)
    -   [Persistence and ORM](https://docs.typo3.org/permalink/t3coreapi:extbase-concepts-persistence@main)
-   [Domain](https://docs.typo3.org/permalink/t3coreapi:extbase-domain-subfolders@main)
    -   [Model](https://docs.typo3.org/permalink/t3coreapi:extbase-model@main)
    -   [Repository](https://docs.typo3.org/permalink/t3coreapi:extbase-repository-api@main)
    -   [File upload](https://docs.typo3.org/permalink/t3coreapi:extbase-fileupload@main)
    -   [Data transfer objects](https://docs.typo3.org/permalink/t3coreapi:extbase-dto@main)
    -   [Property types](https://docs.typo3.org/permalink/t3coreapi:extbase-model-property-types@main)
-   [Controller](https://docs.typo3.org/permalink/t3coreapi:extbase-controller@main)
    -   [ActionController](https://docs.typo3.org/permalink/t3coreapi:extbase-action-controller-events@main)
    -   [Property mapping](https://docs.typo3.org/permalink/t3coreapi:extbase-property-mapping@main)
-   [View](https://docs.typo3.org/permalink/t3coreapi:extbase-view@main)
-   [Registration](https://docs.typo3.org/permalink/t3coreapi:extbase-registration@main)
    -   [Frontend plugin](https://docs.typo3.org/permalink/t3coreapi:extbase-registration-of-frontend-plugins@main)
    -   [Backend module](https://docs.typo3.org/permalink/t3coreapi:extbase-examples-user-module@main)
-   [Routing](https://docs.typo3.org/permalink/t3coreapi:extbase-arguments@main)
    -   [Route enhancer](https://docs.typo3.org/permalink/t3coreapi:extbase-routing-enhancer@main)
    -   [Defining routes](https://docs.typo3.org/permalink/t3coreapi:extbase-routing-routes@main)
    -   [Aspects](https://docs.typo3.org/permalink/t3coreapi:extbase-routing-aspects@main)
    -   [UriBuilder](https://docs.typo3.org/permalink/t3coreapi:uri-builder-api@main)
    -   [Routing examples](https://docs.typo3.org/permalink/t3coreapi:extbase-routing-examples@main)
-   [Validation](https://docs.typo3.org/permalink/t3coreapi:extbase-validation-why@main)
    -   [Built-in validators](https://docs.typo3.org/permalink/t3coreapi:extbase-validator-disjunction@main)
    -   [Custom validators](https://docs.typo3.org/permalink/t3coreapi:extbase-domain-validator-request@main)
-   [Persistence](https://docs.typo3.org/permalink/t3coreapi:extbase-start-database-interaction@main)
    -   [Queries](https://docs.typo3.org/permalink/t3coreapi:extbase-persistence-queries@main)
    -   [storagePid](https://docs.typo3.org/permalink/t3coreapi:extbase-persistence-storagepid@main)
    -   [Relations](https://docs.typo3.org/permalink/t3coreapi:extbase-persistence-relations@main)
-   [Caching](https://docs.typo3.org/permalink/t3coreapi:extbase-caching@main)
    -   [Non-cacheable actions](https://docs.typo3.org/permalink/t3coreapi:extbase-caching-noncacheable@main)
    -   [Cache tags](https://docs.typo3.org/permalink/t3coreapi:extbase-caching-cachetags@main)
    -   [Automatic cache clearing](https://docs.typo3.org/permalink/t3coreapi:extbase-caching-autoclearing@main)
-   [Configuration](https://docs.typo3.org/permalink/t3coreapi:extbase-configuration@main)
    -   [Reference](https://docs.typo3.org/permalink/t3coreapi:extbase-typoscript-configuration@main)
-   [Localization](https://docs.typo3.org/permalink/t3coreapi:extbase-localisation@main)
-   [PHP attributes reference](https://docs.typo3.org/permalink/t3coreapi:extbase-attributes-internal@main)
-   [Type converters reference](https://docs.typo3.org/permalink/t3coreapi:extbase-type-converters@main)
-   [Common pitfalls](https://docs.typo3.org/permalink/t3coreapi:extbase-appendix-pitfalls@main)
-   [Common tasks](https://docs.typo3.org/permalink/t3coreapi:extbase-appendix-tasks@main)
-   [Upgrading from older versions](https://docs.typo3.org/permalink/t3coreapi:extbase-upgrading@main)
