---
title: "Extensions"
manual: "Getting Started"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3start:concepts-extensions@main"
source: "Concepts/Extensions/Index.rst"
modified: "2026-09-15T08:44:38+00:00"
---

# Extensions

Extensions are pieces of software developed by the TYPO3 community that extend
the functionality of a TYPO3 installation. Extensions come in many forms.
Some are only used for one site and contain mainly the theme of that site.
These extensions are called a [site package](https://docs.typo3.org/permalink/t3start:creating-a-site-package@main).

-   [Extensions as Composer packages](https://docs.typo3.org/permalink/t3start:extensions-as-composer-packages@main)
-   [Extension vs plugin](https://docs.typo3.org/permalink/t3start:extension-vs-plugin@main)
-   [Types of extensions](https://docs.typo3.org/permalink/t3start:types-of-extensions@main)

## Extensions as Composer packages

If you have worked with other PHP based projects you have probably run across
[Composer packages](https://dev.to/joemoses33/create-a-composer-package-how-to-29kn).

Each TYPO3 extension is a Composer package of type `typo3-cms-extension`.
Extensions provided by the TYPO3 Core have type `typo3-cms-framework`.

The minimum needed to define a TYPO3 extension is:

A directory containing a file called `composer.json` with at least
the following data:

**packages/my_extension/composer.json**

```yaml
{
    "name": "myvendor/my-extension",
    "type": "typo3-cms-extension",
    "require": {
        "typo3/cms-core": "^14",
    },
    "extra": {
        "typo3/cms": {
            "extension-key": "my_extension"
        }
    }
}
```

In order to be used the Extension should be
[installed via Composer](https://docs.typo3.org/permalink/t3start:installing-extensions@main).

There is a legacy way to
[install extensions without Composer](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Administration/ExtensionManagement/ClassicMode/Index.html#extensions-legacy-management) but it
is not recommended anymore and not covered in this Guide. For this legacy way of
installation as well as for functional tests or to publish your extension your
need a file called [ext_emconf.php](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/404.html#ext_emconf-php). This topic
is also not covered here.

## Extension vs plugin

A TYPO3 extension is a similar concept to what is called a "Plugin" in WordPress.

In TYPO3 a **plugin** is a **content element** that can be inserted into one or
all pages, typically providing dynamic or interactive functionality.

The data to be displayed is usually supplied by a special PHP class called a
"controller".

One **TYPO3 extension** can provide several plugins - or none at all.

See also: [Plugins in TYPO3 (TYPO3 explained)](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/ContentElements/Index.html#plugins).

Therefore in TYPO3 extensions and plugins are different concepts.

## Types of extensions

Internally the TYPO3 Core consists of mandatory and optional **system extensions**
each of them is a Composer package. All mandatory system extensions and a few
recommended ones will be automatically installed during the
[Installation](https://docs.typo3.org/permalink/t3start:installation-ddev-tutorial@main). Optional system
extensions can be installed via Composer or the Extension Manager in classic mode

**Third party extensions** offer additional functionality. Find commonly used
extensions in the list of
[Recommended Extensions](https://docs.typo3.org/permalink/t3start:recommended-extensions@main). There are
extensions available for many different use cases, see also chapter
[How to find extensions](https://docs.typo3.org/permalink/t3start:how-to-find-extensions@main).

A **site package** is an extension that you install locally and only in your
project. It contains the templates and assets as well as configuration for your
theme. It can also contain specialized plugins or other pieces of software used
only in this one project.
