diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 8cf30c68..cb545f23 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -70,6 +70,7 @@ body:
is not listed (and mention the exact version in Additional Context).
options:
#
+ - 3.3.0
- 3.2.2
- 3.2.1
- 3.2.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9d3fd308..ce79d768 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [3.3.0]
+
### Added
- Add ready-to-run scenes to the Mini Combat and UI Buttons + Inspector samples, so neither needs
diff --git a/docs/images/DxMessaging-banner.svg b/docs/images/DxMessaging-banner.svg
index 6a5a5e6d..6d0ebbcf 100644
--- a/docs/images/DxMessaging-banner.svg
+++ b/docs/images/DxMessaging-banner.svg
@@ -46,7 +46,7 @@
MIT
- v3.2.2
+ v3.3.0
diff --git a/llms.txt b/llms.txt
index 8cb0e97e..7fa1a29f 100644
--- a/llms.txt
+++ b/llms.txt
@@ -6,7 +6,7 @@
DxMessaging is a high-performance messaging library for Unity (v2021.3+) that replaces traditional C# events and UnityEvents with a type-safe, lifecycle-managed communication pattern. It enables decoupled communication between game systems without direct references.
-**Version:** 3.2.2
+**Version:** 3.3.0
**License:** MIT
**Repository:** https://github.com/Ambiguous-Interactive/DxMessaging
**Documentation:** https://ambiguous-interactive.github.io/DxMessaging/
@@ -326,5 +326,5 @@ Copyright (c) 2017-2026 Wallstop Studios
---
-**Last Updated:** 2026-08-12
-**Generated by:** scripts/update-llms-txt.js using package.json v3.2.2 and .llm/skills metadata
+**Last Updated:** 2026-08-16
+**Generated by:** scripts/update-llms-txt.js using package.json v3.3.0 and .llm/skills metadata
diff --git a/package.json b/package.json
index b60443e1..ff12fe7f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "com.wallstop-studios.dxmessaging",
- "version": "3.2.2",
+ "version": "3.3.0",
"displayName": "DxMessaging",
"description": "Synchronous Event Bus for Unity",
"unity": "2021.3",
@@ -122,6 +122,6 @@
}
],
"_upm": {
- "changelog": "### Added\n\n- The Message Monitor now has a **Live** mode alongside the existing snapshot\n view. It drains the bus emission buffer on a timer into a columnar log with a\n record/pause toggle, named Untargeted/Targeted/Broadcast filter chips, the same\n typed filter query as snapshot mode (`type:`, `message:`, `context:`, `stack:`),\n a detail pane for the selected row whose stack trace starts collapsed, and a\n footer reporting shown, buffered, recorded and missed counts. Repeated identical\n emissions coalesce into one counted row, and a `LIVE` badge plus a footer line\n say so, so the merged `N` column is not a mystery. The log updates in place as\n it drains, so scrolling into older rows is not undone by the next poll, and\n emissions the bus overwrote before the log could drain them raise a notice\n saying the log has gaps instead of leaving that to a number in the footer. Live\n mode is editor-only and reads data the bus already records, so it adds no\n runtime cost.\n- Add a **Message subscriptions** section to every `MessageAwareComponent`\n inspector. It lists the registrations its `MessageRegistrationToken` holds: the\n message type, the registration kind, a priority badge, the observed call count,\n and a dot showing whether the registration is currently subscribed on the bus.\n Call counts read as `calls n/a` while diagnostics are off rather than as zero.\n Multi-object selections group matching registrations, show how many selected\n components carry each one, and mark mixed enabled states so a missing or\n disabled handler stands out across a scene selection\n ([#297](https://github.com/Ambiguous-Interactive/DxMessaging/issues/297)).\n See [Inspector Overlay](docs/guides/inspector-overlay.md#message-subscriptions).\n\n### Changed\n\n- Change Flow Graph to lead with an interactive node-and-edge canvas. Message\n nodes connect to receiver nodes through live registration edges, with pan,\n zoom, automatic framing, and selection. Text-heavy route analysis, trace\n activity, raw topology, and overflow rows now start inside one collapsed\n section. Empty captures explain how to restore live registrations instead of\n filling the window with zero-value summaries. A crossing-aware layered layout\n and ordered node ports keep arrow paths traceable without text labels on the\n lines. Nodes use named metric rows instead of compact `+N` summaries, and\n multi-kind message types use neutral `MIXED` metrics until filtered to one\n route kind. Route selection opens responsive route, activity, emission, and\n trace cards. Evidence lists message types and call sites as separate rows,\n links every resolvable type declaration and live call-site asset, and keeps\n dense type sets behind an eight-row disclosure. Technical diagnostics now\n use separate route-health and trace-coverage cards with bordered relationship\n records for their busiest paths. Captured object contexts render as breadcrumb\n hierarchies, call sites separate the method from the file and line, and compact\n selection headers keep exact identities in tooltips. Breadcrumbs backed by an\n exact captured Unity-object identity and relationship endpoints select their graph items, message\n details expose a bounded on-demand route roster with receiver, registration,\n context, and context-ID identities, and global observers use the accessible amber taxonomy\n badge. The complete text report remains available through **Copy diagnostics**\n without rendering a text wall.\n Broadcast and targeted routes\n expose recent component- and registration-exact delivery call sites without\n leaking evidence across message buses. Global accept-all\n registrations appear as `ANY MESSAGE` observers instead of a misleading\n `IMessage` message type. Destroyed Unity context references fall back to their\n stable instance ID instead of aborting capture for that component. Follow-up\n interaction work makes the full feathered route path clickable, dims unrelated\n paths after selection, adds explicit fit and zoom controls with a 20 percent\n overview floor, and removes the automatic default selection. Route activity\n now leads while emission, trace, and technical evidence start collapsed.\n Message and call-site source links open the exact declaration or captured\n line when Unity can resolve it, and evidence disclosures stay open when the\n background source index refreshes. Dense many-to-many coverage keeps hundreds of\n crossing routes present and selectable in constrained layouts\n ([#345](https://github.com/Ambiguous-Interactive/DxMessaging/issues/345)).\n- Change the snapshot Message Monitor to the same columnar surface as its live\n log. Rows are fixed-height and carry the route kind, message type, context, and\n dispatch id under a column header; the stack trace moved out of every row into\n the selected entry's detail pane, behind a disclosure that starts collapsed.\n A `SNAPSHOT` badge and a one-line explanation say that the log is buffered\n history with one row per emission, so it is no longer ambiguous whether the\n window is streaming or merging. Named taxonomy chips carrying per-kind counts\n act as both the color legend and a per-kind filter, and **Copy JSON** follows\n them. The always-expanded message-type and context lane panels became one\n collapsed **Breakdown** disclosure of clickable filter pills, with their counts\n and member lists in tooltips, and component diagnostics moved behind its own\n collapsed disclosure. The log now flexes while the detail pane holds its height,\n so neither is pushed off the bottom of the window. The detail pane also links out\n to what a row stands for: the message type opens its declaring source, the\n context selects and pings its object in the Hierarchy while that object is still\n alive, and the stack trace renders one row per frame with its own **Open**\n button, leaving out Unity's own stack-capture frames so the first row is the\n emitting call site. The mode badge is now the mode switch in both directions, so\n live mode is no longer one-way; the log gutter sits on the row rather than on the\n live-only time column, so snapshot rows are no longer flush against the window\n edge; Component Diagnostics and the stack trace carry drag handles instead of a\n fixed cap; and everything that answers a click shows the pointer cursor\n ([#344](https://github.com/Ambiguous-Interactive/DxMessaging/issues/344)).\n- Improve targeted and source-bound broadcast routing throughput and reduce the\n memory retained by their per-target lookup tables without changing the public\n messaging API or delivery behavior\n ([#289](https://github.com/Ambiguous-Interactive/DxMessaging/issues/289)).\n- The `MessagingComponent` inspector's matched and potential-match emission labels\n now use the design system's colors instead of raw green and yellow, so they stay\n readable on the light editor skin.\n\n### Fixed\n\n- Fix Flow Graph message-source links stalling the editor while scanning large\n compilation assemblies. Source declarations now index in the background and\n each assembly source file is read once, while exact nested and generic source\n links continue to appear when the index completes\n ([#345](https://github.com/Ambiguous-Interactive/DxMessaging/issues/345)).\n- Keep a selected Flow Graph route and its marker above dimmed paths at crossings\n so the highlighted route remains visible and wins overlapping clicks\n ([#345](https://github.com/Ambiguous-Interactive/DxMessaging/issues/345)).\n- Reflexive message dispatch to a destroyed `GameObject` or `Component` target\n now skips Unity hierarchy delivery instead of throwing\n `MissingReferenceException`; normal targeted bus handlers still run.\n- Fix the Diagnostics Tooling Exerciser losing all live registrations after a\n reload-disabled Play Mode reset. Active receivers now rebuild their tokens and\n the runner restarts its deterministic emissions on every activation\n ([#346](https://github.com/Ambiguous-Interactive/DxMessaging/issues/346)).\n- Pooled collection rentals now return to their pool when attaching them to a\n registration or reclamation owner throws, instead of remaining stranded\n after a failed ownership transfer.\n- Documentation-site pages load faster. Every page was downloading the Mermaid\n renderer (about 950 KB compressed) whether or not it had a diagram, and pages\n that did have one rendered it twice. Diagrams now go through the site theme's own\n Mermaid integration, which loads it only where a diagram exists and colors it\n from the site palette in both light and dark. The display font is also linked\n rather than `@import`-ed, so it no longer waits on the stylesheet that requested\n it.\n- The documentation-site footer no longer wraps its social icon onto its own\n left-aligned line, and it carries links to the repository, releases, changelog,\n issue reporting and license."
+ "changelog": "### Added\n\n- Add ready-to-run scenes to the Mini Combat and UI Buttons + Inspector samples, so neither needs\n Inspector wiring ([#372](https://github.com/Ambiguous-Interactive/DxMessaging/issues/372)).\n- Add a guided tour to the Diagnostics Tooling Exerciser sample that emits traffic and opens Message\n Monitor and Flow Graph ([#346](https://github.com/Ambiguous-Interactive/DxMessaging/issues/346)).\n- Add the standard .NET constructors to `MessageRegistrationBuildException`\n ([#367](https://github.com/Ambiguous-Interactive/DxMessaging/issues/367)).\n- Show the installed version's release notes in the Unity Package Manager Version History tab\n ([#362](https://github.com/Ambiguous-Interactive/DxMessaging/issues/362)).\n\n### Changed\n\n- Use a collision-driven first-message guide and remove maintainer details from user docs\n ([#404](https://github.com/Ambiguous-Interactive/DxMessaging/issues/404),\n [#411](https://github.com/Ambiguous-Interactive/DxMessaging/issues/411)).\n- Color Untargeted routes blue, Targeted purple, and Broadcast green in the editor and the docs; red\n now marks problems ([#353](https://github.com/Ambiguous-Interactive/DxMessaging/issues/353)).\n- Shrink the package download by using Unity's Roslyn assemblies instead of bundling private copies\n ([#371](https://github.com/Ambiguous-Interactive/DxMessaging/issues/371)).\n- Allocate less when registering many message types that have not emitted yet\n ([#374](https://github.com/Ambiguous-Interactive/DxMessaging/issues/374)).\n- Deregister in linear instead of quadratic time when one token owns many same-priority handlers for\n one message type ([#374](https://github.com/Ambiguous-Interactive/DxMessaging/issues/374)).\n- Stop generated code from suppressing compiler warnings, so it follows your project's warning\n policy ([#367](https://github.com/Ambiguous-Interactive/DxMessaging/issues/367)).\n- Point the Package Manager **Changelog** link at the rendered changelog instead of raw Markdown\n ([#362](https://github.com/Ambiguous-Interactive/DxMessaging/issues/362)).\n- Dispatch faster when a message type has interceptors or post-processors: interceptors are\n resolved once when registrations change instead of being re-collected on every emission, and\n emissions no longer repeat handler and post-processor lookups the bus already resolved. One\n interceptor costs roughly half what it did, and four cost roughly a quarter\n ([#408](https://github.com/Ambiguous-Interactive/DxMessaging/issues/408)).\n\n### Fixed\n\n- Fix active `MessageRegistrationToken` registrations with null callbacks leaving partial token or\n bus state behind after throwing ([#414](https://github.com/Ambiguous-Interactive/DxMessaging/issues/414)).\n- Make initially empty and interceptor-rewritten post routes obey frozen snapshots: additions wait\n until the next emission, while removals finish the current post phase\n ([#413](https://github.com/Ambiguous-Interactive/DxMessaging/issues/413)).\n- Fix an interceptor registered or removed at a different priority than the running interceptor\n taking effect during that same emission; interceptor changes now wait for the next emission, as\n the snapshot semantics documentation already described\n ([#408](https://github.com/Ambiguous-Interactive/DxMessaging/issues/408)).\n- Fix `DxMessagingStaticState.Reset()` from inside an interceptor so it stops the rest of the\n dispatch instead of invoking callbacks against reset bus state\n ([#395](https://github.com/Ambiguous-Interactive/DxMessaging/issues/395)).\n- Fix Flow Graph so route and component details select and ping the object they name\n ([#345](https://github.com/Ambiguous-Interactive/DxMessaging/issues/345)).\n- Fix Message Monitor resizing so one divider controls the log detail area and wrapped stack frames\n keep their height ([#344](https://github.com/Ambiguous-Interactive/DxMessaging/issues/344)).\n- Fix disposing nested runtime-settings override tokens out of order restoring ended settings\n ([#384](https://github.com/Ambiguous-Interactive/DxMessaging/issues/384)).\n- Fix copied `GlobalMessageBusScope` and `RegistrationDisposable` values restoring or removing newer\n state, and remove the 1,024 nested-scope cap\n ([#375](https://github.com/Ambiguous-Interactive/DxMessaging/issues/375)).\n- Fix the Reflex integration and DI sample for Reflex 14 while keeping earlier Reflex releases\n working ([#367](https://github.com/Ambiguous-Interactive/DxMessaging/issues/367)).\n- Fix editor tooling failing to compile on Unity 6000.5 after Unity changed its object-discovery and\n object-lookup APIs ([#365](https://github.com/Ambiguous-Interactive/DxMessaging/issues/365),\n [#367](https://github.com/Ambiguous-Interactive/DxMessaging/issues/367))."
}
}