Packaging#

Commands use Windows PowerShell. $UE, $Project, $Target and $Release stand for the engine root, the full path of the .uproject, the Game target name and the release directory.

Common steps#

  1. Build the Shipping Game:
   & "$UE/Engine/Build/BatchFiles/Build.bat" $Target Win64 Shipping "-Project=$Project" -WaitMutex -NoHotReload -NoUBA
  1. Use Platforms → Windows → Package Project with Shipping, or run BuildCookRun:
   & "$UE/Engine/Build/BatchFiles/RunUAT.bat" -nocompileuat -WaitForUATMutex BuildCookRun "-project=$Project" -NoP4 -platform=Win64 -clientconfig=Shipping -cook -stage -pak -package -archive "-archivedirectory=$Release" -nobuild -unattended -utf8output
  1. Check the package: UnrealPak.exe <the .pak in the release> -List lists the package contents; then start the game from the release directory, enter a level that uses scripts and call a representative function. A clean exit alone does not prove the scripts loaded.

Package with source#

Use this to get the game delivered first, or when players may view and modify scripts: the runtime reads .as files and compiles them, so startup includes script compile time. Source can be extracted from the Pak.

Follow steps 1, 2 and 3 of the common steps.

Without a precompiled cache, the project Script/ folder is packed into the Pak.

Package with bytecode#

Do not ship the main AS source, and cut startup preprocessing and compiling. Functions still run as bytecode in the VM, and the program data in the cache can be analyzed, so it is not encryption or reverse-engineering protection.

  1. Delete the old cache files from your project's Script/ folder: Binds.Cache, Binds.Cache.Headers and PrecompiledScript*.Cache.
  2. Build the Shipping Game as in step 1 of the common steps.
  3. Generate matching precompiled data with the Shipping exe; data generated by the editor cannot be used. The process exits by itself once it has written its output:
   & "<Shipping.exe from the build output>" -as-generate-precompiled-data -as-write-bind-db -unattended -nocrashreports -NullRHI -NoMessaging -NoASDebugServer -NoSound -NoSplash
  1. Copy the three files it actually wrote back into your project's Script/ byte for byte, without mixing in files from another run; stop if you cannot find all three:
   Binds.Cache
   Binds.Cache.Headers
   PrecompiledScript.Cache

The output is in <project>/Saved/Cooked/Windows/<project name>/Script/.

  1. Build, package and check again as in steps 1, 2 and 3 of the common steps; when checking, confirm that the package has the three cache files and no project .as files.

Half-AOT packaging#

Convert the AS functions that can be generated into C++ and compile them into the game, which reduces virtual machine overhead; the bytecode entry points are still kept at runtime. The cost is longer C++ compile times and a larger exe. See the Hazelight documentation.

  1. Delete the old cache files from your project's Script/ folder: Binds.Cache, Binds.Cache.Headers and PrecompiledScript*.Cache, and the old AS_JITTED_CODE in the project module.
  2. Build the Shipping Game and package once, as in steps 1 and 2 of the common steps.
  3. Generate matching precompiled data by running the Shipping exe in the package folder; data generated by the editor cannot be used. The process exits by itself when it has finished writing:
   & "<Shipping.exe from the build output>" -as-generate-precompiled-data -as-write-bind-db -unattended -nocrashreports -NullRHI -NoMessaging -NoASDebugServer -NoSound -NoSplash

Keep the whole AS_JITTED_CODE/ folder written in the package root, and the three files Binds.Cache, Binds.Cache.Headers and PrecompiledScript.Cache.

  1. Copy AS_JITTED_CODE/ unchanged into the game's C++ module, for example Source/MyGame/AS_JITTED_CODE/. Do not change the file extensions, and do not include the generated cpp files by hand.
  2. In that module's Build.cs, add AngelscriptCode and the native module dependencies the scripts use. This example is for a project that uses both GAS and Enhanced Input:
   PrivateDependencyModuleNames.AddRange(new[] { "AngelscriptCode", "EnhancedInput", "GameplayAbilities", "GameplayTasks", "AngelscriptGAS", "AngelscriptEnhancedInput" });
  1. Regenerate the project files after changing Build.cs.
  2. Put the three cache files saved in step 3 back into your project's Script/ folder; this must happen before packaging. Then build, package and check again as in steps 1, 2 and 3 of the common steps; when checking, confirm that the package has the three cache files and no project .as files, and that representative gameplay works at runtime.

The packaging workflow can be further streamlined; this is planned alongside future features.

×

Contact

Feedback

Send bug reports and feedback on GitHub Issues.

Cooperation

For cooperation enquiries, email contact@cuviss.com.

×

About

Terms of Service

See the Community page for each plugin's license.

You may reference site content with attribution.

The software and documentation are provided "as is" without warranty.

Unreal Engine and other third-party projects and names are trademarks of their respective owners. soloAS is not affiliated with Epic Games or Hazelight.

Attribution and showcase requests are non-binding, as described on the home page.

Updated 2026-10-24

Privacy Policy

This site uses no analytics, cookies or tracking, and has no forms or third-party scripts.

The site is hosted on GitHub Pages. GitHub may process standard access logs under its Privacy Statement.

What you send by email is shared with us; what you send through GitHub Issues is shared with GitHub.

Updated 2026-10-24

Contents

Pages

On this page