System requirements for running TYPO3

TYPO3 requires a web server, PHP, and a supported database system. Composer is required for Composer-based installations, especially during development.

PHP requirements and configuration

TYPO3 requires PHP with a supported version and specific configuration values and extensions.

Required and optional PHP extensions

Required extensions:

  • pdo
  • session
  • xml
  • filter
  • SPL
  • standard
  • tokenizer
  • mbstring
  • intl

Optional but commonly used:

  • fileinfo – for detecting uploaded file types
  • gd – for image generation and scaling
  • zip – for language packs and extension archives
  • zlib – for output compression
  • openssl – for encrypted SMTP mail delivery

Database-specific PHP extensions

  • pdo_mysql (recommended)
  • or mysqli

MySQL/MariaDB must support the InnoDB engine.

  • pdo_pgsql
  • pgsql
  • sqlite3

Image processing requirements

If you want TYPO3 to automatically process images (e.g. cropping, resizing, thumbnail generation), install one of the following tools on your server:

These tools are used by TYPO3 for features such as image rendering in content elements and backend previews.

Supported web servers and configuration

TYPO3 supports the following web servers, each requiring specific configuration:

Apache web server configuration

TYPO3 includes a .htaccess file with rewrite and security rules.

Apache .htaccess configuration file

This file configures:

  • URL rewriting
  • Security and access control
  • PHP directives
  • MIME types

TYPO3 installs this file automatically. On major upgrades, check for new directives and merge them if needed.

You can check the .htaccess status under:

Admin Tools > Environment > Check Directory Status

Apache virtual host requirements

Your Apache VirtualHost must include:

AllowOverride Indexes FileInfo
Copied!

NGINX web server configuration

NGINX does not support .htaccess files. Configuration must be done at the system level.

Example: /etc/nginx/conf.d/typo3.conf
# TYPO3 - GZIP support for versioned .js and .css files
location ~ \.js\.gzip$ {
    add_header Content-Encoding gzip;
    gzip off;
    types { text/javascript gzip; }
}
location ~ \.css\.gzip$ {
    add_header Content-Encoding gzip;
    gzip off;
    types { text/css gzip; }
}

# TYPO3 - Rewrite versioned static resources
if (!-e $request_filename) {
    rewrite ^/(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ /$1.$3 last;
}

# TYPO3 - Deny access to sensitive files and directories
location ~* composer\.(?:json|lock)$       { deny all; }
location ~* flexform[^.]*\.xml$            { deny all; }
location ~* locallang[^.]*\.(?:xml|xlf)$   { deny all; }
location ~* ext_conf_template\.txt$        { deny all; }
location ~* ext_typoscript_.*\.txt$        { deny all; }
location ~* \.(?:bak|co?nf|cfg|ya?ml|ts|typoscript|tsconfig|dist|fla|in[ci]|log|sh|sql|sqlite)$ {
    deny all;
}
location ~ _(?:recycler|temp)_/            { deny all; }
location ~ fileadmin/(?:templates)/.*\.(?:txt|ts|typoscript)$ { deny all; }
location ~ ^(?:vendor|typo3_src|typo3temp/var) { deny all; }
location ~ (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|docs?)/ {
    deny all;
}

# TYPO3 - Frontend entry point
location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

# TYPO3 - Backend entry point
location = /typo3 {
    rewrite ^ /typo3/;
}
location /typo3/ {
    absolute_redirect off;
    try_files $uri /index.php$is_args$args;
}

# TYPO3 - PHP handler via PHP-FPM
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
    fastcgi_buffer_size 32k;
    fastcgi_buffers 8 16k;
    fastcgi_connect_timeout 240s;
    fastcgi_read_timeout 240s;
    fastcgi_send_timeout 240s;

    fastcgi_pass         php-fpm:9000;
    fastcgi_index        index.php;
    include              fastcgi.conf;
}
Copied!

IIS (Windows) web server configuration

TYPO3 includes a default web.config file for IIS with rewrite rules.

Requirements:

File location:

EXT:install/Resources/Private/FolderStructureTemplateFiles/root-web-config

Using TYPO3 with Docker-based environments

TYPO3 runs well in Docker-based environments. You can combine PHP with Apache or NGINX using official base images.

Recommended base images:

  • Apache: php:8.4-apache
  • NGINX: nginx:stable + php:8.4-fpm

Install required PHP extensions and set suitable PHP configuration.

Dockerfile for Apache with PHP 8.4
FROM php:8.4-apache

# Enable Apache mod_rewrite
RUN a2enmod rewrite

# Install required PHP extensions for TYPO3
RUN apt-get update && apt-get install -y \
    libzip-dev libpng-dev libxml2-dev libonig-dev libicu-dev unzip git \
    && docker-php-ext-install \
    pdo pdo_mysql mysqli intl xml mbstring tokenizer opcache zip gd \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Set recommended PHP settings
COPY php.ini /usr/local/etc/php/

# Document root
WORKDIR /var/www/html
Copied!
Dockerfile for PHP 8.4 with FPM (for NGINX)
FROM php:8.4-fpm

# Install required PHP extensions for TYPO3
RUN apt-get update && apt-get install -y \
    libzip-dev libpng-dev libxml2-dev libonig-dev libicu-dev unzip git \
    && docker-php-ext-install \
    pdo pdo_mysql mysqli intl xml mbstring tokenizer opcache zip gd \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Set recommended PHP settings
COPY php.ini /usr/local/etc/php/

# Document root
WORKDIR /var/www/html
Copied!

See NGINX web server configuration for NGINX configuration.

This image provides PHP-FPM only and is intended to be used together with a separate NGINX container. For guidance on configuring NGINX and PHP-FPM containers to work together, refer to the official Docker documentation:

https://docs.docker.com/samples/php/#nginx--php-fpm

The Dockerfiles reference a php.ini file with recommended settings:

Custom php.ini used in Dockerfiles
memory_limit = 256M
max_execution_time = 240
max_input_vars = 1500
post_max_size = 10M
upload_max_filesize = 10M
pcre.jit = 1
Copied!

Using DDEV for local TYPO3 development

DDEV is a widely used and recommended solution for running TYPO3 projects locally. It provides a preconfigured Docker-based environment with TYPO3- compatible PHP, web server, and database services.

To set up a TYPO3 project with PHP 8.4, run:

ddev config --php-version 8.4 --docroot public --project-type typo3
Copied!

This will generate the necessary configuration and allow you to start the project using:

ddev start
Copied!

DDEV supports Composer-based TYPO3 projects and works on Linux, macOS, and Windows. It is ideal for teams and reproducible local setups.

Supported database systems and required permissions

TYPO3 supports the following relational database systems:

  • MySQL
  • MariaDB
  • PostgreSQL
  • SQLite

Each system has specific configuration and extension requirements. See the list of required PHP extensions for supported databases:

The database user must be granted specific privileges to allow TYPO3 to function correctly.

Required database privileges for TYPO3

Required:

  • SELECT, INSERT, UPDATE, DELETE
  • CREATE, DROP, INDEX, ALTER
  • CREATE TEMPORARY TABLES, LOCK TABLES

Recommended:

  • CREATE VIEW, SHOW VIEW
  • EXECUTE, CREATE ROUTINE, ALTER ROUTINE

SQL mode compatibility

TYPO3 expects compatibility with the default SQL_MODE settings of supported databases.

These SQL modes are tested and supported:

  • STRICT_ALL_TABLES
  • STRICT_TRANS_TABLES
  • ONLY_FULL_GROUP_BY
  • NO_ENGINE_SUBSTITUTION
  • ERROR_FOR_DIVISION_BY_ZERO

The following mode is known to be incompatible:

  • NO_BACKSLASH_ESCAPES

Custom or third-party extensions should be tested individually.

Composer usage in TYPO3 projects

Composer is required for Composer-based TYPO3 installations and is commonly used in modern development workflows.

It is not required for Classic mode installations using the source package.

In production environments, Composer is not needed if the project is deployed using file-based methods (for example Rsync, Deployer).