Directory structure

The overview below describes the directory structure in a typical Composer-based TYPO3 installation. For the structure in a legacy installation see Legacy installations: Directory structure.

Also see Environment for further information, especially how to retrieve the paths within PHP code.

Files on project level

On the top-most level, the project level, you can find the files composer.json which contains requirements for the TYPO3 installation and the composer.lock which contains information about the concrete installed versions of each package.

Directories in a typical project

config/

TYPO3 configuration directory. This directory contains installation-wide configuration.

config/sites/

The folder config/sites contains subfolders for each site configuration.

local_packages/

Each web site which is run on TYPO3 should have a sitepackage, an extension with a special purpose containing all templates, styles, images, etc. needed for the theme.

It is usually stored locally and then symlinked into the vendor/ folder. Many projects also need custom extensions that can be stored here.

The folder for local packages has to be defined in the project's composer.json to be used:

composer.json
{
    "name": "myvendor/my-project",
    "repositories": {
        "my_local_packages": {
            "type": "path",
            "url": "local_packages/*"
        }
    },
    "...": "..."
}
Copied!

public/

We assume here that your web root points to a folder called public in a Composer-based installation as is commonly done. Otherwise, replace public with the path to your web root.

public/fileadmin/

This is a directory in which editors store files. Typically images, PDFs or video files appear in this directory and/or its subdirectories.

Note this is only the default editor's file storage. This directory is handled via the FAL API internally, there may be further storage locations configured outside of fileadmin/, even pointing to different servers or using 3rd party digital asset management systems.

Depending on the configuration in $GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] another folder name than fileadmin/ can be in use.

public/typo3/

TYPO3 Backend directory. This directory contains most of the files coming with the TYPO3 Core. The files are arranged logically in the different system extensions in the sysext/ directory, according to the application area of the particular file. For example, the "frontend" extension amongst other things contains the "TypoScript library", the code for generating the Frontend website. In each system extension the PHP files are located in the folder Classes/. See extension files locations for more information on how single extensions are structured.

public/typo3conf/

Amongst others, this directory contains the files LocalConfiguration.php and AdditionalConfiguration.php. See chapter Configuration files for details.

public/typo3conf/ext/

Directory for third-party and custom TYPO3 extensions. Each subdirectory contains one extension.

public/typo3temp/

Directory for temporary files. It contains subdirectories (see below) for temporary files of extensions and TYPO3 components.

public/typo3temp/assets/

Directory for temporary files that should be public available (e.g. generated images).

var/

Directory for temporary files that contains private files (e.g. cache and logs files) and should not be publicly available.

var/cache/

This directory contains internal files needed for the cache.

var/labels/

The directory var/labels/ is for extension localizations. It contains all downloaded translation files.

This path can be retrieved from the Environment API, see getLabelsPath().

var/log/

This directory contains log files like the TYPO3 log, the deprecations log and logs generated by extensions.

vendor/

In this directory, which lies outside of the webroot, third-party dependencies that are not TYPO3 extensions are installed.

If optional Composer installers v4 is used, TYPO3 extensions are also installed here.

TYPO3 v11 with Composer installers v4

TYPO3 requires the Composer plugin typo3/cms-composer-installers which takes care of moving extensions to the right folders upon installation: public/typo3/ and public/typo3conf/ext/. TYPO3 v11 uses version 3 of the Composer plugin by default.

With the new major version 4 extensions are installed always in the vendor/ folder. The directory structure of the TYPO3 project is similar to the directory structure of TYPO3 v12. Most notably public assets provided by extensions will be available in public/_assets/.

At time of writing the usage of version 4 is available as release candidate and therefore optional. To use it right now in a TYPO3 v11 installation require the new version in your project's composer.json:

composer req typo3/cms-composer-installers:"^4.0@rc"
Copied!

public/_assets/ (Composer installer v4)

This directory includes symlinks to public resources of extensions, as consequence of this and further structure changes the folder typo3conf/ext/ is not created or used anymore. So all files like CSS, JavaScript, Icons, Fonts, Images, etc. of extensions which are stored in the folder Resources/Public/ are not available anymore directly to the extension folders but linked into the directory _assets/.

vendor/ (Composer installer v4)

In this directory, which lies outside of the webroot, all extensions (system, third-party and custom) are installed as Composer packages.

The directory contains folders for each required vendor and inside each vendor directory there is a folder with the different project names.

For example the system extension core has the complete package name typo3/cms-core and will therefore be installed into the directory vendor/typo3/cms-core. The extension news, package name georgringer/news will be installed into the folder vendor/georgringer/news.

Never put or symlink your extensions manually into this directory as it is managed by Composer and any manual changes are getting lost, for example on deployment. Local extensions and sitepackages should be kept in a separate folder outside the web root, for example local_packages. Upon installation , Composer creates a symlink from local_packages to vendor/myvendor/my-extension.