Skip to main content

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>]
ArgumentMeaning
-drydry 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 codeMeaning
0done, no open items
1done, open items in the report
2restart required: run again
3fatal 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.

ParameterMeaning
-Projectthe project to open (required)
-Targetanother project to run the file steps on
-Stepscomma-separated step ids (converted to + for the editor)
-Drydry run
-Editoruse the full editor with -ExecCmds instead of the commandlet (includes Cascade)
-EngineRootengine folder, default C:\Program Files\Epic Games\UE_5.8
-Loglog 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​

  1. File steps from a host project: migrate_headless.ps1 -Project <Host> -Target <Game> -Steps project,cpp.
  2. Build with the command printed in the report.
  3. Copy the plugin into <Game>/Plugins/ and build again.
  4. All steps in the editor: migrate_headless.ps1 -Project <Game> -Editor.
  5. Final build.

The Action RPG case study follows exactly this sequence.