---
title: "Creating a new extension from scratch"
manual: "TYPO3 Explained"
version: "12.4"
permalink: "https://docs.typo3.org/permalink/t3coreapi:extension-create-new@12.4"
source: "ExtensionArchitecture/Kickstarter/FromScratch/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).

# Creating a new extension from scratch {#extension-create-new}

First choose a unique [Composer name](https://getcomposer.org/doc/04-schema.md#name)
and an extension key for your extension.

If you plan to publish your extension in the TYPO3 Extension Repository
(TER), [register an extension key](https://docs.typo3.org/permalink/t3coreapi:extension-key@12.4).

> [!NOTE]
> **See also**
>
> There are different ways to kickstart an extension.
> See [Extension kickstarters](https://docs.typo3.org/permalink/t3coreapi:extension-kickstart@12.4).

-   Create a directory with the extension name
-   Create the [composer.json](https://docs.typo3.org/permalink/t3coreapi:files-composer-json@12.4) file
-   Create the [ext_emconf.php](https://docs.typo3.org/permalink/t3coreapi:ext-emconf-php@12.4) file for Classic mode installations and
    extensions what will be uploaded to TER

## Installing the newly created extension {#installing-the-newly-created-extension}

Since TYPO3 v11 extensions can only be installed
using Composer as part of a Composer-based installation.

However, during development you should test your extension locally
before publishing it. Create the extension directory in the
`packages` directory inside the TYPO3 project root directory.

Then edit your project's [`composer.json`](../../FileStructure/ComposerJson.md#file-extension-composer-json) (The one in the TYPO3 root
directory, **not the one in the extension**) and add the following repository:

**composer.json**

```json
{
    "repositories": [
        {
            "type": "path",
            "url": "packages/*"
        }
    ]
}
```

After that install your extension via Composer:

```bash
composer req my-vendor/my-extension:"@dev"
```

> [!TIP]
> **Hint**
>
> In Classic mode installations put the extension in the
> `typo3conf/ext` directory and then **activate** it in
> **Admin Tools > Extensions**.
