Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
dirnbauer avatar

Typo3 Fractor

  • 32 installs
  • 33 repo stars
  • Updated July 27, 2026
  • dirnbauer/webconsulting-skills

Run and configure Fractor to migrate non-PHP TYPO3 files like FlexForms, TypoScript, and Fluid toward v14, alongside Rector for PHP.

About

This skill automates non-PHP TYPO3 upgrade migrations with Fractor for FlexForms, TypoScript, Fluid, YAML, and composer.json. A developer uses it when running or configuring Fractor to modernize non-PHP files toward TYPO3 v14.

  • Automates non-PHP TYPO3 migrations: FlexForms, TypoScript, Fluid, YAML, Htaccess
  • Complements Rector, which handles PHP, for complete v14 upgrades

Typo3 Fractor by the numbers

  • 32 all-time installs (skills.sh)
  • Ranked #3,359 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dirnbauer/webconsulting-skills --skill typo3-fractor

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs32
repo stars33
Last updatedJuly 27, 2026
Repositorydirnbauer/webconsulting-skills

What it does

Run and configure Fractor to migrate non-PHP TYPO3 files like FlexForms, TypoScript, and Fluid toward v14, alongside Rector for PHP.

Files

SKILL.mdMarkdownGitHub ↗

TYPO3 Fractor Skill

Source: https://github.com/dirnbauer/webconsulting-skills

Fractor is a generic file refactoring tool that automates non-PHP migrations for TYPO3 upgrades. It complements Rector (which handles PHP) by migrating FlexForms, TypoScript, Fluid templates, YAML, Htaccess files, and composer.json.

Target: TYPO3 v14.x for this skill collection. Upstream Fractor sets may still be named TYPO3_12, TYPO3_13, etc. — those are historical bundle identifiers for rules you apply while moving code toward a v14 codebase.

TYPO3 API First: Always use TYPO3's built-in APIs, core features, and established conventions before creating custom implementations. Always verify that the APIs and methods you use exist and are not deprecated in TYPO3 v14 by checking the official TYPO3 documentation.
Safety: Never run Fractor on production. Always run on a development environment with version control. Review and test changes before releasing.

Fractor vs Rector

ToolHandlesPackage
RectorPHP code (classes, TCA PHP, ext_localconf, etc.)ssch/typo3-rector
FractorNon-PHP files (FlexForms, TypoScript, Fluid, YAML, Htaccess, composer.json)a9f/typo3-fractor

Use both together for complete TYPO3 upgrades. See the typo3-extension-upgrade skill for the full workflow.

1. Installation

composer require --dev a9f/typo3-fractor
# or with DDEV:
ddev composer require --dev a9f/typo3-fractor
Important: Like Rector, Fractor loads the project autoloader and requires a PHP version
that can parse the installed TYPO3 packages. For TYPO3 v14 targets, run Fractor with
PHP 8.2+. Use DDEV or a container if your local PHP is older.
Always run Fractor, never skip it. Non-PHP files (FlexForms, TypoScript, Fluid) contain
version-specific patterns that are easy to miss in manual review. Fractor rules are
maintained by the TYPO3 community and cover edge cases.

This meta-package installs all TYPO3-specific file processors:

  • a9f/fractor (core engine)
  • a9f/fractor-xml (FlexForm/XML processing)
  • a9f/fractor-fluid (Fluid template processing)
  • a9f/fractor-typoscript (TypoScript/TSconfig processing)
  • a9f/fractor-yaml (YAML processing)
  • a9f/fractor-htaccess (Htaccess processing)
  • a9f/fractor-composer-json (composer.json processing — not installed as a dependency of a9f/typo3-fractor; add composer require --dev a9f/fractor-composer-json if you need it)

2. Configuration

Quick Start

Generate a default config:

vendor/bin/typo3-fractor-init

Manual Configuration

Create fractor.php in your project root:

<?php
declare(strict_types=1);

use a9f\Fractor\Configuration\FractorConfiguration;
use a9f\Typo3Fractor\Set\Typo3LevelSetList;

return FractorConfiguration::configure()
    ->withPaths([
        __DIR__ . '/packages/',
    ])
    ->withSets([
        Typo3LevelSetList::UP_TO_TYPO3_14,
    ]);

Configuration for v14

<?php
declare(strict_types=1);

use a9f\Fractor\Configuration\FractorConfiguration;
use a9f\Typo3Fractor\Set\Typo3LevelSetList;

return FractorConfiguration::configure()
    ->withPaths([
        __DIR__ . '/Configuration/',
        __DIR__ . '/Resources/',
    ])
    ->withSets([
        Typo3LevelSetList::UP_TO_TYPO3_14,
    ]);

Skip Rules or Files

<?php
declare(strict_types=1);

use a9f\Fractor\Configuration\FractorConfiguration;
use a9f\Typo3Fractor\Set\Typo3LevelSetList;
use a9f\Typo3Fractor\TYPO3v12\FlexForm\MigrateRequiredFlagFlexFormFractor;

return FractorConfiguration::configure()
    ->withPaths([__DIR__ . '/packages/'])
    ->withSkip([
        MigrateRequiredFlagFlexFormFractor::class,
        __DIR__ . '/packages/legacy_ext/',
        __DIR__ . '/packages/my_ext/Resources/Private/Templates/Old.html' => [
            \a9f\Typo3Fractor\TYPO3v14\Fluid\ChangeLogoutHandlingInFeLoginFractor::class,
        ],
    ])
    ->withSets([
        Typo3LevelSetList::UP_TO_TYPO3_14,
    ]);

Apply Single Rules

<?php
declare(strict_types=1);

use a9f\Fractor\Configuration\FractorConfiguration;
use a9f\Typo3Fractor\TYPO3v12\FlexForm\MigrateItemsIndexedKeysToAssociativeFractor;

return FractorConfiguration::configure()
    ->withPaths([__DIR__ . '/packages/'])
    ->withRules([
        MigrateItemsIndexedKeysToAssociativeFractor::class,
    ]);

3. Running Fractor

Dry Run (Preview)

vendor/bin/fractor process --dry-run

Apply Changes

vendor/bin/fractor process

Run Single Rule from Set

vendor/bin/fractor process --only="a9f\Typo3Fractor\TYPO3v14\TypoScript\RemoveExternalOptionFromTypoScriptFractor"

With DDEV

ddev exec vendor/bin/fractor process --dry-run
ddev exec vendor/bin/fractor process

4. Available Set Lists

Level Sets (Cumulative)

Apply all rules up to a target version:

Set ListIncludes
Typo3LevelSetList::UP_TO_TYPO3_10Imports UP_TO_TYPO3_9 plus TYPO3_10 rules only (see package config/level/up-to-typo3-10.php)
Typo3LevelSetList::UP_TO_TYPO3_11... + v11
Typo3LevelSetList::UP_TO_TYPO3_12... + v12
Typo3LevelSetList::UP_TO_TYPO3_13... + v13
Typo3LevelSetList::UP_TO_TYPO3_14... + v14

Version-Specific Sets

Apply rules for a single version only:

Set ListDescription
Typo3SetList::TYPO3_12v12 rules only
Typo3SetList::TYPO3_13v13 rules only
Typo3SetList::TYPO3_14v14 rules only

5. Rules by File Type and Version

FlexForm Rules (v12)

RuleMigration
MigrateEmailFlagToEmailTypeFlexFormFractoreval=emailtype=email
MigrateEvalIntAndDouble2ToTypeNumberFlexFormFractoreval=int/double2type=number
MigrateInternalTypeFolderToTypeFolderFlexFormFractorinternalType=foldertype=folder
MigrateItemsIndexedKeysToAssociativeFractorIndexed items → label/value keys
MigrateNullFlagFlexFormFractoreval=nullnullable=true
MigratePasswordAndSaltedPasswordToPasswordTypeFlexFormFractorPassword eval → type=password
MigrateRenderTypeColorpickerToTypeColorFlexFormFractorrenderType=colorPickertype=color
MigrateRequiredFlagFlexFormFractoreval=requiredrequired=1
MigrateTypeNoneColsToSizeFlexFormFractorcolssize for type=none
RemoveTceFormsDomElementFlexFormFractorRemove <TCEforms> wrapper

TypoScript Rules (v12)

RuleMigration
MigrateTypoScriptLoginUserAndUsergroupConditionsFractorLegacy conditions → Symfony expressions
MigrateDeprecatedTypoScriptConditionsFractorDeprecated TypoScript [compatVersion] / old condition syntax → supported forms
RemoveConfigDisablePageExternalUrlFractorRemove config.disablePageExternalUrl
RemoveConfigDoctypeSwitchFractorRemove config.doctypeSwitch
RemoveConfigMetaCharsetFractorRemove config.metaCharset
RemoveConfigSendCacheHeadersOnlyWhenLoginDeniedInBranchFractorRemove deprecated cache header config
RemoveConfigSpamProtectEmailAddressesAsciiOptionFractorRemove ascii option
RemoveNewContentElementWizardOptionsFractorRemove legacy CE wizard TSconfig
RemoveWorkspaceModeOptionsFractorRemove workspace mode options
RenameConfigXhtmlDoctypeToDoctypeFractorxhtmlDoctypedoctype
RenameTcemainLinkHandlerMailKeyFractorRename mail link handler key
UseConfigArrayForTSFEPropertiesFractorTSFE properties → config array

Fluid Rules (v12)

RuleMigration
AbstractMessageGetSeverityFluidFractorMigrate severity constants in Fluid

TypoScript rules (bundle id TYPO3_13)

These rules are published under the historical set name `Typo3SetList::TYPO3_13` (v13-targeted rules). They still run when you apply the cumulative `Typo3LevelSetList::UP_TO_TYPO3_14` level set on a v14 codebase.

RuleMigration
MigrateIncludeTypoScriptSyntaxFractor<INCLUDE_TYPOSCRIPT:@import
RemovePageDoktypeRecyclerFromUserTsConfigFractorRemove recycler doktype from TSconfig

TypoScript Rules (v14)

RuleMigration
MigrateTypoScriptConditionGetTSFEFractorgetTSFE() conditions → new API
MigrateTypoScriptGetDataPathFractorgetData path changes
RemoveDuplicateDoktypeRestrictionConfigurationFractorRemove duplicate doktype restrictions
RemoveExposeNonexistentUserInForgotPasswordDialogSettingInFeLoginFractorRemove deprecated fe_login setting
RemoveExternalOptionFromTypoScriptFractorRemove external option
RemoveFrontendAssetConcatenationAndCompressionFractorRemove asset concatenation/compression settings
RemoveModWebLayoutDefLangBindingFractorRemove mod.web_layout.defLangBinding
RemoveUserTSConfigAuthBeRedirectToURLFractorRemove auth.BE.redirectToURL

Fluid Rules (v14)

RuleMigration
ChangeLogoutHandlingInFeLoginFractorMigrate fe_login logout handling

YAML Rules (v14)

RuleMigration
MigrateLegacyFormTemplatesFractorMigrate legacy EXT:form templates

Htaccess Rules (v14)

RuleMigration
RemoveUploadsFromDefaultHtaccessFractorRemove /uploads/ from .htaccess

Detailed Reference

Read the full guide when the task needs detailed examples, long templates, troubleshooting matrices, appendices, or sections not included above. Keep this file unloaded for narrow tasks so the skill follows progressive disclosure.

Related skills

Backend & APIsbackenddevops

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.