---
title: "Make"
manual: "TYPO3 Explained"
version: "12.4"
permalink: "https://docs.typo3.org/permalink/t3coreapi:extension-make@12.4"
source: "ExtensionArchitecture/Kickstarter/Make/Index.rst"
rendered: "2026-10-21T15:29:37+00:00"
---

> [!WARNING]
> **Attention**
>
> TYPO3 v12 has reached end-of-life as of April 30th 2026 and
> is no longer being maintained. Use the version switcher on the top
> left of this page to select documentation for a supported version of TYPO3.
>
> Need more time before upgrading?
> You can purchase Extended Long Term Support (ELTS) for TYPO3 v12 here:
> [TYPO3 ELTS](https://typo3.com/services/extended-support-elts).

# Make {#extension-make}

## Kickstart a TYPO3 Extension with "Make" {#extension-make-kickstart}

"[Make](https://github.com/b13/make)" is a TYPO3 extension provided by b13. It features a quick way to create
a basic extension scaffold on the console. The extension is available for TYPO3 v10 and above.

## 1\. Install "Make" {#1-install-make}

In Composer-based TYPO3 installations you can install the
extension via Composer, you should install it as `dev` dependency as
it should not be used on production systems:

**Composer**

```bash
composer req b13/make --dev
```

**DDEV, Composer**

```bash
ddev composer req b13/make --dev
```

**Classic mode installation (no Composer)**

To install the extension on Classic mode installations, download it from the
[TYPO3 Extension Repository (TER), extension
"make"](https://extensions.typo3.org/extension/make/).

## 2\.  Kickstart an extension {#2-kickstart-an-extension}

Call the CLI script on the console:

**Composer**

```bash
vendor/bin/typo3 make:extension
```

**DDEV, Composer**

```bash
ddev exec vendor/bin/typo3 make:extension
```

**Classic mode installation (No Composer)**

```bash
typo3/sysext/core/bin/typo3 make:extension
```

## 3\.  Answer the prompt {#3-answer-the-prompt}

"Make" will now answer some questions that we describe here in-depth:

-   **`Enter the composer package name (e.g. "vendor/awesome"):`**

    A valid composer package name is defined in the
    [getcomposer name scheme](https://getcomposer.org/doc/04-schema.md#name).

    The vendor **should** be a unique name that is not yet used by other
    companies or developers.

    Example: `my-vendor/my-test`

-   **`Enter the extension key [my_test]:`**

    The extension key **should** follow the rules for best practises on
    [choosing an extension key](https://docs.typo3.org/permalink/t3coreapi:extension-key@12.4) if you plan to publish
    your extension. In most cases, the default, here `my_test`, is sufficient.
    Press `enter` to accept the default or enter another name.

-   **`Enter the PSR-4 namespace [T3docs/MyTest]:`**

    The namespace has to be unique within the project. Usually the default
    should be unique, as your vendor is unique, and you can accept it by
    pressing `enter`.

-   **`Choose supported TYPO3 versions (comma separate for multiple) [TYPO3 v11 LTS]:`**

    If you want to support both TYPO3 v11 and v12, enter the following:
    `11,12`

-   **`Enter a description of the extension:`**

    A description is mandatory. You can change it later in the file
    [`composer.json`](../../FileStructure/ComposerJson.md#file-extension-composer-json) of the extension.

-   **`Where should the extension be created? [src/extensions/]:`**

    If you have a special path for installing local extensions like
    `packages` enter it here. Otherwise you can accept the
    default.

-   **`May we add a basic service configuration for you? (yes/no) [yes]:`**

    If you choose `yes` "Make" will create a basic
    [`Configuration/Services.yaml`](../../FileStructure/Configuration/ServicesYaml.md#file-extension-configuration-services-yaml) to configure [dependency injection](https://docs.typo3.org/permalink/t3coreapi:dependencyinjection@12.4).

-   **`May we create a ext_emconf.php for you? (yes/no) [no]:`**

    Mandatory for extensions supporting TYPO3 v10. Starting with v11:
    If your extension should be installable in Classic mode TYPO3 installations
    choose `yes`. This is not necessary for local extensions in Composer-based
    installations.

## 4\.  Have a look at the result {#4-have-a-look-at-the-result}

"Make" created a subfolder under `src/extensions` with the
composer name (without vendor) of your extension. By default, it contains
the following files:

**Page tree of directory `src/extensions`**

```none
$ tree src/extensions
└── my-test
    ├── Classes
    ├── Configuration
    |   └── Services.yaml (optional)
    ├── composer.json
    └── ext_emconf.php (optional)
```

## 5\. Install the extension {#5-install-the-extension}

On Composer-based installations the extension is not installed yet.
It will not be displayed in the **Extension Manager** in the backend.

To install it, open the main [`composer.json`](../../FileStructure/ComposerJson.md#file-extension-composer-json) of your **project** (not the
one in the created extension) and add the extension directory as new repository:

**my_project_root/composer.json**

```json
{
    "name": "my-vendor/my-project",
    "repositories": {
        "0_packages": {
            "type": "path",
            "url": "src/extensions/*"
        }
    },
    "...": "..."
}
```

Then require the extension on Composer-based systems, using the composer
name defined in the prompt of the script:

**Composer**

```bash
composer req t3docs/my-test:@dev
```

**DDEV, Composer**

```bash
ddev composer req my-vendor/my-test:@dev
```

**Classic mode installation (No Composer)**

Activate the extension in the Extension Manager.

## 6\.  Add functionality {#6-add-functionality}

The following additional commands are available to add more functionality
to your extension:

-   `make:backendcontroller`  \- [Create a new backend controller](https://docs.typo3.org/permalink/t3coreapi:extension-make-backend-controller@12.4)
-   `make:command` \- [Create a new command](https://docs.typo3.org/permalink/t3coreapi:extension-make-console-command@12.4)
-   `make:eventlistener` \- Create a new event listener
-   `make:middleware` \- Create a new middleware

## Read more: {#read-more}

-   [Create a new backend controller](https://docs.typo3.org/permalink/t3coreapi:create-a-new-backend-controller@12.4)
-   [Create a new console command](https://docs.typo3.org/permalink/t3coreapi:create-a-new-console-command@12.4)
