Audience: Operators.
This guide covers the most common configuration patterns. For the full schema reference, see configuration-reference.md.
All configuration lives under a single MigrationPlatform root key in a JSON file:
{
"MigrationPlatform": {
"ConfigVersion": "1.0",
"Mode": "Export",
"Package": { ... },
"Source": { ... },
"Target": { ... },
"Modules": { ... },
"Environment": { ... }
}
}Credentials in AccessToken fields resolve in this order:
$ENV:VARNAME— reads the named environment variable (fails if not set)- Non-empty literal — used as-is (not recommended for secrets)
- Null or empty — Windows Integrated Auth (TFS only)
Always use $ENV: for PATs and secrets. Never commit tokens to config files.
"Source": {
"Type": "AzureDevOpsServices",
"Url": "https://dev.azure.com/myorg",
"Project": "MyProject",
"Authentication": {
"Type": "AccessToken",
"AccessToken": "$ENV:SOURCE_PAT"
}
}"Source": {
"Type": "TeamFoundationServer",
"Url": "http://tfs.internal:8080/tfs/DefaultCollection",
"Project": "MyProject",
"Authentication": {
"Type": "Windows"
}
}TFS sources require Windows and are exported via the TFS Migration Agent (net481).
Target configuration follows the same shape as Source. Only AzureDevOpsServices is supported as a target.
"Package": {
"WorkingDirectory": "D:\\migration-output"
}The CLI automatically appends <org>/<project>/ to this path. Ensure sufficient disk space — the package can be large.
| Mode | What runs |
|---|---|
Inventory |
Counts and catalogues source items |
Export |
Inventory → write items to package |
Prepare |
Validate target readiness |
Import |
Load package into target |
Migrate |
All phases in sequence |
Enable or disable individual modules:
"Modules": {
"WorkItems": { "Enabled": true },
"Teams": { "Enabled": true },
"Identities": { "Enabled": true }
}Controls how the CLI starts the Control Plane and agent:
"Environment": {
"Type": "Standalone"
}| Type | Meaning |
|---|---|
Standalone (default) |
CLI starts Control Plane and agent locally |
Hosted |
CLI connects to a remote Control Plane at ControlPlane.BaseUrl |
- Store PATs in environment variables, not files.
- Use minimum required scopes: Work Items (Read/Write), Project and Team (Read).
- Rotate PATs regularly.
- The system supports
$ENV:VARIABLEsyntax everywhereAccessTokenappears.
configuration-reference.md— full schema with all propertiesscenarios-guide.md— pre-built config examplestroubleshooting-guide.md— fixing configuration errors