Messenger - Type-Safe Event System for Unity View on Asset Store (opens in new tab)

Package details

Latest version
1.1.0
Last updated
First released
Unity version
6000.3.17 or later
Package size
325 KB
Files
139
Favorites
3
Views in the past week
10

Price tracking

Last checked
Tracked since
Lowest recorded
$15.00 on

Keywords

Messenger - Type-Safe Event System for Unity

by Invariant (opens in new tab)

No ratings yet

Type-safe event system for Unity with ScriptableObject channels, DI-ready architecture, and high-performance dispatch.

Price $15.00

Buy on Asset Store (opens in new tab)

Affiliate link · Purchases support this site

Price history

Last 6 months

USD
Price history for Messenger - Type-Safe Event System for Unity, 6 months Current $15.00; lowest $15.00; highest $15.00 in this period. $0 $10 $20 Jun Jul Aug Sep Oct Nov Version 1.1.0 released 9 Jun 2026 v1.1.0

Asset preview

1 / 9

Messenger - Type-Safe Event System for Unity screenshot 1

Messenger - Type-Safe Event System for Unity screenshot 1

About this asset

Stop coupling unrelated systems with direct references, static globals, or fragile string-based events!

Messenger gives you three things at once that are usually a trade-off: full compile-time type safety, near-zero allocation dispatch, and Inspector-friendly ScriptableObject channels. Refactor a message and the compiler finds every sender and listener. Fire thousands of events per frame without feeding the garbage collector.

Messenger is a code-first, type-safe publish-subscribe event system for Unity that helps you decouple gameplay, UI, audio, analytics, meta, and service systems without string keys, enum registries, or hard references.

Use Messenger as a local event system in pure C#, inject it through your composition root, or share ScriptableObject Channel assets across prefabs and scenes when you want Inspector-friendly communication without singletons or global state.

Why not plain C# events or a static event system?

  • C# event fields recreate the tight coupling you are trying to remove and are easy to leak
  • Static event systems and string or enum keys break silently on rename and have no compile-time safety
  • Heavier reactive frameworks add a large dependency and a learning curve for what is often just messaging

Messenger stays small and focused: one clear publish-subscribe API, strong typing, measured performance, and no external dependencies.

Why choose Messenger:

  • Strongly typed messages for safer refactoring and cleaner APIs
  • No string keys or enum registries to maintain
  • Explicit Send(in T) and Signal<T>() flows for payload messages and no-data signals
  • High-performance, low-allocation dispatch with cached signals and benchmarked runtime behavior
  • Fluent subscriptions with a single IDisposable for lifecycle cleanup
  • ScriptableObject Channels for cross-scene and cross-prefab messaging
  • Optional logging, exception handling, thread safety, capacity tuning, and custom cache support
  • DI-friendly IMessenger interface with examples for Zenject, VContainer, Reflex, and pure DI
  • Re-entrancy-safe dispatch with deferred subscribe/unsubscribe during message processing

Extensive documentation, 4 sample scenes, 481 tests, benchmarks, and zero external dependencies

Messenger is built for teams that want clean, scalable architecture without heavyweight frameworks: from small projects that need cleaner communication to larger codebases that need predictable behavior, low overhead, and easier testing.

Want to see it first? Import any of the 4 included demo scenes from the Package Manager and press Play - basic usage, ScriptableObject channels, the fluent API, and multi-threaded workers each run out of the box.

From the publisher's Asset Store listing.

Technical details

Core components:

  • Messenger (runtime event system)
  • Channel (ScriptableObject-based shared messaging)
  • Builder configuration API
  • IMessenger / ISubscriber<T>
  • ILogger / ICache extensibility points

Main capabilities:

  • Strongly typed publish-subscribe API with no string keys or enum registries
  • Send(in T) for payload messages and Signal<T>() for cached no-data signals
  • Fluent multi-subscription API returning a single IDisposable
  • Optional logging, exception handling, thread safety, capacity tuning, auto-release capacity, and custom cache support
  • Re-entrancy-safe dispatch with deferred subscribe/unsubscribe during active message processing
  • Deterministic subscription order
  • DI examples for Zenject, VContainer, Reflex, and pure C# composition

Included content:

  • 4 sample scenes
  • Benchmarks and stress tests
  • 481 unit tests across 51 test fixtures
  • Full documentation

Benchmark snapshot (Apple Silicon, Unity 6.3, Mono runtime):

  • Zero GC: dedicated Send/Signal dispatch tests observed 0 garbage collections over 10,000 iterations
  • Send: ~4.3M ops/sec with 10 subscribers
  • Signal: ~3.2M ops/sec with 10 subscribers

Supported platforms:

  • Windows
  • macOS
  • Linux
  • Android
  • iOS
  • WebGL

Important behavior notes:

  • Message dispatch is exact-type by design, interface/base-type dispatch requires explicit generic typing
  • Signal<T>() is intended for no-data/default-constructible message types
  • Channel uses an internal default Messenger configuration

Compatibility

Render pipelines supported in each Unity version
Unity version Built-in URP HDRP Custom
6000.3.17f1 Compatible Compatible Compatible Compatible

As listed on the Asset Store.