Help us improve
Share bugs, ideas, or general feedback.
Use when upgrading a deployed TYPO3 project/instance to a new LTS version (v14.3 LTS is the current target, released 2026-04-21) — migrating site configuration, TypoScript, templates, Docker infrastructure, and database. Includes #109585 post-upgrade wizard and Camino theme migration. Not for extension code upgrades (use typo3-extension-upgrade instead).
npx claudepluginhub netresearch/claude-code-marketplace --plugin typo3-project-upgradeHow this skill is triggered — by the user, by Claude, or both
Slash command
/typo3-project-upgrade:typo3-project-upgradeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Phases: **Inventory** -> **Infrastructure** -> **Site Sets** -> **Visual Parity** -> **Review** (+ **Phase 6** for v14 targets)
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Explores codebases via GitNexus: discover repos, query execution flows, trace processes, inspect symbol callers/callees, and review architecture.
Share bugs, ideas, or general feedback.
Phases: Inventory -> Infrastructure -> Site Sets -> Visual Parity -> Review (+ Phase 6 for v14 targets)
Query sys_template (uid, pid, root, include_static_file), tt_content CType distribution, extension list. Document all root=1 templates and their TypoScript constants/config.
ImageMagick required — without it, ALL images serve unprocessed originals (10-30x size). Install in Docker, configure GFX processor in config/system/settings.php, then TRUNCATE sys_file_processedfile, rm -rf public/fileadmin/_processed_/*, cache:flush.
Structure: packages/my-site/Configuration/Sets/MySite/ with config.yaml, settings.yaml, setup.typoscript.
config.yaml: name, label, dependencies (e.g. bootstrap-package/full).
Site config (config/sites/default/config.yaml): add dependencies: [vendor/my-site].
CRITICAL: DELETE FROM sys_template — ALL records. A surviving root=1 template with include_static_file overrides site sets, causing "No page configured for type=0". Common mistake: only checking config column while include_static_file also conflicts.
settings.yaml — map old constants (page.logo.file, page.theme.navigation.style, page.theme.breadcrumb.enable) directly.
BS Package injects ALL plugin.bootstrap_package.settings.scss.* as SCSS variables — even unlisted ones. Prefer over CSS overrides:
plugin.bootstrap_package.settings.scss.primary: '#585961'
plugin.bootstrap_package.settings.scss.secondary: '#2f99a4'
plugin.bootstrap_package.settings.scss.link-decoration: 'none'
plugin.bootstrap_package.settings.scss.min-contrast-ratio: '3'
Check BS5 _variables.scss for available !default variables.
Replace per-page sys_templates with TypoScript conditions: [traverse(page, "uid") == 99].
Color contrast: min-contrast-ratio: 4.5 (BS5 default) changes text colors vs v11. Set to 3 to restore v11 behavior.
Cards in colored frames inherit white text (invisible on white bg). Fix with CSS custom properties:
.frame-background-secondary .card {
--frame-color: var(--bs-body-color);
}
Navigation: split <a> into <a class="nav-link-main"> + <button class="nav-link-toggle"> (accessibility). Hover dropdowns removed — restore with :hover > .dropdown-menu { display: block } scoped to nav-style-simple/mega.
Scroll flicker (#1468): sticky navbar transition changes document height. Fix with margin-bottom compensation (default-height minus transition-height).
Accept: split nav link/button, data-bs-*, 3 skip links, individual JS/CSS, frame-height-default class.
Compare old/new sites with curl (HTTP status, content element IDs, frame classes, processed count). Categorize differences as MIGRATION GAP (fix), BS5 CHANGE (accept), or CSS OVERRIDE (document why).
DB fixes: carousel autoplay (BS Package v16 defaults off) via pi_flexform UPDATE.
composer.json required in classic mode (#108310)See references/v13-to-v14-project-upgrade.md.
| Mistake | Fix |
|---|---|
| CSS hacks instead of SCSS variables | Override via plugin.bootstrap_package.settings.scss.* |
| Partial sys_template cleanup | DELETE FROM sys_template (all columns matter) |
| Missing ImageMagick in Docker | 10-30x image file sizes |
| Fighting BS5 accessibility | Accept split nav, skip links, semantic HTML |
| position:fixed for scroll flicker | Use margin-bottom compensation |