Excalibur.Dispatch.Serialization.MessagePack
3.0.0-alpha.19
dotnet add package Excalibur.Dispatch.Serialization.MessagePack --version 3.0.0-alpha.19
NuGet\Install-Package Excalibur.Dispatch.Serialization.MessagePack -Version 3.0.0-alpha.19
<PackageReference Include="Excalibur.Dispatch.Serialization.MessagePack" Version="3.0.0-alpha.19" />
<PackageVersion Include="Excalibur.Dispatch.Serialization.MessagePack" Version="3.0.0-alpha.19" />
<PackageReference Include="Excalibur.Dispatch.Serialization.MessagePack" />
paket add Excalibur.Dispatch.Serialization.MessagePack --version 3.0.0-alpha.19
#r "nuget: Excalibur.Dispatch.Serialization.MessagePack, 3.0.0-alpha.19"
#:package Excalibur.Dispatch.Serialization.MessagePack@3.0.0-alpha.19
#addin nuget:?package=Excalibur.Dispatch.Serialization.MessagePack&version=3.0.0-alpha.19&prerelease
#tool nuget:?package=Excalibur.Dispatch.Serialization.MessagePack&version=3.0.0-alpha.19&prerelease
Excalibur.Dispatch.Serialization.MessagePack
Opt-in MessagePack serialization support for Excalibur framework.
Purpose
Provides high-performance MessagePack binary serialization for:
- Ultra-low latency scenarios
- Bandwidth-constrained environments
- Cross-language interoperability (C++, Python, Rust, etc.)
- Zero-allocation serialization with
MessagePackZeroCopySerializer
Requirements Alignment
- R0.14: Serializer segregation (opt-in package)
- R0.5: Transitive bloat guard (pay-for-play)
- R9.44: Internal wire uses MemoryPack (Core unchanged)
- R9.46: Opt-in binary alternatives
- R9.47: AOT/trim safety
Usage
Pluggable Serialization (Recommended)
Use the pluggable serialization builder for internal persistence:
services.AddDispatch()
.ConfigurePluggableSerialization(config =>
{
config.RegisterMessagePack(); // Register MessagePack (ID: 3)
config.UseMessagePack(); // Use for new messages
});
Standalone Registration
services.AddDispatch()
.ConfigureServices(s => s.AddMessagePackSerialization()); // Opt-in
With Custom Options
services.AddDispatch()
.ConfigureServices(s => s.AddMessagePackSerialization(options =>
{
options.UseLz4Compression = true;
}));
Using Specific Serializer Implementation
// Use AOT-compatible serializer
services.AddMessagePackSerialization<AotMessagePackSerializer>();
// Use general-purpose serializer
services.AddMessagePackSerialization<DispatchMessagePackSerializer>();
// Use options-based serializer
services.AddMessagePackSerialization<MessagePackMessageSerializer>(options =>
{
options.UseLz4Compression = true;
options.IncludePrivateMembers = false;
});
Serializer Implementations
| Serializer | Purpose | Performance | AOT Support |
|---|---|---|---|
MessagePackZeroCopySerializer |
Default - zero allocations | Fastest | Full |
AotMessagePackSerializer |
AOT-optimized with source-gen | Fast | Full |
DispatchMessagePackSerializer |
General-purpose | Standard | Full |
MessagePackMessageSerializer |
Options-based configuration | Standard | Full |
Package Dependencies
MessagePack- MessagePack binary serialization runtimeExcalibur.Dispatch.Abstractions- Core contracts only (no Core dependency)
AOT Compatibility
Native AOT compatible with source-generated formatters and resolvers.
Use [MessagePackObject] and [Key] attributes with source generators for optimal performance.
Performance Characteristics
- Zero-allocation mode: No GC pressure in hot paths
- Throughput: ~2-5x faster than JSON for binary payloads
- Compression: Built-in LZ4 support for bandwidth optimization
- Latency: Sub-microsecond serialization for small messages
Architecture Compliance
This package follows the Dispatch serialization policy (R0.14):
- Core (
Excalibur.Dispatch) - MemoryPack only (internal wire format) - Public Edges (
Excalibur.Dispatch.Hosting.Web, etc.) - System.Text.Json with source-gen - Opt-In Alternatives (
Excalibur.Dispatch.Serialization.*) - Pay-for-play binary serializers
MessagePack is not included in Excalibur.Dispatch to avoid transitive bloat. Consumers must explicitly opt-in by:
- Adding
<PackageReference Include="Excalibur.Dispatch.Serialization.MessagePack" /> - Calling
services.AddMessagePackSerialization()
When to Use
Use MessagePack when:
- You need maximum throughput and minimum latency
- You're sending binary data across services
- You need cross-language serialization (non-.NET clients)
- You want bandwidth-efficient wire formats
Use System.Text.Json when:
- You need human-readable message formats
- You're exposing HTTP APIs to external consumers
- You require JSON Schema or OpenAPI compatibility
Use MemoryPack when:
- You're building internal .NET-to-.NET communication
- You need the absolute fastest .NET binary serialization
- You control both producer and consumer code
Migration from Excalibur.Dispatch
Before (R0.14 violation):
// Old code - MessagePack was in Excalibur.Dispatch
services.AddDispatch()
.Serialization()
.UseMessagePack();
After (R0.14 compliant):
// New code - MessagePack is opt-in
services.AddDispatch()
.ConfigureServices(s => s.AddMessagePackSerialization());
Pluggable Serialization Integration
MessagePack is assigned Serializer ID 3 in the pluggable serialization system.
The magic byte 0x03 prefixes all MessagePack-serialized payloads.
Migration Support: When switching from another serializer (e.g., MemoryPack):
- Register MessagePack in addition to existing serializer
- Switch to MessagePack for new messages
- Old messages remain readable via their magic byte
See Also
- Excalibur.Dispatch.Serialization.Protobuf - Protocol Buffers opt-in package
- MessagePack Specification
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.11.1)
- Excalibur.Dispatch (>= 3.0.0-alpha.19)
- Excalibur.Dispatch.Abstractions (>= 3.0.0-alpha.19)
- Medo.Uuid7 (>= 1.4.0)
- MemoryPack (>= 1.21.4)
- MessagePack (>= 3.1.4)
- Microsoft.ApplicationInsights (>= 2.23.0)
- Microsoft.AspNetCore.Authorization (>= 9.0.9)
- Microsoft.Extensions.Configuration (>= 10.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.ObjectPool (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.0)
- System.Threading.RateLimiting (>= 10.0.0)
-
net8.0
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.11.1)
- Excalibur.Dispatch (>= 3.0.0-alpha.19)
- Excalibur.Dispatch.Abstractions (>= 3.0.0-alpha.19)
- Medo.Uuid7 (>= 1.4.0)
- MemoryPack (>= 1.21.4)
- MessagePack (>= 3.1.4)
- Microsoft.ApplicationInsights (>= 2.23.0)
- Microsoft.AspNetCore.Authorization (>= 9.0.9)
- Microsoft.Extensions.Configuration (>= 10.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.ObjectPool (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.0)
- System.Diagnostics.DiagnosticSource (>= 10.0.0)
- System.IO.Pipelines (>= 10.0.0)
- System.Threading.Channels (>= 10.0.0)
- System.Threading.RateLimiting (>= 10.0.0)
-
net9.0
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.11.1)
- Excalibur.Dispatch (>= 3.0.0-alpha.19)
- Excalibur.Dispatch.Abstractions (>= 3.0.0-alpha.19)
- Medo.Uuid7 (>= 1.4.0)
- MemoryPack (>= 1.21.4)
- MessagePack (>= 3.1.4)
- Microsoft.ApplicationInsights (>= 2.23.0)
- Microsoft.AspNetCore.Authorization (>= 9.0.9)
- Microsoft.Extensions.Configuration (>= 10.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.0)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.ObjectPool (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.0)
- System.Diagnostics.DiagnosticSource (>= 10.0.0)
- System.Threading.Channels (>= 10.0.0)
- System.Threading.RateLimiting (>= 10.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.0-alpha.19 | 31 | 2/26/2026 |