---
title: "The concepts behind TYPO3 extensions"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:extension-architecture-introduction@main"
source: "ExtensionArchitecture/Concepts/Index.rst"
rendered: "2026-09-18T10:16:27+00:00"
---

# The concepts behind TYPO3 extensions {#the-concepts-behind-typo3-extensions}

The **TYPO3 CMS is built entirely out of extensions**. The Core consists of
"system extensions" — some mandatory, others optional.

Thousands of extensions are available in the
[TYPO3 Extension Repository (TER)](https://extensions.typo3.org/),
and many more are hosted on platforms like [GitHub](https://github.com/).

And for Composer-based setups, TYPO3 can pull in any PHP packages from
[Packagist](https://packagist.org/).

Extensions allow TYPO3 to be extended in unlimited directions due to the robust
TYPO3 Extension API - and without compromising backward compatibility.

## System extensions {#system-extensions}

System extensions deliver TYPO3 core functionality. They have the Composer
type `typo3-cms-framework`.

In classic mode installations you can find them in the
`typo3/sysext` directory.

These are the most important ones:

-   **[`typo3/cms-core`](https://packagist.org/packages/typo3/cms-core)**

    Defines essential database tables (e.g., BE users, groups, pages, sys\_\*) and
    default global configuration
    (`core/Configuration/DefaultConfiguration.php`). It also provides a
    large set of PHP base classes.

-   **[`typo3/cms-backend`](https://packagist.org/packages/typo3/cms-backend)**

    Powers the TYPO3 backend interface including controllers, PHP classes, and
    the Fluid templates needed to operate the admin environment.

-   **[`typo3/cms-frontend`](https://packagist.org/packages/typo3/cms-frontend)**

    Handles frontend rendering. Key components include content object classes
    in `frontend/Classes/ContentObject`, which provide output for
    content types.

-   **[`typo3/cms-extbase`](https://packagist.org/packages/typo3/cms-extbase)**

    TYPO3’s MVC framework. Provides structure for extensions. Works alongside
    Fluid, which handles the "View" layer.

-   **[`typo3/cms-fluid`](https://packagist.org/packages/typo3/cms-fluid)**

    A standalone templating engine and the "View" in MVC. This extension
    includes templating logic and many ViewHelpers
    (`fluid/Classes/ViewHelpers`) for building flexible and reusable templates.

-   **[`typo3/cms-install`](https://packagist.org/packages/typo3/cms-install)**

    Contains the Install Tool, which is used for system setup, upgrades, and configuration.

> [!TIP]
> You can use [Composer Helper on get.typo3.org](https://get.typo3.org/misc/composer/helper)
> to generate a Composer command. Choose between default, minimal, or full TYPO3 installation presets,
> select optional individual packages and specify your desired TYPO3 version.

## Scope of extensions: system, third-party or custom {#scope-of-extensions-system-third-party-or-custom}

Extension files are installed in the`vendor/`
folder by Composer. See also [vendor/](https://docs.typo3.org/permalink/t3coreapi:directory-vendor@main).

In Classic mode installations they are found in [typo3/sysext/](https://docs.typo3.org/permalink/t3coreapi:classic-directory-typo3-sysext@main)
(system extensions) or [typo3conf/ext/](https://docs.typo3.org/permalink/t3coreapi:classic-directory-typo3conf-ext@main) (third-party
and custom extensions).

### Third-party and custom extensions {#third-party-and-custom-extensions}

Third-party and custom extensions must have Composer type `typo3-cms-extension`:

**EXT:my_extension/composer.json**

```json
{
    "name": "myvendor/my-extension",
    "type": "typo3-cms-extension",
    "...": "..."
}
```

The extension will be installed in the [vendor/](https://docs.typo3.org/permalink/t3coreapi:directory-vendor@main)
directory by Composer. Custom extensions like sitepackages
or extensions planned to be used in just one project can be kept under version
control in a directory like [packages/](https://docs.typo3.org/permalink/t3coreapi:directory-packages@main). They are then
symlinked into `vendor/` by Composer.

In Classic mode installations third-party extensions are installed into
[typo3conf/ext/](https://docs.typo3.org/permalink/t3coreapi:classic-directory-typo3conf-ext@main). Custom extensions can be kept in a
directory outside of the project root and symlinked into `typo3conf/ext/`
or manually inserted in the directory.

### System extensions {#system-extensions-1}

System extensions have Composer type `typo3-cms-framework`:

**EXT:core/composer.json**

```json
{
    "name": "typo3/cms-core",
    "type": "typo3-cms-framework",
    "...": "..."
}
```

Composer installs TYPO3 extensions (including system extensions) in the
[vendor/](https://docs.typo3.org/permalink/t3coreapi:directory-vendor@main) directory.

In Classic mode installations they are installed in
[typo3/sysext/](https://docs.typo3.org/permalink/t3coreapi:classic-directory-typo3-sysext@main).
