---
title: "Extension loading order"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:extension-loading-order@main"
source: "ExtensionArchitecture/BestPractises/ExtensionLoadingOrder.rst"
rendered: "2026-09-19T06:56:03+00:00"
---

# Extension loading order {#extension-loading-order}

In TYPO3, the order in which extensions are loaded can impact system behavior.
This is especially important when an extension overrides, extends, or modifies
the functionality of another. TYPO3 initializes extensions in a defined order,
and if dependencies are not loaded beforehand, it can lead to unintended
behavior.

## Defining the loading order via file composer.json {#extension-loading-order-composer-and-classic}

<!-- TODO: no Markdown rendering for "deprecated" -->

File ext_emconf.php is deprecated, the loading order is
defined in the composer.json file for all installation methods.

Extensions and dependencies are installed based on the configuration in the
[`composer.json`](../FileStructure/ComposerJson.md#file-extension-composer-json) file.

For example, if an extension relies on or modifies functionality provided by
the [`typo3/cms-felogin`](https://packagist.org/packages/typo3/cms-felogin) system extension, the dependency should be defined
as follows:

**Excerpt of EXT:my_extension/composer.json**

```json
{
  "require": {
    "typo3/cms-felogin": "^13.4 || ^14.3"
  }
}

```

This ensures that TYPO3 loads the extension **after** the
[`typo3/cms-felogin`](https://packagist.org/packages/typo3/cms-felogin) system extension.

Instead of `require`, extensions can also use the `suggest` section.
Suggested extensions, if installed, are loaded **before** the current one —
just like required ones — but without being mandatory.

A typical use case is suggesting an extension that provides optional widgets,
such as for [`typo3/cms-dashboard`](https://packagist.org/packages/typo3/cms-dashboard).
