Lightweight FGameplayTag-addressed event bus for Unreal Engine. The sender broadcasts on a tag,
the receiver listens on the same tag, and neither side ever holds a reference to the other. Works
from C++ and Blueprints, with global (GameInstance) and local (per-actor) scopes, sticky payloads,
deferred dispatch, save-state capture, and an in-editor debugger.
| Version | 1.0.0 — see CHANGELOG.md |
| Engine | Unreal Engine 5.5 - 5.8 |
| Platform | Win64 |
| Distribution | Through Fab — compiled for each engine version, full C++ source included. Works in Blueprint-only and C++ projects; a manual installation from source needs a C++ project. |
| Dependencies | None outside the engine |
Get the plugin · Product page · Documentation · Report an issue
This is the support and documentation repository. It exists so that you can report a bug, request a feature, and read the full documentation without a Fab account and without waiting on an email.
It contains no source code. The plugin is commercial; the code ships with your purchase. What you get here is the documentation exactly as it ships with the plugin, the changelog and the issue tracker.
- Addressing by tag. No cast, no interface, no
GetAllActorsOfClass, no manually wired delegate. A widget, an actor and a subsystem meet onCombat.Hitand know nothing else about each other. - Two scopes. A global bus on the
GameInstance, created automatically, and a local bus as a component on an actor — two disjoint registries, not one registry with a filter. - Typed payloads. Any
USTRUCT, asInstanced Structin Blueprints and as aconst T&in C++, which a native listener reads without a copy. - Sticky events. A retained broadcast is replayed to listeners that register later and ask for it, with an optional TTL.
- Automatic cleanup. Managed listeners unbind when their owner is destroyed; the native
FTagEventSubscriptionunbinds in its own destructor. - Delivery control. Exact or partial tag match, priority, one-shot, throttling, tag queries, pause/resume, consumption policies, deferred and coalesced dispatch.
- Save-state capture. Retained sticky payloads survive a save/load cycle.
- An in-editor debugger. Who broadcasts, who receives, how many deliveries — plus an Inject tab that lets you test a receiver before the sender exists.
- Optional layers. Request-response and declarative
tag → payload typecontracts, both opt-in and both built on the public API.
The full documentation is in Documentation/ — plain Markdown, the same
tree that ships with the plugin. The same pages are online at https://stillcooking.dev/en/products/tageventbus/docs/.
| Group | Covers |
|---|---|
start/ |
Installation, the one mandatory configuration step, the first event, how to verify the build. |
concepts/ |
The model: two disjoint registries, the delivery path, listener lifetime, error handling, the debugger. |
reference/ |
The full API — binding, broadcasting, bus state, types, and the native C++ surface. |
advanced/ |
The optional modules, costs, interoperability, large projects, recipes. |
troubleshooting/ |
Problems by symptom, diagnostic procedures, FAQ. |
project/ |
Compatibility matrix, updates, roadmap, test coverage, license, how to report an issue. |
- Game Thread only. The registry is not thread-safe; bind and broadcast from the Game Thread.
- No replication. The bus is local to the game instance. An event broadcast on a client does not appear on the server.
- Every tag must exist in the project's Gameplay Tag list. That is the engine's rule, and it is the one mandatory configuration step.
- The diagnostic layer is excluded from Shipping. The debugger, broadcast history and
statistics live behind
#if !UE_BUILD_SHIPPING. Production logic runs unchanged.
Details: Documentation/advanced/limits-and-threading.md.
Open an issue here: New issue. Three things fix most "it does not
work" reports before they are written — a tag missing from the project's tag list, a different
Scope on the sender and the receiver, and a listener on a parent tag without Match = Partial.
The checklist and what to attach: Documentation/project/issues.md.
"How do I…" questions and ideas go to Discussions.
Purchase and licensing questions do not belong in a public issue — use the support form or write to owner@stillcooking.dev. So do security reports: e-mail, never a public issue.
Pull requests are not accepted here: this repository is generated from the private development repository, so a change made here would be overwritten by the next release. Bugs and feature requests travel through issues, questions and ideas through Discussions, and that is the whole intake.
Copyright © 2026 Hubert Knochowski, code.Matter(). All rights reserved.
Copies obtained through Fab are governed by the Fab standard license selected at purchase, together
with the Fab Marketplace terms. You may modify the source and use the modified plugin in your own
projects, commercial ones included; the source may not be redistributed. Summary:
Documentation/project/purchase-and-use.md.