ext_emconf.php

required in legacy installations, for functional tests and to upload an extension to the TER (TYPO3 Extension Repository)

ext_emconf.php

ext_emconf.php
Scope
extension
Path (Composer)
packages/my_extension/ext_emconf.php
Path (Classic)
typo3conf/ext/my_extension/ext_emconf.php

The ext_emconf.php is used in classic installations not based on Composer to supply information about an extension in the Admin Tools > Extensions module. In these installations the ordering of installed extensions and their dependencies are loaded from this file as well.

It is also needed for Writing functional tests with the typo3/testing-framework <https://github.com/TYPO3/testing-framework> in v8 and earlier.

In Composer-based installations, the ordering of installed extensions and their dependencies is loaded from the composer.json file, instead of ext_emconf.php

The only content included is an associative array, $EM_CONF[extension key]. The keys are described in the table below.

This file is overwritten when extensions are imported from the online repository. So do not write your custom code into this file - only change values in the $EM_CONF array if needed.

Example:

packages/my_extension/ext_emconf.php
<?php

$EM_CONF[$_EXTKEY] = [
    'title' => 'Extension title',
    'description' => 'Extension description',
    'category' => 'plugin',
    'author' => 'John Doe',
    'author_email' => 'john.doe@example.org',
    'author_company' => 'some company',
    'state' => 'stable',
    'version' => '1.0.0',
    'constraints' => [
        'depends' => [
            'typo3' => '13.4.0-13.4.99',
        ],
        'conflicts' => [
        ],
        'suggests' => [
        ],
    ],
];
Copied!

title

title
Type
string, required

The name of the extension in English.

description

description
Type
string, required

Short and precise description in English of what the extension does and for whom it might be useful.

version

version
Type
string

Version of the extension. Automatically managed by extension manager / TER. Format is [int].[int].[int]

category

category
Type
string

Which category the extension belongs to:

be
Backend (Generally backend-oriented, but not a module)
module
Backend modules (When something is a module or connects with one)
fe
Frontend (Generally frontend oriented, but not a "true" plugin)
plugin
Frontend plugins (Plugins inserted as a "Insert Plugin" content element)
misc
Miscellaneous stuff (Where not easily placed elsewhere)
services
Contains TYPO3 services
templates
Contains website templates
example
Example extension (Which serves as examples etc.)
doc
Documentation (e.g. tutorials, FAQ's etc.)
distribution
Distribution, an extension kick starting a full site

constraints

constraints
Type
array

List of requirements, suggestions or conflicts with other extensions or TYPO3 or PHP version. Here is how a typical setup might look:

packages/my_extension/ext_emconf.php
<?php

$EM_CONF[$_EXTKEY] = [
    'title' => 'Extension title',
    // ...
    'constraints' => [
        'depends' => [
            'typo3' => '13.4.0-13.4.99',
            'php' => '8.2.0-8.4.99',
        ],
        'conflicts' => [
            'tt_news' => '',
        ],
        'suggests' => [
            'news' => '12.1.0-12.99.99',
        ],
    ],
];
Copied!
depends
List of extensions that this extension depends on. Extensions defined here will be loaded before the current extension.
conflicts
List of extensions which will not work with this extension.
suggests
List of suggestions of extensions that work together or enhance this extension. Extensions defined here will be loaded before the current extension. Dependencies take precedence over suggestions. Loading order especially matters when overriding TCA or SQL of another extension.

The above example indicates that the extension depends on a version of TYPO3 between 13.4 and 13.4.x (as only bug and security fixes are integrated into TYPO3 when the last digit of the version changes, it is safe to assume it will be compatible with any upcoming version of the corresponding branch, thus .99). Also the extension has been tested and is known to work properly with PHP 8.2. to 8.4 It will conflict with "tt_news" (any version) and it is suggested that it might be worth installing "news" (version at least 12.1.0). Be aware that you should add at least the TYPO3 and PHP version constraints to this file to make sure everything is working properly.

For legacy installations, the ext_emconf.php file is the source of truth for required dependencies and the loading order of active extensions.

state

state
Type
string

Which state is the extension in

alpha
Alpha state is used for very initial work, basically the extension is during the very process of creating its foundation.
beta
Under current development. Beta extensions are functional, but not complete in functionality.
stable
Stable extensions are complete, mature and ready for production environment. Authors of stable extensions carry a responsibility to maintain and improve them.
experimental
Experimental state is useful for anything experimental - of course. Nobody knows if this is going anywhere yet... Maybe still just an idea.
test
Test extension, demonstrates concepts, etc.
obsolete
The extension is obsolete or deprecated. This can be due to other extensions solving the same problem but in a better way or if the extension is not being maintained anymore.
excludeFromUpdates
This state makes it impossible to update the extension through the Extension Manager (neither by the update mechanism, nor by uploading a newer version to the installation). This is very useful if you made local changes to an extension for a specific installation and do not want any administrator to overwrite them.

author

author
Type
string

Author name

author_email

author_email
Type
email address

Author email address

author_company

author_company
Type
string

Author company

autoload

autoload
Type
array

To get better class loading support for websites in legacy mode the following information can be provided.

Extensions using namespaces and following PSR 4

If the extension has namespaced classes following the PSR-4 standard, then you can add the following to your ext_emconf.php file:

packages/my_extension/ext_emconf.php
<?php

$EM_CONF[$_EXTKEY] = [
    'title' => 'Extension title',
    // ...
    'autoload' => [
        'psr-4' => [
            // The prefix must end with a backslash
            'Vendor\\ExtName\\' => 'Classes',
        ],
    ],
];
Copied!

Extensions having one folder with classes or single files

It is not recommended but possible to use different name space schemes or no namespace at all.

Considering you have an extension where all classes and interfaces reside in a Classes folder or single classes you can add the following to your ext_emconf.php file:

packages/my_extension/ext_emconf.php
<?php

$EM_CONF[$_EXTKEY] = [
    'title' => 'Extension title',
    // ...
    'autoload' => [
        'classmap' => [
            'Classes',
            'a-class.php',
        ],
    ],
];
Copied!

autoload-dev

autoload-dev
Type
array

Same as the configuration "autoload" but it is only used if the ApplicationContext is set to Testing.