IoStore Support (UE 5.4+)
IoStore is Unreal Engine's next-generation packaging format, using .utoc (table of contents) and .ucas (container asset store) files instead of classic .pak archives. ModKit supports IoStore containers in the UE 5.4+ version of the SDK.
IoStore support requires the UE 5.4–5.7 version of ModKit SDK. The UE 5.1–5.3 version supports classic PAK only. Make sure you have installed the correct listing from Fab.
PAK vs IoStore
| Feature | Classic PAK | IoStore |
|---|---|---|
| Format | .pak | .utoc + .ucas |
| UE Support | 5.1+ | 5.4+ |
| Compression | Oodle | Oodle (better ratio) |
| Loading Speed | Good | Faster (bulk data separation) |
| Compatibility | All UE games | Requires IoStore-enabled game |
| ModKit Status | ✅ Shipping | ✅ Shipping (5.4+) |
Enabling IoStore in Your Game
Your packaged game must be built with IoStore enabled for mod IoStore containers to load correctly.
In your game's DefaultGame.ini:
[/Script/UnrealEd.ProjectPackagingSettings]
bUseIoStore=True
Or in Project Settings → Packaging → Use IoStore. Rebuild and repackage your game.
How ModKit Detects IoStore Mods
When StartLoadMods() scans the Mods directory, ModKit automatically detects IoStore containers by looking for .utoc/.ucas pairs alongside a .pak:
Mods/
├── MyMod.pak ← classic PAK (always checked)
├── MyMod.utoc ← IoStore table of contents
└── MyMod.ucas ← IoStore container assets
FPakMounter::HasIoStoreContainer() checks for the .utoc/.ucas pair. If found, MountIoStore() is called in addition to (or instead of) the classic PAK mount.
Building IoStore Mods
As a game developer, you don't build IoStore mods directly — modders use the ModKit Authoring plugin to package their mods. However, you must confirm that:
- Your game is built with
bUseIoStore=True - You have a
global.utocin your game package (required for IoStore mod mounting) - You're using the UE 5.4+ version of ModKit SDK
IoStore mod mounting requires the game's global.utoc file to be present and accessible. This file is generated during game packaging when IoStore is enabled. Modders will need access to this file or a stripped version for their build pipeline.
EModPackageFormat
The EModPackageFormat enum controls the expected package format:
enum class EModPackageFormat : uint8
{
Pak, // Classic .pak (default, UE 5.1+)
IoStore, // .utoc/.ucas (UE 5.4+ only)
};
When building mods programmatically:
FModBuildConfig Config;
Config.PackageFormat = EModPackageFormat::IoStore; // Requires UE 5.4+
FPakMounter API (Advanced)
For advanced use cases, FPakMounter exposes direct IoStore control:
#include "PakMounter.h"
FPakMounter Mounter;
// Check if a mod has IoStore containers
bool bHasIo = Mounter.HasIoStoreContainer(PakPath);
// Mount IoStore (UE 5.4+ only — guarded by MODKIT_UE5_4_PLUS macro)
bool bMounted = Mounter.MountIoStore(PakPath);
// Unmount
Mounter.UnmountIoStore(PakPath);
All IoStore code in ModKit is wrapped in #if MODKIT_UE5_4_PLUS macros. The same plugin source compiles cleanly on UE 5.1–5.3 with IoStore calls silently excluded.
Fallback Behavior
If a mod ships both .pak and .utoc/.ucas files, ModKit mounts whichever format is appropriate for the running engine version:
- UE 5.1–5.3: mounts the
.pakonly - UE 5.4+: mounts the IoStore container (preferred) with
.pakas fallback