Migration
This chapter guides you through auditing and migrating existing TYPO3 installations from
typo3/ (FSC) to TYPO3 Astryx (skom/).
Migration Strategy
Astryx replaces Fluid Styled Content completely. Because Content Blocks structure data differently from legacy FSC templates, the extension provides a built-in migration command:
vendor/bin/typo3 astryx:migrate
The command executes safely:
**Dry Run by Default**: When invoked without ``--apply``, the command performs a read-only audit
and outputs a JSON report showing proposed changes, retained records, and records requiring
manual review.
Lossless Mappings Only: It converts only verified, lossless CType mappings.
**Safety Guards**: The command strictly **refuses** to apply changes if any record requires
manual review, if records belong to draft workspaces, or if soft-deleted records are detected.
Audit Trail: Applying changes requires a mandatory -- argument specifying an
absolute path to a new file outside the web root. It records the exact pre-migration state of
every record before making changes via TYPO3's Data.
Step-by-Step Migration Guide
Step 1: Create Full Backups
Before making any changes:
- Create a full database dump using
mysqldump. - Create an archive of the entire
fileadmin/directory and any custom FAL storages. - Record your current Git commit hash and
composer.file.lock
Step 2: Inventory Existing Content Records
Audit your existing tt_ records to identify all CTypes in use:
SELECT CType, COUNT(*) as count FROM tt_content WHERE deleted = 0 GROUP BY CType;
Take note of:
Standard content types (``header``, ``text``, ``textmedia``, ``textpic``, ``image``, ``uploads``, ``div``).
Structured elements (bullets, table) which require manual conversion.
Custom plugins or third-party extension elements.
Records in draft workspaces (t3ver_).
Step 3: Rehearse on a Non-Production Instance
Never perform your first migration run directly on production. Restore the database and files into a local DDEV or staging environment to test the procedure.
Step 4: Update Composer Dependencies
Remove typo3/ and require skom/ in the same operation:
composer remove typo3/cms-fluid-styled-content
composer require skom/typo3-astryx
composer update
Ensure skom/ is referenced at ^1. in your root composer..
Step 5: Update Database Schema and Clear Caches
vendor/bin/typo3 cache:flush
vendor/bin/typo3 extension:setup
This installs the schema for Content Block collection tables and adds Astryx TCA columns.
Step 6: Run Migration Audit (Dry Run)
Run the migration command in dry-run mode:
vendor/bin/typo3 astryx:migrate
The command outputs a JSON audit with four sections:
``mode``: ``"dry-run"``
changes: Proposed automatic migrations.
``retained``: Records whose CType remains identical (e.g. ``menu_sitemap``, ``shortcut``, ``html``).
manual: Records preventing automatic migration.
Step 7: Resolve Manual Review Items
If the manual array is not empty, address each reported item:
- Draft Workspace Records: Publish or discard pending workspace changes.
- Soft-Deleted Records: Permanently purge deleted records via the TYPO3 Recycler or a cleanup task.
- Structured Types (``bullets``, ``table``): Re-create these elements as Astryx List and Astryx Table Content Blocks before proceeding.
- Unsupported Menu Types: Convert unsupported menu types (e.g.
menu_,abstract menu_) to standard pages or supported menus.recently_ updated
Step 8: Apply Migration with Audit Report
Once manual is completely empty, run the command with -- and specify a private
absolute report path:
vendor/bin/typo3 astryx:migrate --apply --report=/var/backup/astryx-migration-before.json
Caution
The -- path must:
Be an **absolute** path (e.g. ``/var/backup/...``).
Point to a file that does not already exist.
* Be located outside the public web root (outside public/).
TYPO3's Data applies the changes, ensuring workspace safety, history logging, and
cache tagging are respected.
Step 9: Post-Migration Verification
Flush caches and execute another dry run to confirm zero remaining changes:
vendor/bin/typo3 cache:flush
vendor/bin/typo3 astryx:migrate
Inspect all migrated pages in the frontend to verify that media relations, headings, links, and rich text format correctly.
Detailed CType Mapping Reference
| FSC CType | Astryx CType | Migration Behavior |
|---|---|---|
header | astryx_ | Reuses core header, layout, position, and link. |
text | astryx_ | Reuses core bodytext; styled with Astryx typography. |
textmedia,
textpic,
image | astryx_ | Reuses core bodytext, image/assets relations, and image orientation settings. |
div | astryx_ | Maps to Astryx horizontal divider. |
uploads | astryx_ | Reuses core media FAL relation. |
menu_ | menu_ | Retained CType; rendered via astryx:. |
menu_ | menu_ | Retained CType; rendered via astryx:. |
menu_ | menu_ | Retained CType; rendered via astryx:. |
shortcut | shortcut | Retained CType; rendered via RECORDS content object. |
html | html | Retained CType; rendered with html. |
bullets | Manual (astryx_) | Convert manually to the Collection-based List block. |
table | Manual (astryx_) | Convert manually to the Collection-based Table block. |
Handling Legacy image Records
The migration command maps legacy image records to astryx_. For dedicated image
galleries without accompanying text, editors can manually convert these records to Image Only
(astryx_) in the backend to take advantage of multi-column grid layouts and fixed
aspect ratios.
Rollback Instructions
In the event of an unforeseen issue during production migration:
- Stop editorial work on the site.
- Restore the previous Git commit and
composer.file.lock - Run
composer installto restoretypo3/.cms- fluid- styled- content - Restore your database dump and FAL storage backup together.
- Flush system caches:
vendor/.bin/ typo3 cache: flush - Re-verify the frontend output.
Warning
Never attempt to roll back a migration by re-executing the JSON report against a live database. The report is an audit record of previous values, not an automated reversal script. A reliable rollback always uses the full database dump.