Headless and CI
The migration can run without the panel: from the editor console, from a commandlet, or from a script.
Console command
Ueapm.Migrate [-dry] [-steps=a,b | -steps=a+b] [-target=<path to .uproject>]
| Argument | Meaning |
|---|---|
-dry | dry run: Analyze and Verify only, nothing modified |
-steps= | the steps to run, by id: project, assets, input, cascade, cpp, rendering, physics, blueprints. Separate them with , or + |
-target= | run the file steps (project, cpp) on another project |
Without -steps, the default selection runs (every step except the opt-in input). Steps always run in the
fixed order, whatever order you list them in.
+ exists because -ExecCmds splits its argument on commas: inside -ExecCmds, write -steps=project+cpp.
Commandlet
& "C:\Program Files\Epic Games\UE_5.8\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" `
"D:\MyGame\MyGame.uproject" -run=UeapmMigrate [-dry] [-steps=a,b] [-target=...]
| Exit code | Meaning |
|---|---|
0 | done, no open items |
1 | done, open items in the report |
2 | restart required: run again |
3 | fatal error (for example a rule table failed to load) |
:::warning Cascade needs the editor UI
The engine's Cascade converter drives Niagara editor views, which the commandlet does not have. Every other step
runs in the commandlet; for the cascade step, run the full editor unattended:
& "C:\Program Files\Epic Games\UE_5.8\Engine\Binaries\Win64\UnrealEditor.exe" "D:\MyGame\MyGame.uproject" `
-ExecCmds="Ueapm.Migrate,QUIT_EDITOR" -unattended -nosplash
:::
Tools/migrate_headless.ps1
The plugin ships a PowerShell wrapper that runs either form, prints the UEAPM result lines and returns the exit code.
| Parameter | Meaning |
|---|---|
-Project | the project to open (required) |
-Target | another project to run the file steps on |
-Steps | comma-separated step ids (converted to + for the editor) |
-Dry | dry run |
-Editor | use the full editor with -ExecCmds instead of the commandlet (includes Cascade) |
-EngineRoot | engine folder, default C:\Program Files\Epic Games\UE_5.8 |
-Log | log file, default %TEMP%\ueapm_headless.log |
# File steps on a C++ project that does not compile on 5.8 yet, from any 5.8 project that has the plugin
powershell -File Tools\migrate_headless.ps1 -Project D:\Host\Host.uproject -Target D:\MyGame\MyGame.uproject -Steps project,cpp
# All default steps inside the project, full editor (includes the Cascade conversion)
powershell -File Tools\migrate_headless.ps1 -Project D:\MyGame\MyGame.uproject -Editor
# Dry run in the commandlet
powershell -File Tools\migrate_headless.ps1 -Project D:\MyGame\MyGame.uproject -Dry
In commandlet mode the script ends with exit code N (0 done, 1 open items, 2 restart and run again, 3 fatal) and
exits with the same code, so a CI job can fail on open items.
A complete unattended C++ migration
- File steps from a host project:
migrate_headless.ps1 -Project <Host> -Target <Game> -Steps project,cpp. - Build with the command printed in the report.
- Copy the plugin into
<Game>/Plugins/and build again. - All steps in the editor:
migrate_headless.ps1 -Project <Game> -Editor. - Final build.
The Action RPG case study follows exactly this sequence.