---
title: "Breaking: #110250 - Remove implicit output buffering from Bootstrap"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-110250-1785315899"
source: "Changelog/15.0/Breaking-110250-RemovedImplicitOutputBufferingFromBootstrap.rst"
typo3-version: "15.0"
typo3-major: 15
type: "breaking"
issue: 110250
forge: "https://forge.typo3.org/issues/110250"
tags: ["PHP-API", "FullyScanned", "ext:core"]
rendered: "2026-10-07T19:18:07+00:00"
---

# Breaking: #110250 - Remove implicit output buffering from Bootstrap {#breaking-110250-1785315899}

See [forge#110250](https://forge.typo3.org/issues/110250)

## Description {#description}

The class `\TYPO3\CMS\Core\Core\Bootstrap` no longer wraps the entire
bootstrap and request lifecycle in an implicit output buffer via
`ob_start()`. This buffer was historically opened as the very first
action in `\TYPO3\CMS\Core\Core\Bootstrap::init()` to swallow accidental stray output
(warnings, notices or stray `echo`/`print` statements, typically
from [`ext_localconf.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtLocalconf.html#file-extension-ext-localconf-php)/[`ext_tables.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtTables.html#file-extension-ext-tables-php) of third-party
extensions) so it would not corrupt AJAX responses or file downloads. On
CLI this buffering was already disabled again in a previous change, as it
delayed console output until the process ended and could bloat memory for
commands producing a lot of output.

Since responses are fully assembled as PSR-7 message bodies before being
emitted, this legacy safety net is not needed anymore.

Along with it, the now unused method
`\TYPO3\CMS\Core\Core\Bootstrap::startOutputBuffering()` has been removed.

## Impact {#impact}

Any stray output produced during bootstrap (for example from
[`ext_localconf.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtLocalconf.html#file-extension-ext-localconf-php)) is now sent to the client directly instead of
being silently discarded later on. This mainly affects binary/file
responses and AJAX requests, which relied on the buffer being cleaned
right before the response body was emitted.

Calling `\TYPO3\CMS\Core\Core\Bootstrap::startOutputBuffering()` now results in a fatal
PHP error (`Call to undefined method`).

## Affected installations {#affected-installations}

TYPO3 installations with extensions that produce accidental output during
[`ext_localconf.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtLocalconf.html#file-extension-ext-localconf-php)/[`ext_tables.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtTables.html#file-extension-ext-tables-php) loading, which so far was
silently swallowed, and installations with custom entry point scripts
calling `\TYPO3\CMS\Core\Core\Bootstrap::startOutputBuffering()` directly.

## Migration {#migration}

Remove any accidental output from [`ext_localconf.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtLocalconf.html#file-extension-ext-localconf-php) and
[`ext_tables.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/ExtTables.html#file-extension-ext-tables-php) files. Extensions that need to suppress their own
output must manage output buffering (`ob_start()` /
`ob_end_clean()`) themselves.

Remove calls to `\TYPO3\CMS\Core\Core\Bootstrap::startOutputBuffering()` and use
`ob_start()` directly, if the behavior is still required.
