Module: Advanced content migration techniques
2 of 9 Pages
Understand the migration tool repository
The Kentico Migration Tool repository contains multiple projects. For customization work, you’ll interact primarily with:
- Migration.Tool.CLI/ - to configure the tool in
appsettings.jsonand run the command-line executable - Migration.Tool.Extensions/ - to implement customization related to any content remodelling (e.g., mapping classes, transforming widgets, extracting reusable field schemas)
- Migration.Tool.KX13.Extensions or Migration.Tool.KX13.NET48.Extensions - to copy controllers from when configuring the Page Builder content migrations
The remaining projects (Core.KX13, KXP.Api, Common, etc.) provide either shared or version-specific migration logic that runs automatically. Generally, you don’t need to modify these, with the exceptions of specific advanced scenarios (e.g., a custom command handler), and contributions to the tool’s development (features/bug fixes).
See the complete repository structure guide in the GitHub documentation.
Use a three-repository approach
For data migration you need:
- Your source instance
- Your target Xperience by Kentico instance
- A copy of the Kentico Migration Tool
We recommend you use a three-repository approach for upgrade projects with a clone of the migration tool repo per project.
Your-Upgrade-Reporitory/
├── kx13-source/ # 1. Source KX13 instance
│ └── (existing KX13 code - largely unchanged)
├── xbyk-target/ # 2. Target XbyK instance
│ └── (new XbyK code - evolves iteratively)
└── migration-tool-custom/ # 3. Kentico Migration Tool (+ customizations)
├── Migration.Tool.CLI/
│ └── appsettings.json
├── Migration.Tool.Extensions/
│ ├── ClassMappings/
│ ├── CommunityMigrations/
│ └── WidgetMigrations/
└── docs/
├── decisions.md
└── scenarios.md
Why a copy of the migration tool per project?
Each project needs unique migration tool customizations. Isolating the tool enables:
- Version control for migration logic
- Team collaboration on configurations
- Records of migration decisions
- Reusable patterns across migration runs
Git submodules let you include one Git repository as a subdirectory of another, so you can work with all three repositories (source, target, migration tool) from a single parent repository while tracking each independently.