Skip to main content

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.

Version Requirement

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

FeatureClassic PAKIoStore
Format.pak.utoc + .ucas
UE Support5.1+5.4+
CompressionOodleOodle (better ratio)
Loading SpeedGoodFaster (bulk data separation)
CompatibilityAll UE gamesRequires 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:

  1. Your game is built with bUseIoStore=True
  2. You have a global.utoc in your game package (required for IoStore mod mounting)
  3. You're using the UE 5.4+ version of ModKit SDK
global.utoc Required

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);
Compile Guard

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 .pak only
  • UE 5.4+: mounts the IoStore container (preferred) with .pak as fallback