Quick answer: The Niagara system asset is either not cooked (no hard reference in a cooked package) or uses GPU compute emitters on a platform that stripped compute shader support. Verify cook inclusion, enable compute shader support for the target platform, and use fx.Niagara.Debug.Hud 1 to see system state in the packaged build.

Here is how to fix Unreal Niagara not spawning in a packaged build. Your VFX artist built a gorgeous trail effect. It looks perfect in the editor and in Play In Editor. You ship a build to QA and the effect is gone — or it is there but has zero particles — or it stutters violently the first time it spawns. Three different symptoms, three different causes, all cook-pipeline-related. Niagara systems have a cook chain that is more fragile than particle emitters were in the old Cascade system.

The Symptom

In the packaged build, a Niagara system component exists at runtime (you can confirm in logs), but no particles render. Or no NiagaraComponent is created at all because the system asset reference is null in a dynamically-spawned actor. Or the system spawns but shows only CPU-emitter particles, missing the GPU-compute particles entirely. The exact symptom depends on which stage of the cook pipeline failed.

Log lines that often accompany the issue: LogNiagara: Warning: Failed to compile NiagaraSystem, LogTexture: Warning: Missing compiled data, or simply silence with zero particles.

What Causes This

Asset not cooked. Unreal cooks only assets that are referenced by something else in the cooked set — levels, referenced actors, Blueprints, data assets. If your game spawns a Niagara system by soft pointer, TSoftObjectPtr, or asset registry path, the cook process may not see the reference and skip the asset. In the editor, everything works because all assets are available. In the build, the asset file is missing.

GPU compute emitters on unsupported platforms. Niagara systems with GPU compute emitters require compute shader support. Mobile platforms, some older GL render paths, and Mac Metal before a certain version either disable compute or strip it. GPU emitters in those builds silently fail to spawn. The CPU emitters in the same system still work, which is why some systems look “half broken.”

Shader compilation warnings escalated to errors. Packaged builds may strip or fail shaders that the editor compiled with warnings. A Niagara system that references a broken shader renders without particles in the build.

Async loading timing. If you spawn a system via FStreamableManager::RequestAsyncLoad and use it before the load completes, the component is created with a null asset pointer. The component exists but has nothing to render.

Platform-specific rendering features disabled. Niagara systems using renderers like Ribbon require specific Mesh features. If the target platform scalability settings strip those features (e.g. low-spec mobile), ribbons do not render.

The Fix

Step 1: Verify the asset is cooked. In your packaged build, check the Saved/Cooked/[Platform]/YourGame/Content/ folder for the .uasset file of your Niagara system. If it is missing, the cook did not include it.

Force inclusion by one of these methods:

For Blueprints that spawn Niagara systems dynamically, use a hard reference (UPROPERTY(EditAnywhere) with UNiagaraSystem*) rather than a string path. The hard reference makes cook dependencies explicit.

Step 2: Enable compute shaders for the target platform. Project Settings > Rendering > Support Compute Skin Cache must be on (for skin cache, not directly Niagara, but often correlated), and platform-specific settings for compute support must be on.

For mobile, also check Project Settings > Rendering > Mobile > Mobile Niagara GPU Simulation. In UE 5.3+ this must be explicitly enabled for GPU emitters to work on mobile.

Step 3: Use Niagara debug HUD in the packaged build. Development and Shipping+Cheats configurations support the console. Open it and type:

fx.Niagara.Debug.Hud 1

A HUD overlay appears showing active Niagara systems, their state (active/dormant), particle counts, and any errors (yellow/red text). If your system is listed as active with 0 particles, the spawn logic is failing — likely compute shader missing. If it is not listed at all, the system was not spawned or the asset is missing.

fx.Niagara.Debug.Hud.ShowErrors 1 filters to only systems with errors.

Step 4: Check async load completion before use. If you load the system asynchronously, bind to the load completion and spawn only after:

TSoftObjectPtr<UNiagaraSystem> SystemRef;

void SpawnEffect()
{
    FStreamableManager& Streamable = UAssetManager::GetStreamableManager();
    Streamable.RequestAsyncLoad(SystemRef.ToSoftObjectPath(),
        FStreamableDelegate::CreateUObject(this, &AMyActor::OnSystemLoaded));
}

void AMyActor::OnSystemLoaded()
{
    UNiagaraSystem* System = SystemRef.Get();
    if (System)
    {
        UNiagaraFunctionLibrary::SpawnSystemAtLocation(
            this, System, GetActorLocation());
    }
}

Do not assume the soft pointer is valid synchronously. Always check .Get() is non-null after load.

Shader Permutation Issues

If you see LogShaderCompilers: Warning messages about missing Niagara shader permutations in the build log, add the affected platform to the permutation reduction list or disable reductions for development builds. In Project Settings > Rendering > Shader Permutation Reduction, ensure your scalability level matches between editor and build.

DDC and Stale Caches

Sometimes a clean cook resolves issues a repeat cook does not. Delete Saved/Cooked and re-cook. If stale DDC entries reference missing assets, the cook can succeed but ship broken data. For CI, always cook from a clean state.

Testing Strategy

Cook-related bugs do not appear in PIE. For every Niagara system used in shipping, test in a development packaged build at least once. Add a debug level that spawns every VFX system in your game and visually confirm each renders. Run this test as part of your release checklist.

“Niagara in PIE is not the same as Niagara in a build. Cook at least once, then test every effect.”

Related Issues

For PCG cook-time determinism issues, see Unreal PCG Determinism Different Results. For world partition loading issues, Unreal World Partition Actor Not Loading covers related packaging problems.

fx.Niagara.Debug.Hud 1 tells you everything. Put it in a cheat key for shipping debug.