Skip to main content

The migration report

Every run writes two files:

<Project>/Saved/UEAPM/MigrationReport.md human-readable
<Project>/Saved/UEAPM/MigrationReport.json machine-readable (same content)

Use Open report in the panel to open the Markdown version.

Header and summary table​

The report starts with the project name, date, mode (apply or dry run), engine version and the number of open items (errors plus manual items). Then one row per step:

# Migration report: MyGame

- Date: 2026-09-25 01:01:12
- Mode: apply
- Engine: 5.8.3
- Open items (errors + manual): 1

| Step | Status | Changes | Left (error/manual) | Warnings | Time (s) |
|---|---|---|---|---|---|
| Project and config (`project`) | ran | 3 | 0 | 0 | 0.0 |
| Assets resave (`assets`) | ran | 873 | 0 | 0 | 14.1 |
| Enhanced Input (opt-in) (`input`) | not selected | 0 | 0 | 0 | 0.0 |
| ... | | | | | |

Status is ran, not selected, or the reason a step was skipped (for example after a restart-required step).

One section per step​

Each step that ran has its own section with up to three tables.

Changes made​

What was changed, one row per change:

CategoryLocationMessage
Engine associationMyGame.uprojectEngineAssociation "4.27" -> "5.8"
Convert/Game/FX/P_Fire.P_Fireconverted to /Game/FX/P_Fire_Converted.P_Fire_Converted

Left to do​

What you still have to do, with the fix:

SeverityCategoryLocationMessageFix
ErrorCompile error/Game/.../GA_Example.GA_ExampleCooldownGameplayEffectClass 'GE Example' grants no tags. ...Either set CooldownGameplayEffectClass to None or give that effect a 'Grant Tags to Target Actor' component with a Cooldown.* tag.

The Location is as precise as possible: a file with line (Source/.../File.cpp:181), an asset path, an asset path plus graph and node (BP_Weapon: EventGraph > SpawnEmitterAttached), or an animation notify with its time.

Notes​

Informational lines: build command, version census, number of materials checked, number of Blueprints compiled.

Severities​

SeverityMeaningCounted as open item
Infoinformation only (Notes)no
Fixeda change UEAPM made (Changes made)no
Warningworks, but should be reviewed (for example a reference still pointing at Cascade)no
Errordoes not work until fixed (load or compile error)yes
ManualUEAPM cannot do it; the fix tells you what to doyes

History​

Every run is also copied to:

<Project>/Saved/UEAPM/History/MigrationReport_<yyyyMMdd_HHmmss>.md
<Project>/Saved/UEAPM/History/MigrationReport_<yyyyMMdd_HHmmss>.json

MigrationReport.md always holds the last run; the History folder keeps every earlier one (for example the file-steps pass of a C++ project and the later full pass).

JSON fields​

Top level:

FieldTypeContent
projectstringproject name
datestringrun date
dryRunbooltrue for a dry run
enginestringengine version
openItemsinterrors plus manual items
stepsarrayone entry per step
findingsarrayevery finding of every step

Each entry of steps: id, name, ran, skipped, skipReason, seconds.

Each entry of findings:

{
"step": "project",
"phase": "Analyze",
"severity": "Fixed",
"category": "Config packaging-inikeyblacklist-rename",
"location": "Config/DefaultGame.ini",
"line": 0,
"message": "move [/Script/UnrealEd.ProjectPackagingSettings] IniKeyBlacklist to ... IniKeyDenylist",
"fix": ""
}

phase is Analyze, Apply or Verify; line is 0 when the location has no line.