Skip to main content

Building & Packaging

When your mod content is ready, use the ModKit Package window to validate, cook, and package your mod into a distributable .pak file.

Open the Package Window

ModKit → Package Mod → {Your Mod}

Package Mod window

Package Window Options

OptionDescription
ModSelect which installed mod to package
Output DirectoryWhere the .pak file will be written
PlatformTarget platform: Windows, Mac, Linux
CompressionEnable Oodle compression (recommended — significantly reduces file size)

Step 1 — Validate

Click Validate before building to catch issues early. ModKit checks:

  • ModDescriptor.json is present and well-formed
  • No hard references to /Game/ paths (asset overrides via PAK priority are fine; copy-pasting game assets is not)
  • No Blueprint compilation errors
  • Dependencies are declared correctly

Hard References to /Game/

ModKit analyzes hard references from your mod's assets to the game's /Game/ content and reports them at three levels:

SeverityCaseBuild Blocked?
✅ SafeReferencing game types: Blueprints, structs, enums, DataAssets, DataTables, fonts. These resolve from the game's PAK at runtime and are never packaged into your mod.No
⚠️ WarningHard reference to a concrete game content asset (mesh, texture, material, sound, etc.) that is not copied into your mod. Prefer TSoftObjectPtr to avoid pulling the asset in, but the build is allowed — just verify it's intentional.No
❌ ErrorA concrete content asset that has been physically copied into your mod's Content folder and is hard-referenced by another mod asset. This ships a redundant copy inside your PAK that bloats it and can drift out of sync if the game later updates the original. Reference the game asset with TSoftObjectPtr instead of copying it.Yes
Overriding ≠ Duplicating

Replacing a game asset by shipping your version at the same /Game/ path (PAK-priority override) is the intended workflow — there is a single asset at that path and yours wins. The error above is not about overriding; it's about carrying a redundant private copy of a game asset that your mod then references.

Step 2 — Build

Click Build to start the two-phase build pipeline:

Phase 1 — Collect & Validate (Game Thread)

  • Queries the Asset Registry for all assets under /Plugins/{ModId}/
  • Validates assets (Blueprint compile check, hard reference scan)
  • Writes an asset manifest file listing all assets to cook

Phase 2 — Cook, PAK, Inject (Background Thread)

  1. Cook — runs UAT (BuildCookRun) to cook assets for the target platform
  2. PAK — runs UnrealPak to bundle cooked assets into a .pak file
    • Compression applied if enabled
  3. Inject Descriptor — copies ModDescriptor.json and ModContributions.json into the PAK
  4. Finalize — sets ReleaseDate / UpdatedDate timestamps and PackageSizeBytes

Live Build Log

The build log panel streams real-time output from each stage. Look for:

  • [LogModKitBuild] Cook started for platform Windows
  • [LogModKitBuild] Packaging to {OutputDir}/{ModId}_Windows.pak
  • [LogModKitBuild] Build complete. Size: 12.4 MB

Output

On success, the packaged mod is written to your project's Saved folder:

MyProject/
└── Saved/
└── {OutputDir}/
└── my_awesome_mod/
├── my_awesome_mod.pak
├── ModDescriptor.json
└── thumbnail.png

EModBuildResult

ValueDescription
SuccessBuild completed successfully
CompilationFailedBlueprint or C++ compilation error
CookFailedUAT cook step failed (check log for details)
PakFailedUnrealPak step failed
ManifestFailedCould not write the asset manifest
InvalidConfigBuild configuration is invalid
ToolNotFoundUAT or UnrealPak not found (check UE installation)
IoStoreNotSupportedIoStore requested but not available in this UE version

Distributing Your Mod

Players drop the entire mod folder into the game's Mods directory. Mods sits at the same level as Content inside the game folder:

MyGame/
├── Content/
├── Mods/
│ └── my_awesome_mod/ ← drop the whole folder here
│ ├── my_awesome_mod.pak
│ ├── my_awesome_mod.ucas (IoStore — UE 5.4+)
│ ├── my_awesome_mod.utoc (IoStore — UE 5.4+)
│ ├── ModDescriptor.json
│ └── thumbnail.png
└── Saved/
Descriptor Required

The ModDescriptor.json must be present alongside the .pak. A PAK without a descriptor is silently skipped by the loader.

Updating Your Mod

When releasing an update:

  1. Update the Version field in ModKit → Edit Mod
  2. Make your changes
  3. Package again — the UpdatedDate timestamp is set automatically
  4. Distribute the new .pak — players replace the old file

Troubleshooting

Cook fails with "No assets found"

  • Make sure your assets are saved under /Plugins/{ModId}/Content/, not /Game/
  • Check that the plugin is enabled in the Plugin Manager

UnrealPak not found

  • ModKit looks for UnrealPak relative to the engine installation
  • Verify your UE installation is complete (UnrealPak.exe is in Engine/Binaries/Win64/)

Hard reference error on a game asset

  • Remove any direct asset references to /Game/ paths from your Blueprints
  • If you're overriding an asset, use the same-path PAK approach, not a copy in your Content folder