Multiplayer Session Plugin
A drop-in Unreal Engine plugin that wraps the notoriously painful Online Subsystem into a clean, Blueprint-friendly API. Host, find, join, and run a live lobby with no boilerplate. UE4 and UE5 compatible.
Developer
2024




Sessions in Unreal are powerful and punishing in equal measure. The Online Subsystem requires juggling five completion delegates per session lifecycle, working with a search-result type that isn't Blueprint-friendly, handling LAN and online behaviour that diverge in subtle ways, and managing a destroy-then-recreate dance whenever a stale session is still alive. Most projects either skip multiplayer entirely or wire up one specific case and never touch it again. This plugin packages the whole thing as a clean UGameInstanceSubsystem that any project can call from Blueprints.
The subsystem owns the session interface, binds and unbinds all five completion delegates correctly, automatically falls back to LAN when no online subsystem is configured, and re-broadcasts everything as clean multicast events for create, find, join, and destroy. Sessions advertise a match type, session name, and creation timestamp as custom properties, so consumers can filter and display meaningful lobby information. The destroy-then-recreate edge case where a create request fires while a previous session is still being torn down, is handled automatically through a deferred flag, which is exactly the kind of trap that breaks most hand-rolled session code.
Search results are wrapped in a Blueprint-friendly struct that exposes the fields players actually care about. Session name, current player count, total capacity, and seconds since creation, so a consumer binds a single event and receives a ready-to-display array. The included lobby game mode hooks player login and logout to broadcast live player-count updates to a seating widget, and when the room fills it server-travels everyone to the gameplay map. A bundled menu-navigation character exposes up/down/left/right/next/back delegates so consumers can add full gamepad and keyboard menu support without writing any input plumbing.
The challenge here isn't conceptual, it's that Online Subsystem work is genuinely treacherous. Poorly documented, hard to debug, and prone to breaking differently depending on whether you're on Steam, EOS, or the Null subsystem. Building a wrapper that hides that complexity without leaking it meant solving the edge cases most tutorials quietly ignore: the deferred destroy-then-recreate flow, the LAN-versus-online divergence, and the Blueprint-exposure problem for types the engine never intended to surface to designers. Shipping it as a stable two-endpoint mental model (host / find-join) for the consumer, while UE4 and UE5 differences are guarded internally, is what makes it a product rather than a snippet.