TYPO3 CMS Composer Repository

What Is It?

This is a composer repository, enabling you to install TYPO3 CMS core and extensions including dependencies via Composer. This repository includes TYPO3 CMS extensions:

  • All TYPO3 Extensions that are uploaded to TER including insecure versions.
    • Insecure versions are marked in th extra section with "extra""typo3/ter""reviewstate" = "insecure" in the composer extra section
    • These extensions are all in the typo3-ter/ composer namespace
  • Extension versions from repositories that are provided on typo3.org extension setup
    • These must be repositories that include a composer.json in each release tag
    • The composer name of these releases is determined from the composer.json in these repositories

You can list and search for available extension packages.

How to use it?

As a quick way to use Composer, the Base Distribution can be downloaded. It is assuming you have Composer already installed on your system:

# Download the Base Distribution, the latest "stable" release (6.2)
composer create-project typo3/cms-base-distribution CmsBaseDistribution

# Download the Base Distribution, the "dev" branch (7.x)
composer create-project typo3/cms-base-distribution CmsBaseDistribution dev-master

# Download the Base Distribution, the "dev" 6.2 branch
composer create-project typo3/cms-base-distribution CmsBaseDistribution 6.2.x-dev

As a second step, we are going to add additional packages. The commands must be run from inside the CmsBaseDistribution directory.

# Add a CMS extension into typo3conf/ext.
composer require typo3-ter/news
-> if asked for a version constraint, answer with *.

# Add a package from outside the CMS world into Packages/Libraries
# Notice: Packages/Libraries/autoload.php will need to be included in your code.
composer require monolog/monolog

# Personalize your composer.json file to your needs.
edit composer.json

Using composer to install TYPO3 CMS is fairly simple, you just need to include the custom composer repository into your composer.json. After you have done this, you can require the Core and / or extensions with the usual composer versioning format.

In the example below, this will always get you the most current 7.6.x core of TYPO3 CMS, the most current version of news (including possible dependency!). Pay attention to replace underscores "_" by a dash "-" in the extension key. As example, extension "tt_news" will be "tt-news" in the composer.json.

    "repositories": [
            "type": "composer",
            "url": "https://composer.typo3.org/"
    "require": {
        "typo3/cms": "^7.6.9",
        "typo3-ter/news": "^3.2.5"
    "extra": {
        "typo3/cms": {
            "cms-package-dir": "{$vendor-dir}/typo3/cms",
            "web-dir": "web"

Add your own composer.json file

It is encouraged to add your own composer.json file in your extension to be on the good side, as TYPO3 CMS will rely more and more on Composer to handle dependencies. The file must be placed at the root of your extension and must look like as follows:

    "name": "vendor-name/my-ext-key",
    "type": "typo3-cms-extension",
    "description": "My description comes here",
    "homepage": "https://example.com",
    "license": ["GPL-2.0+"],
    "keywords": ["TYPO3 CMS", "foo bar"],
    "support": {
        "issues": "https://forge.typo3.org/projects/extension-my_ext_key"
    "require": {
        "typo3/cms-core": "^6.2.14 || ^7.6.0"
    "autoload": {
        "psr-4": {
            "VendorName\\MyExtKey\\": "Classes/"
    "replace": {
        "my_ext_key": "self.version",
        "typo3-ter/my-ext-key": "self.version"

The vendor-name must be one of yours. It must not be "typo3" which is reserved for Core extensions. There are some conventions notes available in the TYPO3 Wiki related to namespaces.

How it works?

A few times a day we crawl the TYPO3 Extension Repository and the available core downloads. We process all ext_emconf.php's (of every non un-secure version) to calculate the dependencies. We generate the metadata (packages.json), needed by composer to find the right downloads which will be downloaded from the TER eventually.