From zero to working system in 5 steps. No PGX internals knowledge required.
In your .uproject or through Edit → Plugins, enable PGXCore and the plugins you need (e.g., PGXSave, PGXAudio). Plugin names enable modules; PGXCoreRuntime is a module inside PGXCore.
Right-click in Content Browser → PGX FRAMEWORK → Create a Config DataAsset for your system (e.g., UPGXSaveConfig). The system auto-discovers it at startup.
Open the DataAsset in the Details panel. Fill in the configuration. Default values work out of the box — customize only what you need.
Hit Play in Editor, open console (~). Type pgx.save.status or pgx.audio.status to verify. Every system has diagnostic commands.
Want custom behavior? Set ClassSourceMode to Blueprint or CppClass in the Construction DA. Create your class, the system uses it automatically.
Right-click in Content Browser → every PGX DataAsset organized by system. Asset types across PGX systems. No searching, no memorizing paths — the menu guides you to exactly the right asset.
Open any Config DataAsset and fill in properties. Defaults work out of the box. Advanced settings are hidden behind progressive disclosure (AdvancedDisplay). Zero documentation needed to get started.
The same functionality, two paths. C++ for direct subsystem access, Blueprints for zero-friction visual scripting.
// Step 1: Get the subsystem UPGXSaveSubsystem* Save = GetGameInstance()->GetSubsystem<UPGXSaveSubsystem>(); // Step 2: Write a value (PGXDemoGameMode.cpp, v0.1.1) UPGXSaveGame* Data = Save->GetSaveGame(Tag_Save_Progress); Data->WriteInt(TEXT("InteractionCount"), InteractionCount); // Step 3: Save the context Save->SaveContext(Tag_Save_Context, TEXT("DemoSlot"));
// No subsystem access needed — use the BP Library directly PGX Save SaveContext(ContextTag, SlotName) GetSaveGame(DomainTag) QuickSave(ContextTag) PGX Audio PlaySound2D(Sound, Params) PlayMusic(Music, FadeIn) SetChannelVolume(ChannelTag, Volume)
The code above runs. The Polymorphic Log Viewer v3.0 captures it all: categorized logs with per-system color coding, filters, search, and live updates. No breakpoints, no external tools.
From PGXDemoGameMode.cpp (v0.1.1). Same calls, your tags.
Enable PGXSave. Open the PGXDemo sample project.
GetSaveGame(Tag_Save_Progress), then WriteInt("InteractionCount", N).
SaveContext(Tag_Save_Context, "DemoSlot"). Check the return: EPGXSaveResult::Success.
Stop PIE, play again. DoesSlotExist, then LoadContext. Read the value back.
Open the Save Inspector. Domains, keys, slot status, pipeline log. Expected result: InteractionCount persists across restarts.
One mental model. One workflow. Two paths to the same destination.
Every system has a Config DA. Create it in Content Browser, fill properties, done. The system auto-discovers it at startup. One container, one flow, one mental model.
Blueprint user: activate the checkbox, drag your BP class. C++ user: select from the dropdown. The DA accepts your piece, the system uses it. No architecture decisions required.
A developer who has never read PGX source code can create an asset, fill in properties, and have a working system. If they need docs to find a setting, the UX has failed.