Migration
TYPO3 Migration Framework for every kind of migration/imports from CLI (e.g. Templavoila to Gridelements, tt_news to news, etc...)
Install / Use
/learn @in2code-de/MigrationREADME
TYPO3 Migration Framework
Description
This extension (EXT:migration) is a helper extension for your TYPO3 updates and migrations based on CLI commands (to prevent timeouts, use a better performance, etc...).
What can this extension do for you:
- Migration of table values
- Import tables values from other tables
- Port: Export of whole page branches with all records and files as json
- Port: Import of whole page branches with all records and files from json into an existing table (and gives new identifiers and relations)
- Page actions (move, copy and delete) from CLI
This framework extension helped us (in2code) in some really large projects to migrate some stuff - e.g.:
- old backendlayouts to new backendlayouts
- tt_news to tx_news
- templatevoila to backendlayouts and gridelements
- mailform to powermail or mailform to form
- individual stuff to different individual stuff
Note: This extension is not a ready-to-use extension for your (e.g.) tt_news to tx_news migration. In my eyes it's nearly not possible to build a one-solves-all migrator extension that automatically fits all needs of your installation. Because TYPO3 instances can be build in such different ways an individual configuration is often needed.
Note2: If you want to use this extension for your migrations, you need a basic understanding of the database structure of your TYPO3 instance. Because you have to set up the migrators and importers by yourself (e.g. you have to know that tt_news.title will be migrated to tx_news_domain_model_news.title for your news migration, etc...).
Some naming conventions:
- Import means here: Import stuff from an old to a new table (like from tt_news to tx_news_domain_model_news)
- Migrate means here: Migrate existing records in an existing table (like in tt_content from TemplaVoila to Gridelements)
Introduction
Possible roadmap for TYPO3 update and migration projects
If your migration comes along with a TYPO3 update (like from 6.2 to 9.5 or so), you should go this way:
- Update
- Start with an empty database and a new TYPO3 9.5 and build your functions in it with some testpages
- Add additional functions that are needed to your small test instance (like news, powermail, own content elements, etc...)
- Of course I would recommend to store the complete configuration (TypoScript, TSConfig etc...) in an extension (sitepackage)
- Preperation
- Import your old database into the new instance
- Make a db compare (I would recommend the package typo3_console for this to do this from CLI)
- Make your update wizard steps (I would also recommend the package typo3_console for this to do this from CLI)
- Migration
- Dump your new database
- Add an extension (e.g. key
migration_extend) with a composer.json and requirein2code/migrationin it - Install this extension (e.g. in require_dev section)
- Start with adding your own Migrators and Importers to your extension (Add a configuration file to your extension)
- And then have fun with migrating, rolling back database, update your scripts, migrate again, and so on
- Finish
- If you are finished and have a good result, you simply can remove both extensions
- See also https://www.slideshare.net/einpraegsam/typo3-migration-in-komplexen-upgrade-und-relaunchprojekten-114716116
Example CLI commands
# Example migration
./vendor/bin/typo3 migration:migrate --configuration EXT:migration_extend/Configuration/Migration.php
# Example export into json file
./vendor/bin/typo3 migration:export 123 > /home/user/export.json
# Example import from json file
./vendor/bin/typo3 migration:import /home/user/export.json 123
See documenation for a detailed description of all CLI commands
Documenation
Breaking changes
- Update to 7.6.0: This is only a small breaking change because constructors in extended with a configuration array now. If you are using own propertyHelpers and you overwrote __construct(), you have also to pass the new variable now.
Early Access Programm for TYPO3 14 support
:information_source: TYPO3 14 compatibility
See EAP page (DE) or EAP page (EN) for more information how to get access to a TYPO3 14 version
Changelog
| Version | Date | State | Description | |-------------|------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 12.9.0 | 2025-11-25 | Feature | Show classname in importer/migrator logs for better debugging, harden FlexFormGeneratorPropertyHelper against null values | | 12.8.5 | 2025-09-14 | Bugfix | Support anchor links for imports again, sys_file_metadata is also imported on root now | | 12.8.4 | 2025-08-04 | Bugfix | Allow 0 as relation value in FlexForms when importing (for keepNotMatchingIdentifiers=false) | | 12.8.3 | 2025-07-23 | Bugfix | Use correct orderings in export.json file: Default language before localized records | | 12.8.2 | 2025-06-27 | Bugfix | Fix page relations with sections for imports | | 12.8.1 | 2025-06-16 | Bugfix | Use correct page translations when exporting | | 12.7.0 | 2025-06-10 | Feature | Allow manipulating of values while runtime with Queue class | | 12.6.0 | 2025-05-17 | Feature | Add new message type "warning" to migration log, allow imports to PID 0 now any pages, suppress errors when parsing invalid HTML with ReplaceCssClassesInHtmlStringPropertyHelper | | 12.5.1 | 2025-05-06 | Bugfix | Show class name if there is a misconfiguration in migrator/importer classes, Don't add empty lines when using ReplaceCssClassesInHtmlStringPropertyHelper class | | 12.5.0 | 2025-04-30 | Feature | Filter by type of message in migration | | 12.4.0 | 2025-04-29 | Feature | Import: Allow to load assets from an online source | | 12.3.1 | 2025-04-29 | Bugfix | Merge duplicate occurrences of the function createFolderIfNotExists() to one place, and make it really public | | 12.3.0 | 2025-04-28 | Feature | New events for file import manipulation, make createFolderIfNotExists() public, prevent exception when importing MM tables, code cleanup | | 12.2.0 | 2025-04-02 | Feature | Respect also _migrated=1 for Migrators now | | 12.1.0 | 2025-04-02 | Feature | Add new (Property)Helper class for updating file relations, resolve EXT:path correct for imports | | 12.0.0 | 2025-04-01 | Task | Support TYPO3 13 (+12) and drop support for TYPO3 11 | | 11.2.1 | 2024-06-06 | Bugfix | Fix column name for FlexForm configuration in Port.php, don't add mm-entries with zero-values to prevent garbage and duplication-errors in mysql | | 11.2.0 | 2024-06-06 | Feature | Extend default configuration with newer news plugins, container and powermail_cond settings, prevent duplicate mm table entries, support sections in links now, prevent some missing array key errors | | 11.1.0 | 2024-06-06 | Task | sys_file_metadata records should also be importend and exported, move "beforeEvent" really before import data is generated, prevent some missing array key errors, prevent array to string conversion message | | 11.0.1 | 2024-01-31 | Bugfix | Fix some smaller issues (e.g. missing array keys, etc...)
Related Skills
node-connect
347.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
