---
title: "Deprecation: #106947 - Move upgrade wizard related interfaces and attribute to EXT:core"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:deprecation-106947-1750759241"
source: "Changelog/14.0/Deprecation-106947-MoveUpgradeWizardRelatedInterfacesAndAttributeToEXTcore.rst"
typo3-version: "14.0"
typo3-major: 14
type: "deprecation"
issue: 106947
forge: "https://forge.typo3.org/issues/106947"
tags: ["PHP-API", "FullyScanned", "ext:install"]
rendered: "2026-09-20T18:31:11+00:00"
---

# Deprecation: #106947 - Move upgrade wizard related interfaces and attribute to `EXT:core` {#deprecation-106947-1750759241}

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

## Description {#description}

`EXT:install` provided a couple of interfaces to allow implementing upgrade
wizards, along with the PHP attribute `#[UpgradeWizard(...)]` to
register them.

Since TYPO3 v13 it is possible to run TYPO3 without `EXT:install` being
installed. However, this advantage could often not be utilised sensibly,
since extensions still needed to require `EXT:install` as a dependency in
order to ship upgrade wizards, because the implemented interfaces needed to
be available.

For this reason the following interfaces, classes and attributes are now moved
into `EXT:core`, and their former counterparts in `EXT:install` now extend
these Core classes:

-   Attribute `\TYPO3\CMS\Install\Attribute\UpgradeWizard` to
    `\TYPO3\CMS\Core\Attribute\UpgradeWizard`
-   Interface `\TYPO3\CMS\Install\Updates\ChattyInterface` to
    `\TYPO3\CMS\Core\Upgrades\ChattyInterface`
-   Interface `\TYPO3\CMS\Install\Updates\ConfirmableInterface` to
    `\TYPO3\CMS\Core\Upgrades\ConfirmableInterface`
-   Interface `\TYPO3\CMS\Install\Updates\PrerequisiteInterface` to
    `\TYPO3\CMS\Core\Upgrades\PrerequisiteInterface`
-   Interface `\TYPO3\CMS\Install\Updates\RepeatableInterface` to
    `\TYPO3\CMS\Core\Upgrades\RepeatableInterface`
-   Interface `\TYPO3\CMS\Install\Updates\UpgradeWizardInterface` to
    `\TYPO3\CMS\Core\Upgrades\UpgradeWizardInterface`
-   Class `\TYPO3\CMS\Install\Updates\Confirmation` to
    `\TYPO3\CMS\Core\Upgrades\Confirmation`
-   Class `\TYPO3\CMS\Install\Updates\DatabaseUpdatedPrerequisite`
    to `\TYPO3\CMS\Core\Upgrades\DatabaseUpdatedPrerequisite`
-   Class `\TYPO3\CMS\Install\Updates\ReferenceIndexUpdatedPrerequisite`
    to `\TYPO3\CMS\Core\Upgrades\ReferenceIndexUpdatedPrerequisite`
-   AbstractClass `\TYPO3\CMS\Install\Updates\AbstractListTypeToCTypeUpdate`
    to `\TYPO3\CMS\Core\Upgrades\AbstractListTypeToCTypeUpdate`

The following internal class has been moved without an alternative:

-   Class :php`TYPO3CMSInstallUpdatesPrerequisiteCollection`
    to `\TYPO3\CMS\Core\Upgrades\PrerequisiteCollection`

Extension authors are encouraged to migrate their upgrade wizards to the new
core interface, in order to drop their dependency on `EXT:install`.

> [!NOTE]
> `EXT:install` is still required to execute upgrade wizards either on CLI
> or within the TYPO3 Install Tool interface, even when switching to the
> new `EXT:core` interfaces. Moving `typo3 upgrade:*` commands is planned
> for TYPO3 v14 LTS.

> [!NOTE]
> Note that not only "Install" is replaced with "Core", but also "Updates"
> renamed to "Upgrades" to keep a consistent naming scheme.

## Impact {#impact}

Using the listed interfaces and the attribute in the scope of `EXT:core` allow extension
authors to optionally provide their extension upgrade wizards.
`EXT:install` can then be set as a "suggested" dependency, and is no longer
required to be mandatory.

The usage of these old interfaces from `EXT:install` is now deprecated.

## Affected installations {#affected-installations}

Installations missing `EXT:install` or having extensions providing upgrade wizards
using the old namespace.

## Migration {#migration}

Upgrade custom upgrade wizards to use the new attribute, interfaces
and/or classes from the `EXT:core` namespace, instead of `EXT:install`:

### Upgrade Wizard {#upgrade-wizard}

#### Before {#before}

**EXT:my_extension/Classes/Upgrades/CustomUpgradeWizard.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\Upgrades;

use TYPO3\CMS\Install\Attribute\UpgradeWizard;
use TYPO3\CMS\Install\Updates\ChattyInterface;
use TYPO3\CMS\Install\Updates\ConfirmableInterface;
use TYPO3\CMS\Install\Updates\RepeatableInterface;
use TYPO3\CMS\Install\Updates\UpgradeWizardInterface;

#[UpgradeWizard('myExtensionCustomUpgradeWizardIdentifier')]
class CustomUpgradeWizard implements UpgradeWizardInterface, ChattyInterface, RepeatableInterface
{
    // ...
}
```

#### After {#after}

**EXT:my_extension/Classes/Upgrades/CustomUpgradeWizard.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\Upgrades;

use TYPO3\CMS\Core\Attribute\UpgradeWizard;
use TYPO3\CMS\Core\Upgrades\ChattyInterface;
use TYPO3\CMS\Core\Upgrades\ConfirmableInterface;
use TYPO3\CMS\Core\Upgrades\RepeatableInterface;
use TYPO3\CMS\Core\Upgrades\UpgradeWizardInterface;

#[UpgradeWizard('myExtensionCustomUpgradeWizardIdentifier')]
class CustomUpgradeWizard implements UpgradeWizardInterface, ChattyInterface, RepeatableInterface
{
    // ...
}
```

### AbstractListTypeToCTypeUpdate {#abstractlisttypetoctypeupdate}

The abstract upgrade wizard `\TYPO3\CMS\Install\Updates\AbstractListTypeToCTypeUpdate`
has been introduced in 13.4 and is quite young, but needed to be moved to `EXT:core` to
provide implementing upgrade wizards utilizing this base class.

> [!NOTE]
> Any extension that utilizes this abstract needs to require at least TYPO3 v14.0
> when using the new base class.

#### Before {#before-1}

**EXT:my_extension/Classes/Upgrades/CustomCTypeMigration.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\Upgrades;

use TYPO3\CMS\Core\Attribute\UpgradeWizard;
use TYPO3\CMS\Install\Updates\AbstractListTypeToCTypeUpdate;

#[UpgradeWizard('CustomCTypeMigration')]
final class CustomCTypeMigration extends AbstractListTypeToCTypeUpdate
{
    // ...
}
```

#### After {#after-1}

**EXT:my_extension/Classes/Upgrades/CustomCTypeMigration.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\Upgrades;

use TYPO3\CMS\Core\Attribute\UpgradeWizard;
use TYPO3\CMS\Core\Upgrades\AbstractListTypeToCTypeUpdate;

#[UpgradeWizard('CustomCTypeMigration')]
final class CustomCTypeMigration extends AbstractListTypeToCTypeUpdate
{
    // ...
}
```

### EXT:install prerequisite {#ext-install-prerequisite}

Using the prerequisite classes from the `EXT:install` namespace
(using their compatibility alias) can be kept for the time being,
if an extension needs to provide support for two major TYPO3 versions:

**TYPO3 v13 and v14 dual version support.**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\Upgrades;

use TYPO3\CMS\Core\Attribute\UpgradeWizard;
use TYPO3\CMS\Core\Upgrades\ChattyInterface;
use TYPO3\CMS\Core\Upgrades\ConfirmableInterface;
use TYPO3\CMS\Core\Upgrades\RepeatableInterface;
use TYPO3\CMS\Core\Upgrades\UpgradeWizardInterface;
use TYPO3\CMS\Install\Updates\DatabaseUpdatedPrerequisite;
use TYPO3\CMS\Install\Updates\ReferenceIndexUpdatedPrerequisite;

#[UpgradeWizard('myExtensionCustomUpgradeWizardIdentifier')]
class CustomUpgradeWizard implements UpgradeWizardInterface, ChattyInterface, RepeatableInterface
{
    /**
     * @return string[] All new fields and tables must exist
     */
    public function getPrerequisites(): array
    {
        return [
            DatabaseUpdatedPrerequisite::class,
            ReferenceIndexUpdatedPrerequisite::class,
        ];
    }
}
```

**TYPO3 v14 and newer use core classes**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\Upgrades;

use TYPO3\CMS\Core\Attribute\UpgradeWizard;
use TYPO3\CMS\Core\Upgrades\ChattyInterface;
use TYPO3\CMS\Core\Upgrades\ConfirmableInterface;
use TYPO3\CMS\Core\Upgrades\RepeatableInterface;
use TYPO3\CMS\Core\Upgrades\UpgradeWizardInterface;
use TYPO3\CMS\Core\Upgrades\DatabaseUpdatedPrerequisite;
use TYPO3\CMS\Core\Upgrades\ReferenceIndexUpdatedPrerequisite;

#[UpgradeWizard('myExtensionCustomUpgradeWizardIdentifier')]
class CustomUpgradeWizard implements UpgradeWizardInterface, ChattyInterface, RepeatableInterface
{
    /**
     * @return string[] All new fields and tables must exist
     */
    public function getPrerequisites(): array
    {
        return [
            DatabaseUpdatedPrerequisite::class,
            ReferenceIndexUpdatedPrerequisite::class,
        ];
    }
}
```
