Interactive Mermaid diagrams showing every layer, every connection, every flow in PGX.
In a star topology, every L2 plugin depends exclusively on the L1 core (PGXCoreRuntime). This means:
Zero inter-plugin coupling — removing any L2 plugin never breaks another. Predictable compilation — changing one system only recompiles that system and the core. Clean testing — each subsystem can be tested in isolation.
Build, runtime, editor. No runtime plugin links another at build time — every dependency points at the Core. Editor aggregation tools (Hub, SimHarness) are the only cross-plugin links. At runtime, Loading, PSO and GameFlow coordinate on Core message buses. The star-topology validator keeps an explicit allow-list for documented edges; in v0.1.1 it is empty.
Loading shows PSO state without holding a PSO instance. It listens for bridge messages (BindPSOMessageBridge) and checks the query tag first (RequestPSOBridgeState). The shared payload (FPGXBridgeLoadingState) lives in Core. The consumer knows the state contract, not the system that produces it.
Behavior comes from Execute, CanExecute, OnActivated and OnDeactivated — in C++ or Blueprints, without touching the central executor. Configuration resolves through shared helpers. Registries answer by tag. The observability registry tracks the types that opt in. You build inside the contracts.
PGX enforces a strict initialization order through subsystem dependencies. Profile initializes first (platform budgets must be available before any system reads configuration). EventHandler initializes last (it needs all systems registered to route events correctly).
This eliminates race conditions and ensures that when a subsystem's Initialize() runs, all its dependencies are already live.
Every PGX system discovers its configuration at startup through AssetRegistry scanning. The developer creates a DataAsset in the Content Browser, fills in properties, and the system picks it up automatically.
Profile v2.0 adds platform-aware budgets: 11 subsystems read their limits from UPGXPlatformConfig and enforce them at runtime. This means the same project can target mobile, console, and PC with different quality levels — all from DataAssets, zero code changes.
Message Bus (green) — Fire-and-forget notifications. "Something happened, anyone who cares can react." No return value, no priority, no conflict resolution. Use for: damage events, pickup notifications, UI updates.
EventHandler Bus (orange) — "Something wants to happen, who decides?" Priority-based resolution with conflict policies. Handlers compete to handle the event. Use for: ability activation, interaction resolution, AI behavior selection.
Native Delegates (blue) — Direct C++ multicast for performance-critical paths within a single system. No cross-plugin routing. Use for: state change callbacks within a subsystem's own scope.
Layer 1 contains base classes, shared types, interfaces, and all editor infrastructure (factories, Content Browser extension, toolbar, Hub dashboard). It's the foundation everything else builds on.
Layer 2 contains 19 gameplay plugins at three preview maturity levels (Established, Functional, Structured), plus 6 editor and tooling plugins. The public snapshot is v0.1.1 (UE 5.7.4, Development Preview) — per-plugin .uplugin versions vary historically and do not each equal the snapshot version. Each plugin has a Runtime module (gameplay logic) and optionally an Editor module (inspector panels, custom widgets).
Tool Plugins are editor-only utilities: documentation viewer, simulation harness, project scaffolding, and more. They never ship in packaged builds.