NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #1559 most downloaded on NuGet
Canonical actor model implementation for .NET with local + distributed actors in C# and F#.
Last release 3 days ago
07 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 15 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
127 years old
209 releases · first in 1900
…on a derived class's own no-op overrides. Breaking change: a derived spec that already declares its own InitializeAsync/DisposeAsync must mark them ov…
Akka.NET v1.5.72 backports a non-blocking Cluster extension startup, test-infrastructure hardening, a Cluster.Sharding hand-over fix, and a batch of de-flaked specs from dev.
Starting with this release, Akka.Hosting ships from this repository. The Akka.Hosting, Akka.Remote.Hosting, Akka.Cluster.Hosting, Akka.Persistence.Hosting, Akka.Hosting.TestKit, and Akka.Hosting.TestKit.Xunit2 packages are now built, tested, and published alongside every Akka.NET release at the same version number.
Akka.Hosting
src/contrib/hosting and share the Akka.NET version and release cadence. No package IDs, namespaces, or public APIs changed; bump Akka.Hosting.* to the same version as Akka.*. Hosting-only hotfix versions (such as 1.5.60.1) no longer exist: a Hosting fix ships in the next Akka.NET patch release. The documentation moved to getakka.net/articles/hosting. The akkadotnet/Akka.Hosting repository will be archived and keeps the full commit history and release notes for versions up to 1.5.71; the import was taken from commit cefe3c4c.Akka, Akka.DependencyInjection and all Akka.Hosting.* packages now require Microsoft.Extensions.* 10.0.0 or later (previously 6.0 for the core packages and 9.0 for Akka.Hosting). The 10.0 packages still ship netstandard2.0 assets, so applications on .NET Framework 4.8, .NET 6 and .NET 8 keep working; NuGet will lift the transitive Microsoft.Extensions.* references in those applications to 10.0.x. Akka.Hosting's OpenTelemetry dependency moves to 1.15.3 or later, which clears GHSA-g94r-2vxg-569j.Akka.TestKit / Akka.TestKit.Xunit
Akka.TestKit.Xunit.TestKit now implements InitializeAsync/DisposeAsync directly instead of relying on a derived class's own no-op overrides. Breaking change: a derived spec that already declares its own InitializeAsync/DisposeAsync must mark them override and call the base method, or the build fails with CS0114. Dispose(bool) no longer terminates the ActorSystem by itself; the public Dispose()/DisposeAsync() entry points do, after calling the base chain.TestKitBase.ShutdownAsync overloads shut an ActorSystem down without blocking a thread pool worker.ConductorBindException and ConductorPortSentinel types, and a 20-minute backstop that kills a node process that never exits on its own.Akka.Streams
ServerBinding.Unbind() used to always wait out the subscription timeout even when no connection was pending. It now completes right away in that case, and still correctly waits when a connection was accepted but never subscribed to.Akka.Cluster.Sharding
updating-state-timeout (5 seconds by default), matching what reference.conf always documented, instead of waiting-for-state-timeout (2 seconds). Migration: if you raised waiting-for-state-timeout to give a slow remember-entities store more time, move that value to updating-state-timeout instead - it no longer affects the write path.ShardRegion that isn't leaving the cluster, which used to leave that region permanently unusable for the life of the process.Akka.DistributedData
Replicator started after a member had already begun leaving no longer silently drops that member's writes and gossip.Akka.Cluster
akka.cluster.prune-gossip-tombstones-after). The wire change is rolling-upgrade compatible: older nodes ignore the added protobuf field and upgraded nodes treat its absence as an empty tombstone set. Protection becomes fully effective after every node is upgraded; removals that occur while old nodes remain in the cluster are not guaranteed to retain their tombstones.Cluster constructor no longer blocks on a 20 second ask, and akka.actor.creation-timeout is no longer consulted by Akka.Cluster at all (Akka.Cluster.Sharding still uses it to bound its own start-up asks). This removes the "Failed to startup Cluster" failure mode, which could shut down a healthy node whenever every thread the startup needed was parked - a small fork-join or other dedicated dispatcher pool, or a stock pool starved under load. Behavior note: Cluster.Get() now returns before core initialization completes, and the cluster's internal actor tree (/system/cluster/core, /system/cluster/core/daemon, /system/cluster/heartbeatReceiver) is created after Cluster.Get() returns rather than before it. All public cluster APIs are message-based, so typical code is unaffected; code that used Cluster.Get() as a "core is started" synchronization point, or that resolves one of those internal paths right after obtaining the extension, should await JoinAsync/RegisterOnMemberUp or a cluster event instead.Subscribe, Join, Leave, Down, ...) now route through /system/cluster for the entire lifetime of the extension - two extra local mailbox hops on this low-traffic control plane - instead of switching to a direct core-daemon reference once startup resolves one, so back-to-back commands from one caller stay in order for good, not just during startup. A lost Leave no longer wedges every later LeaveAsync() for the life of the process. Behavior note: calling Leave()/LeaveAsync() again after the extension has already shut down now produces a dead-lettered ClusterUserAction.Leave - worth knowing about for dead-letter alerting or EventFilter.DeadLetter assertions.Testing
ResolveOne against /system/cluster/core/daemon/downingProvider raced the async cluster-extension init #8359 introduces above; replaced with a dilated retrying resolve, a dynamic port, and an async TaskCompletionSource member-up signal.3 contributors since release 1.5.71
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 66 | 35268 | 2030 | Aaron Stannard |
| 1 | 94 | 47 | Bojan Janjatović |
| 1 | 2 | 1 | Matt Kotsenas |
To see the full set of changes in Akka.NET v1.5.72, click here.
One column per quarter.
Akka.NET v1.5.72 backports a non-blocking Cluster extension startup, test-infrastructure hardening, a Cluster.Sharding hand-over fix, and a batch of de-flaked specs from dev.
Starting with this release, Akka.Hosting ships from this repository. The Akka.Hosting, Akka.Remote.Hosting, Akka.Cluster.Hosting, Akka.Persistence.Hosting, Akka.Hosting.TestKit, and Akka.Hosting.TestKit.Xunit2 packages are now built, tested, and published alongside every Akka.NET release at the same version number.
Akka.Hosting
src/contrib/hosting and share the Akka.NET version and release cadence. No package IDs, namespaces, or public APIs changed; bump Akka.Hosting.* to the same version as Akka.*. Hosting-only hotfix versions (such as 1.5.60.1) no longer exist: a Hosting fix ships in the next Akka.NET patch release. The documentation moved to getakka.net/articles/hosting. The akkadotnet/Akka.Hosting repository will be archived and keeps the full commit history and release notes for versions up to 1.5.71; the import was taken from commit cefe3c4c.Akka, Akka.DependencyInjection and all Akka.Hosting.* packages now require Microsoft.Extensions.* 10.0.0 or later (previously 6.0 for the core packages and 9.0 for Akka.Hosting). The 10.0 packages still ship netstandard2.0 assets, so applications on .NET Framework 4.8, .NET 6 and .NET 8 keep working; NuGet will lift the transitive Microsoft.Extensions.* references in those applications to 10.0.x. Akka.Hosting's OpenTelemetry dependency moves to 1.15.3 or later, which clears GHSA-g94r-2vxg-569j.Akka.TestKit / Akka.TestKit.Xunit
Akka.TestKit.Xunit.TestKit now implements InitializeAsync/DisposeAsync directly instead of relying on a derived class's own no-op overrides. Breaking change: a derived spec that already declares its own InitializeAsync/DisposeAsync must mark them override and call the base method, or the build fails with CS0114. Dispose(bool) no longer terminates the ActorSystem by itself; the public Dispose()/DisposeAsync() entry points do, after calling the base chain.TestKitBase.ShutdownAsync overloads shut an ActorSystem down without blocking a thread pool worker.ConductorBindException and ConductorPortSentinel types, and a 20-minute backstop that kills a node process that never exits on its own.Akka.Streams
ServerBinding.Unbind() used to always wait out the subscription timeout even when no connection was pending. It now completes right away in that case, and still correctly waits when a connection was accepted but never subscribed to.Akka.Cluster.Sharding
updating-state-timeout (5 seconds by default), matching what reference.conf always documented, instead of waiting-for-state-timeout (2 seconds). Migration: if you raised waiting-for-state-timeout to give a slow remember-entities store more time, move that value to updating-state-timeout instead - it no longer affects the write path.ShardRegion that isn't leaving the cluster, which used to leave that region permanently unusable for the life of the process.Akka.DistributedData
Replicator started after a member had already begun leaving no longer silently drops that member's writes and gossip.Akka.Cluster
akka.cluster.prune-gossip-tombstones-after). The wire change is rolling-upgrade compatible: older nodes ignore the added protobuf field and upgraded nodes treat its absence as an empty tombstone set. Protection becomes fully effective after every node is upgraded; removals that occur while old nodes remain in the cluster are not guaranteed to retain their tombstones.Cluster constructor no longer blocks on a 20 second ask, and akka.actor.creation-timeout is no longer consulted by Akka.Cluster at all (Akka.Cluster.Sharding still uses it to bound its own start-up asks). This removes the "Failed to startup Cluster" failure mode, which could shut down a healthy node whenever every thread the startup needed was parked - a small fork-join or other dedicated dispatcher pool, or a stock pool starved under load. Behavior note: Cluster.Get() now returns before core initialization completes, and the cluster's internal actor tree (/system/cluster/core, /system/cluster/core/daemon, /system/cluster/heartbeatReceiver) is created after Cluster.Get() returns rather than before it. All public cluster APIs are message-based, so typical code is unaffected; code that used Cluster.Get() as a "core is started" synchronization point, or that resolves one of those internal paths right after obtaining the extension, should await JoinAsync/RegisterOnMemberUp or a cluster event instead.Subscribe, Join, Leave, Down, ...) now route through /system/cluster for the entire lifetime of the extension - two extra local mailbox hops on this low-traffic control plane - instead of switching to a direct core-daemon reference once startup resolves one, so back-to-back commands from one caller stay in order for good, not just during startup. A lost Leave no longer wedges every later LeaveAsync() for the life of the process. Behavior note: calling Leave()/LeaveAsync() again after the extension has already shut down now produces a dead-lettered ClusterUserAction.Leave - worth knowing about for dead-letter alerting or EventFilter.DeadLetter assertions.Testing
ResolveOne against /system/cluster/core/daemon/downingProvider raced the async cluster-extension init #8359 introduces above; replaced with a dilated retrying resolve, a dynamic port, and an async TaskCompletionSource member-up signal.3 contributors since release 1.5.71
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 66 | 35268 | 2030 | Aaron Stannard |
| 1 | 94 | 47 | Bojan Janjatović |
| 1 | 2 | 1 | Matt Kotsenas |
To see the full set of changes in Akka.NET v1.5.72, click here.
Note truncated.
Akka.NET v1.5.71 is a maintenance release that fixes a Cluster Sharding private-replicator recovery bug, hardens MultiNodeTestRunner conductor reliabi
Akka.NET v1.5.71 is a maintenance release that fixes a Cluster Sharding private-replicator recovery bug, hardens MultiNodeTestRunner conductor reliability, flushes graceful Disassociate PDUs before transport force-close on shutdown, and resolves a handful of TestKit, ClusterClientDiscovery, and DotNetty fixes.
Akka.Cluster.Sharding
ClusterShardingReplicatorResiliencySpec covering the recovery path.Akka.Remote
Disassociate PDUs before transport force-close on shutdown: Ensures in-flight graceful Disassociate control messages are flushed to the wire before the transport force-closes the connection on shutdown, preventing an abrupt teardown from silently dropping them.Akka.Remote.TestKit (MultiNodeTestRunner)
BarrierCoordinator, Conductor, Controller, Player, and RemoteConnection against conductor-side races and disconnect handling, reducing multi-node spec flakiness.Akka.TestKit
PromiseActorRef.GetPath that made Path return null: Fixes a torn read in PromiseActorRef.GetPath that could return null under concurrent access.ExpectMsgAsync<T>(Func<T, IActorRef, bool>, ...): Fixes a bug where the overload of ExpectMsgAsync that takes a predicate could apply its timeout dilation twice, causing spurious timeout failures.Akka.Cluster.Tools
ClusterClientDiscovery keeps its contact-point subscriptions alive across rediscovery cycles instead of dropping them.Tests
ClusterShardingQueriesSpec stats/region-state queries converge-then-assert (async): Hardens ClusterShardingQueriesSpec by making its stats and region-state query assertions wait for convergence before asserting, reducing CI flakiness.1 contributor since release 1.5.70
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 11 | 1376 | 468 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.71, click here.
Akka.NET v1.5.71 is a maintenance release that fixes a Cluster Sharding private-replicator recovery bug, hardens MultiNodeTestRunner conductor reliability, flushes graceful Disassociate PDUs before transport force-close on shutdown, and resolves a handful of TestKit, ClusterClientDiscovery, and DotNetty fixes.
Akka.Cluster.Sharding
ClusterShardingReplicatorResiliencySpec covering the recovery path.Akka.Remote
Disassociate PDUs before transport force-close on shutdown: Ensures in-flight graceful Disassociate control messages are flushed to the wire before the transport force-closes the connection on shutdown, preventing an abrupt teardown from silently dropping them.Akka.Remote.TestKit (MultiNodeTestRunner)
BarrierCoordinator, Conductor, Controller, Player, and RemoteConnection against conductor-side races and disconnect handling, reducing multi-node spec flakiness.Akka.TestKit
PromiseActorRef.GetPath that made Path return null: Fixes a torn read in PromiseActorRef.GetPath that could return null under concurrent access.ExpectMsgAsync<T>(Func<T, IActorRef, bool>, ...): Fixes a bug where the overload of ExpectMsgAsync that takes a predicate could apply its timeout dilation twice, causing spurious timeout failures.Akka.Cluster.Tools
ClusterClientDiscovery keeps its contact-point subscriptions alive across rediscovery cycles instead of dropping them.Tests
ClusterShardingQueriesSpec stats/region-state queries converge-then-assert (async): Hardens ClusterShardingQueriesSpec by making its stats and region-state query assertions wait for convergence before asserting, reducing CI flakiness.1 contributor since release 1.5.70
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 11 | 1376 | 468 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.71, click here.
This list of changes was auto generated.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page .
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
You can’t perform that action at this time.
Akka.NET v1.5.70 is a maintenance release that adds a new "last-N" query offset to Akka.Persistence.Query, resolves two Akka.Streams reliability issue
Akka.NET v1.5.70 is a maintenance release that adds a new "last-N" query offset to Akka.Persistence.Query, resolves two Akka.Streams reliability issues and improves BroadcastHub performance under high consumer counts, and fixes a consistent-hashing router bug that could wedge an entire cluster after a 32-bit hash collision.
Akka.Persistence.Query
Offset.FromEnd(int count) — "last-N events" query offset: Introduces Offset.FromEnd(int count), a new query-input-only offset type that begins a read journal query at the Nth event from the end of history rather than from the beginning. The offset is resolved at stream materialization into a concrete Sequence start position; no interface changes or wire-format changes are required. Includes opt-in TCK spec (FromEndOffsetSpec) for plugin authors.Akka.Streams Bug Fixes
Source.From(IAsyncEnumerable<T>) where the underlying enumerator could be disposed before all elements were delivered to downstream, causing ObjectDisposedException on high-throughput pipelines.ChannelSink drops final element on backpressure - Fixes #8285: ChannelSink was discarding the last element in a sequence whenever the downstream Channel<T> applied backpressure during completion. The sink now correctly delivers all elements before signaling completion.Akka.Streams Performance
BroadcastHub when many consumers are attached by optimizing the internal consumer-wheel iteration, yielding measurable throughput improvements at high fan-out.Akka.Core Bug Fixes
ConsistentHash.Create threw "An entry with the same key already exists". The consistent-hashing router swallowed the exception and returned NoRoutee for every subsequent message until a manual restart. The ring now linear-probes to the next free slot on a collision instead of throwing. This keeps the hash distribution unchanged and produces a byte-identical ring to prior versions whenever no collision occurs (safe for rolling upgrades), and also protects Akka.Cluster.Tools' ClusterReceptionist, which builds the same ring.2 contributors since release 1.5.69
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 22 | 2274 | 332 | Aaron Stannard |
| 1 | 97 | 4 | beminee |
To see the full set of changes in Akka.NET v1.5.70, click here.
Akka.NET v1.5.70 is a maintenance release that adds a new "last-N" query offset to Akka.Persistence.Query, resolves two Akka.Streams reliability issues and improves BroadcastHub performance under high consumer counts, and fixes a consistent-hashing router bug that could wedge an entire cluster after a 32-bit hash collision.
Akka.Persistence.Query
Offset.FromEnd(int count) — "last-N events" query offset: Introduces Offset.FromEnd(int count), a new query-input-only offset type that begins a read journal query at the Nth event from the end of history rather than from the beginning. The offset is resolved at stream materialization into a concrete Sequence start position; no interface changes or wire-format changes are required. Includes opt-in TCK spec (FromEndOffsetSpec) for plugin authors.Akka.Streams Bug Fixes
Source.From(IAsyncEnumerable<T>) where the underlying enumerator could be disposed before all elements were delivered to downstream, causing ObjectDisposedException on high-throughput pipelines.ChannelSink drops final element on backpressure - Fixes #8285: ChannelSink was discarding the last element in a sequence whenever the downstream Channel<T> applied backpressure during completion. The sink now correctly delivers all elements before signaling completion.Akka.Streams Performance
BroadcastHub when many consumers are attached by optimizing the internal consumer-wheel iteration, yielding measurable throughput improvements at high fan-out.Akka.Core Bug Fixes
ConsistentHash.Create threw "An entry with the same key already exists". The consistent-hashing router swallowed the exception and returned NoRoutee for every subsequent message until a manual restart. The ring now linear-probes to the next free slot on a collision instead of throwing. This keeps the hash distribution unchanged and produces a byte-identical ring to prior versions whenever no collision occurs (safe for rolling upgrades), and also protects Akka.Cluster.Tools' ClusterReceptionist, which builds the same ring.2 contributors since release 1.5.69
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 22 | 2274 | 332 | Aaron Stannard |
| 1 | 97 | 4 | beminee |
To see the full set of changes in Akka.NET v1.5.70, click here.
This list of changes was auto generated.
Akka.NET v1.5.70-beta2 is a beta release with a bug fix for ChannelSink dropping the final element under backpressure.
Akka.NET v1.5.70-beta2 is a beta release with a bug fix for ChannelSink dropping the final element under backpressure.
Akka.Streams Bug Fixes
ChannelSink drops final element on backpressure - Fixes #8285: ChannelSink was discarding the last element in a sequence whenever the downstream Channel<T> applied backpressure during completion. The sink now correctly delivers all elements before signaling completion.2 contributors since release 1.5.70-beta1
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 2 | 115 | 15 | Aaron Stannard |
| 1 | 97 | 3 | beminee |
Akka.NET v1.5.70-beta2 is a beta release with a bug fix for ChannelSink dropping the final element under backpressure.
Akka.Streams Bug Fixes
ChannelSink drops final element on backpressure - Fixes #8285: ChannelSink was discarding the last element in a sequence whenever the downstream Channel<T> applied backpressure during completion. The sink now correctly delivers all elements before signaling completion.2 contributors since release 1.5.70-beta1
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 2 | 115 | 15 | Aaron Stannard |
| 1 | 97 | 3 | beminee |
This list of changes was auto generated.
Akka.NET v1.5.70-beta1 is a beta release with a new Offset.FromEnd query offset for Akka.Persistence.Query, bug fixes for Akka.Streams async enumerabl
Akka.NET v1.5.70-beta1 is a beta release with a new Offset.FromEnd query offset for Akka.Persistence.Query, bug fixes for Akka.Streams async enumerable disposal, and a performance improvement for BroadcastHub with high consumer counts.
Akka.Persistence.Query
Offset.FromEnd(int count) — "last-N events" query offset: Introduces Offset.FromEnd(int count), a new query-input-only offset type that begins a read journal query at the Nth event from the end of history rather than from the beginning. The offset is resolved at stream materialization into a concrete Sequence start position; no interface changes or wire-format changes are required. Includes opt-in TCK spec (FromEndOffsetSpec) for plugin authors.Akka.Streams Bug Fixes
Source.From(IAsyncEnumerable<T>) where the underlying enumerator could be disposed before all elements were delivered to downstream, causing ObjectDisposedException on high-throughput pipelines.Akka.Streams Performance
BroadcastHub when many consumers are attached by optimizing the internal consumer-wheel iteration, yielding measurable throughput improvements at high fan-out.1 contributor since release 1.5.69
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 1438 | 180 | Aaron Stannard |
Akka.NET v1.5.70-beta1 is a beta release with a new Offset.FromEnd query offset for Akka.Persistence.Query, bug fixes for Akka.Streams async enumerable disposal, and a performance improvement for BroadcastHub with high consumer counts.
Akka.Persistence.Query
Offset.FromEnd(int count) — "last-N events" query offset: Introduces Offset.FromEnd(int count), a new query-input-only offset type that begins a read journal query at the Nth event from the end of history rather than from the beginning. The offset is resolved at stream materialization into a concrete Sequence start position; no interface changes or wire-format changes are required. Includes opt-in TCK spec (FromEndOffsetSpec) for plugin authors.Akka.Streams Bug Fixes
Source.From(IAsyncEnumerable<T>) where the underlying enumerator could be disposed before all elements were delivered to downstream, causing ObjectDisposedException on high-throughput pipelines.Akka.Streams Performance
BroadcastHub when many consumers are attached by optimizing the internal consumer-wheel iteration, yielding measurable throughput improvements at high fan-out.1 contributor since release 1.5.69
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 1438 | 180 | Aaron Stannard |
This list of changes was auto generated.
Akka.NET v1.5.69 is a maintenance release with bug fixes for Akka.DistributedData state propagation, Akka.Core message rejection handling, and Akka.St
Akka.NET v1.5.69 is a maintenance release with bug fixes for Akka.DistributedData state propagation, Akka.Core message rejection handling, and Akka.Streams tracing reliability and backpressure cancellation.
Akka.Streams
.Async() actor boundary - Fixes #8243: With stream tracing enabled, per-element trace context was dropped at the publisher/subscriber actor boundary introduced by .Async(), leaving downstream stages with no ambient ActivityContext. Trace context now flows correctly across fused interpreter shells.OfferAsync(T, CancellationToken) to ISourceQueue<T> — enables cancellation of backpressured pending offers without emitting the cancelled element.Akka.Streams Bug Fixes
NullReferenceException in the GraphInterpreter when tracing across actor boundaries — the interpreter now safely handles null activity context references during stream teardown.Akka.Core
RejectOnType<TMessage> should use Rejection, not Failure - Fixes #8231: RejectOnType now correctly wraps rejected messages as Rejection rather than throwing a Failure, matching the expected stream contract.Akka.DistributedData
ORSet and LWWDictionary, leading to data inconsistencies during node merges.1 contributor since release 1.5.68
Akka.NET v1.5.68 is a maintenance release with bug fixes for Akka.IO TCP connection handling, Akka.Streams stream materialized task faults, and Akka.TestKit xUnit 3 parallel context management.
Akka.IO Bug Fixes
Tcp.CommandFailed when a scheduled connect retry throws - Fixes #8195: On Linux, a dropped TCP connection could permanently stall the user actor — it never received Tcp.Connected or Tcp.CommandFailed because a PlatformNotSupportedException thrown during a scheduled connect retry was swallowed by the HashedWheelTimerScheduler. The retry is now scheduled as a RetryConnect self-message via IWithTimers, ensuring any exception is surfaced to the commander as Tcp.CommandFailed and the connection actor stops cleanly. The pending timer is also canceled automatically when the actor stops, removing a latent use-after-dispose bug.Akka.Streams Bug Fixes
IgnoreSink, QueueSource, and LazySink now observe their internal materialized Task faults, preventing them from surfacing later as UnobservedTaskException events on the thread pool.Akka.TestKit Bug Fixes
SynchronizationContext in ActorCellKeepingSynchronizationContext - ActorCellKeepingSynchronizationContext now accepts an optional inner SynchronizationContext and delegates scheduling to it while wrapping callbacks with the cell-pinning window. This prevents test hangs in downstream consumers such as Akka.Hosting.TestKit whose async IHost lifecycle depends on xUnit v3's MaxConcurrencySyncContext scheduling.1 contributor since release 1.5.67
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 476 | 119 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.68, click here.
Akka.NET v1.5.69 is a maintenance release with bug fixes for Akka.DistributedData state propagation, Akka.Core message rejection handling, and Akka.Streams tracing reliability and backpressure cancellation.
Akka.Streams
.Async() actor boundary - Fixes #8243: With stream tracing enabled, per-element trace context was dropped at the publisher/subscriber actor boundary introduced by .Async(), leaving downstream stages with no ambient ActivityContext. Trace context now flows correctly across fused interpreter shells.OfferAsync(T, CancellationToken) to ISourceQueue<T> — enables cancellation of backpressured pending offers without emitting the cancelled element.Akka.Streams Bug Fixes
NullReferenceException in the GraphInterpreter when tracing across actor boundaries — the interpreter now safely handles null activity context references during stream teardown.Akka.Core
RejectOnType<TMessage> should use Rejection, not Failure - Fixes #8231: RejectOnType now correctly wraps rejected messages as Rejection rather than throwing a Failure, matching the expected stream contract.Akka.DistributedData
ORSet and LWWDictionary, leading to data inconsistencies during node merges.1 contributor since release 1.5.68
Akka.NET v1.5.68 is a maintenance release with bug fixes for Akka.IO TCP connection handling, Akka.Streams stream materialized task faults, and Akka.TestKit xUnit 3 parallel context management.
Akka.IO Bug Fixes
Tcp.CommandFailed when a scheduled connect retry throws - Fixes #8195: On Linux, a dropped TCP connection could permanently stall the user actor — it never received Tcp.Connected or Tcp.CommandFailed because a PlatformNotSupportedException thrown during a scheduled connect retry was swallowed by the HashedWheelTimerScheduler. The retry is now scheduled as a RetryConnect self-message via IWithTimers, ensuring any exception is surfaced to the commander as Tcp.CommandFailed and the connection actor stops cleanly. The pending timer is also canceled automatically when the actor stops, removing a latent use-after-dispose bug.Akka.Streams Bug Fixes
IgnoreSink, QueueSource, and LazySink now observe their internal materialized Task faults, preventing them from surfacing later as UnobservedTaskException events on the thread pool.Akka.TestKit Bug Fixes
SynchronizationContext in ActorCellKeepingSynchronizationContext - ActorCellKeepingSynchronizationContext now accepts an optional inner SynchronizationContext and delegates scheduling to it while wrapping callbacks with the cell-pinning window. This prevents test hangs in downstream consumers such as Akka.Hosting.TestKit whose async IHost lifecycle depends on xUnit v3's MaxConcurrencySyncContext scheduling.1 contributor since release 1.5.67
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 476 | 119 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.68, click here.
This list of changes was auto generated.
Akka.NET v1.5.68 is a maintenance release with bug fixes for Akka.IO TCP connection handling, Akka.Streams stream materialized task faults, and Akka.T
Akka.NET v1.5.68 is a maintenance release with bug fixes for Akka.IO TCP connection handling, Akka.Streams stream materialized task faults, and Akka.TestKit xUnit 3 parallel context management.
Akka.IO Bug Fixes
Tcp.CommandFailed when a scheduled connect retry throws - Fixes #8195: On Linux, a dropped TCP connection could permanently stall the user actor — it never received Tcp.Connected or Tcp.CommandFailed because a PlatformNotSupportedException thrown during a scheduled connect retry was swallowed by the HashedWheelTimerScheduler. The retry is now scheduled as a RetryConnect self-message via IWithTimers, ensuring any exception is surfaced to the commander as Tcp.CommandFailed and the connection actor stops cleanly. The pending timer is also canceled automatically when the actor stops, removing a latent use-after-dispose bug.Akka.Streams Bug Fixes
IgnoreSink, QueueSource, and LazySink now observe their internal materialized Task faults, preventing them from surfacing later as UnobservedTaskException events on the thread pool.Akka.TestKit Bug Fixes
SynchronizationContext in ActorCellKeepingSynchronizationContext - ActorCellKeepingSynchronizationContext now accepts an optional inner SynchronizationContext and delegates scheduling to it while wrapping callbacks with the cell-pinning window. This prevents test hangs in downstream consumers such as Akka.Hosting.TestKit whose async IHost lifecycle depends on xUnit v3's MaxConcurrencySyncContext scheduling.1 contributor since release 1.5.67
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 476 | 119 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.68, click here.
Akka.NET v1.5.68 is a maintenance release with bug fixes for Akka.IO TCP connection handling, Akka.Streams stream materialized task faults, and Akka.TestKit xUnit 3 parallel context management.
Akka.IO Bug Fixes
Tcp.CommandFailed when a scheduled connect retry throws - Fixes #8195: On Linux, a dropped TCP connection could permanently stall the user actor — it never received Tcp.Connected or Tcp.CommandFailed because a PlatformNotSupportedException thrown during a scheduled connect retry was swallowed by the HashedWheelTimerScheduler. The retry is now scheduled as a RetryConnect self-message via IWithTimers, ensuring any exception is surfaced to the commander as Tcp.CommandFailed and the connection actor stops cleanly. The pending timer is also canceled automatically when the actor stops, removing a latent use-after-dispose bug.Akka.Streams Bug Fixes
IgnoreSink, QueueSource, and LazySink now observe their internal materialized Task faults, preventing them from surfacing later as UnobservedTaskException events on the thread pool.Akka.TestKit Bug Fixes
SynchronizationContext in ActorCellKeepingSynchronizationContext - ActorCellKeepingSynchronizationContext now accepts an optional inner SynchronizationContext and delegates scheduling to it while wrapping callbacks with the cell-pinning window. This prevents test hangs in downstream consumers such as Akka.Hosting.TestKit whose async IHost lifecycle depends on xUnit v3's MaxConcurrencySyncContext scheduling.1 contributor since release 1.5.67
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 476 | 119 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.68, click here.
This list of changes was auto generated.
Akka.NET v1.5.67 is a hotfix release that reverts a breaking change to the persistence plugin contract introduced in v1.5.66.
Akka.NET v1.5.67 is a hotfix release that reverts a breaking change to the persistence plugin contract introduced in v1.5.66.
Akka.Persistence: Revert async WriteMessagesAsync/SaveAsync dispatch (#8163)
v1.5.66 added Task.Yield() inside AsyncWriteJournal.ExecuteBatch and SnapshotStore to move persistence plugin WriteMessagesAsync/SaveAsync calls off the actor thread. While this improved throughput in benchmarks, it silently broke the implicit contract that persistence plugins rely on — that the synchronous preamble of these methods executes in actor context.
This caused failures in plugins that:
Self inside WriteMessagesAsync (e.g. Akka.Persistence.Sql, Akka.Persistence.EventStore) — throws NotSupportedException off the actor threadDictionary<string, Task>) — concurrent access from actor thread and thread pool causes InvalidOperationExceptionThis release removes the Task.Yield() calls and restores the original dispatch behavior. A future version may reintroduce this optimization with a more targeted approach that preserves the plugin threading contract.
If you are on v1.5.66, upgrade to v1.5.67 immediately if you use any third-party persistence plugin.
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 1 | 3 | 17 | Aaron Stannard |
Akka.NET v1.5.67 is a hotfix release that reverts a breaking change to the persistence plugin contract introduced in v1.5.66.
Akka.Persistence: Revert async WriteMessagesAsync/SaveAsync dispatch (#8163)
v1.5.66 added Task.Yield() inside AsyncWriteJournal.ExecuteBatch and SnapshotStore to move persistence plugin WriteMessagesAsync/SaveAsync calls off the actor thread. While this improved throughput in benchmarks, it silently broke the implicit contract that persistence plugins rely on — that the synchronous preamble of these methods executes in actor context.
This caused failures in plugins that:
Self inside WriteMessagesAsync (e.g. Akka.Persistence.Sql, Akka.Persistence.EventStore) — throws NotSupportedException off the actor threadDictionary<string, Task>) — concurrent access from actor thread and thread pool causes InvalidOperationExceptionThis release removes the Task.Yield() calls and restores the original dispatch behavior. A future version may reintroduce this optimization with a more targeted approach that preserves the plugin threading contract.
If you are on v1.5.66, upgrade to v1.5.67 immediately if you use any third-party persistence plugin.
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 1 | 3 | 17 | Aaron Stannard |
This list of changes was auto generated.
Akka.NET v1.5.66 is a significant release with persistence bug fixes, major Akka.Streams improvements including OpenTelemetry trace propagation and no
Akka.NET v1.5.66 is a significant release with persistence bug fixes, major Akka.Streams improvements including OpenTelemetry trace propagation and non-blocking materialized values, and new serialization security controls.
Akka.Streams: OpenTelemetry Trace Context Propagation
Akka.Streams now propagates System.Diagnostics.Activity trace context end-to-end through stream graphs, including across async stage boundaries, fan-in merges, and fan-out broadcasts. This enables full distributed tracing visibility into stream pipelines when using OpenTelemetry.
For full documentation, see: https://getakka.net/articles/streams/stream-tracing.html
Akka.Streams: Non-Blocking Materialized-Value TaskCompletionSource
All TaskCompletionSource instances used for materialized values across Akka.Streams now use TaskCreationOptions.RunContinuationsAsynchronously, eliminating potential deadlocks and thread-pool starvation when continuations run synchronously on completion.
Akka.Persistence
Akka.Core
New Features
allow-unregistered-types serialization setting — when set to false, FindSerializerForType throws SerializationException if no explicit serializer binding exists, rather than falling back to the default serializer.Documentation
4 contributors since release 1.5.65
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 18 | 3962 | 991 | Aaron Stannard |
| 8 | 1627 | 1952 | Gregorius Soedharmo |
| 6 | 214 | 177 | Matt Kotsenas |
| 1 | 55 | 39 | schdooz |
To see the full set of changes in Akka.NET v1.5.66, click here.
Akka.NET v1.5.66 is a significant release with persistence bug fixes, major Akka.Streams improvements including OpenTelemetry trace propagation and non-blocking materialized values, and new serialization security controls.
Akka.Streams: OpenTelemetry Trace Context Propagation
Akka.Streams now propagates System.Diagnostics.Activity trace context end-to-end through stream graphs, including across async stage boundaries, fan-in merges, and fan-out broadcasts. This enables full distributed tracing visibility into stream pipelines when using OpenTelemetry.
For full documentation, see: https://getakka.net/articles/streams/stream-tracing.html
Akka.Streams: Non-Blocking Materialized-Value TaskCompletionSource
All TaskCompletionSource instances used for materialized values across Akka.Streams now use TaskCreationOptions.RunContinuationsAsynchronously, eliminating potential deadlocks and thread-pool starvation when continuations run synchronously on completion.
Akka.Persistence
Akka.Core
New Features
allow-unregistered-types serialization setting — when set to false, FindSerializerForType throws SerializationException if no explicit serializer binding exists, rather than falling back to the default serializer.Documentation
4 contributors since release 1.5.65
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 18 | 3962 | 991 | Aaron Stannard |
| 8 | 1627 | 1952 | Gregorius Soedharmo |
| 6 | 214 | 177 | Matt Kotsenas |
| 1 | 55 | 39 | schdooz |
To see the full set of changes in Akka.NET v1.5.66, click here.
This list of changes was auto generated.
Akka.NET v1.5.65 is a maintenance release with important bug fixes for Akka.Cluster.Sharding, Akka.Core configuration, and Akka.TestKit.
Akka.NET v1.5.65 is a maintenance release with important bug fixes for Akka.Cluster.Sharding, Akka.Core configuration, and Akka.TestKit.
Akka.Cluster.Sharding Bug Fixes
ShardStopped safety net from #8055 fires spuriously after every successful rebalance, causing the same shard to be allocated to 2+ nodes simultaneously.AwaitingLease stashes HandOff messages indefinitely, preventing the coordinator from reclaiming stuck shards.StartShardRebalanceIfNeeded silently skips shards during graceful shutdown when a rebalance is already in progress.Akka.Core Bug Fixes
Settings.InjectTopLevelFallback that could cause configuration corruption under concurrent access.Akka.TestKit Bug Fixes
IAsyncLifetime.1 contributor since release 1.5.64
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 263 | 19 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.65, click here.
Akka.NET v1.5.65 is a maintenance release with important bug fixes for Akka.Cluster.Sharding, Akka.Core configuration, and Akka.TestKit.
Akka.Cluster.Sharding Bug Fixes
ShardStopped safety net from #8055 fires spuriously after every successful rebalance, causing the same shard to be allocated to 2+ nodes simultaneously.AwaitingLease stashes HandOff messages indefinitely, preventing the coordinator from reclaiming stuck shards.StartShardRebalanceIfNeeded silently skips shards during graceful shutdown when a rebalance is already in progress.Akka.Core Bug Fixes
Settings.InjectTopLevelFallback that could cause configuration corruption under concurrent access.Akka.TestKit Bug Fixes
IAsyncLifetime.1 contributor since release 1.5.64
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 3 | 263 | 19 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.65, click here.
This list of changes was auto generated.
Akka.NET v1.5.64 is a maintenance release focused on completing the xUnit 3 migration for TestKit packages, removing the FluentAssertions transitive d
Akka.NET v1.5.64 is a maintenance release focused on completing the xUnit 3 migration for TestKit packages, removing the FluentAssertions transitive dependency, and merging the Multi-Node Test Runner back into the core repository.
FluentAssertions Removal
Due to the recent commercialization of FluentAssertions, we have completed the removal of the FluentAssertions transitive dependency from all Akka.TestKit.* packages. If your tests relied on the transitive FluentAssertions dependency provided by Akka.NET TestKit packages, you will need to add a direct reference to FluentAssertions in your own project.
TestKit Package Naming Convention
As part of the ongoing xUnit 3 migration, TestKit packages now follow a naming convention: packages with the .Xunit postfix provide xUnit 3 support, while packages with the .Xunit2 postfix provide xUnit 2 support.
Akka.TestKit.* packages.Akka.Cluster.TestKit to xUnit 3.Akka.MultiNode.TestAdapter to xUnit 3.1 contributor since release 1.5.63
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 5 | 17427 | 3874 | Gregorius Soedharmo |
To see the full set of changes in Akka.NET v1.5.64, click here.
Akka.NET v1.5.64 is a maintenance release focused on completing the xUnit 3 migration for TestKit packages, removing the FluentAssertions transitive dependency, and merging the Multi-Node Test Runner back into the core repository.
FluentAssertions Removal
Due to the recent commercialization of FluentAssertions, we have completed the removal of the FluentAssertions transitive dependency from all Akka.TestKit.* packages. If your tests relied on the transitive FluentAssertions dependency provided by Akka.NET TestKit packages, you will need to add a direct reference to FluentAssertions in your own project.
TestKit Package Naming Convention
As part of the ongoing xUnit 3 migration, TestKit packages now follow a naming convention: packages with the .Xunit postfix provide xUnit 3 support, while packages with the .Xunit2 postfix provide xUnit 2 support.
Akka.TestKit.* packages.Akka.Cluster.TestKit to xUnit 3.Akka.MultiNode.TestAdapter to xUnit 3.1 contributor since release 1.5.63
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 5 | 17427 | 3874 | Gregorius Soedharmo |
To see the full set of changes in Akka.NET v1.5.64, click here.
This list of changes was auto generated.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Akka.NET v1.5.47 is a minor patch containing several stability improvements to Akka.TestKit.
Akka.NET v1.5.47 is a minor patch containing several stability improvements to Akka.TestKit.
4 contributors since release 1.5.46
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 7 | 4185 | 3156 | Aaron Stannard |
| 5 | 352 | 142 | Gregorius Soedharmo |
| 1 | 2 | 2 | dependabot[bot] |
| 1 | 13 | 22 | Simon Cropp |
To see the full set of changes in Akka.NET v1.5.47, click here
Akka.NET v1.5.46 is a minor patch containing a fix for the Akka.IO.Dns extension.
Akka.NET v1.5.46 is a minor patch containing a fix for the Akka.IO.Dns extension.
3 contributors since release 1.5.45
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 1 | 4 | 0 | Aaron Stannard |
| 1 | 1 | 1 | Pavel Anpin |
| 1 | 1 | 0 | Gregorius Soedharmo |
To see the full set of changes in Akka.NET v1.5.46, click here
Akka.NET v1.5.45 is a minor patch containing bug fixes for Core Akka and Akka.Cluster.Sharding plugin.
Akka.NET v1.5.45 is a minor patch containing bug fixes for Core Akka and Akka.Cluster.Sharding plugin.
ShardingConsumerControllerImpl shutdownFailure to Exception for Ask<object>Settings.InjectTopLevelFallback race conditionSupervision Strategy For Sharding Remembered Entities
SupervisorStrategy property to ClusterShardingSettings. You can use any type of SupervisionStrategy, but it is recommended that you inherit ShardSupervisionStrategy if you're making your own custom supervision strategy.SupervisionStrategy decisions and stops remembered entities if the SupervisionStrategy.Decider returned a Directive.Stop or if there is a maximum restart retry limitation.4 contributors since release 1.5.44
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 10 | 823 | 108 | Gregorius Soedharmo |
| 1 | 7 | 13 | Simon Cropp |
| 1 | 60 | 18 | ondravondra |
| 1 | 1 | 0 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.45, click here
Akka.NET v1.5.44 is a minor patch that contains a bug fix to the Akka.Persistence plugin.
Akka.NET v1.5.44 is a minor patch that contains a bug fix to the Akka.Persistence plugin.
3 contributors since release 1.5.43
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 10 | 438 | 323 | Gregorius Soedharmo |
| 2 | 4 | 2015 | Aaron Stannard |
| 1 | 47 | 43 | Simon Cropp |
To see the full set of changes in Akka.NET v1.5.44, click here.
Akka.NET v1.5.43 contains several bug fixes and also adds new quality of life features.
Akka.NET v1.5.43 contains several bug fixes and also adds new quality of life features.
ReadJournalFor API methodNew Akka.Analyzer Rules
We've added three new Akka.Analyzer rules, AK2003, AK2004, and AK2005. All of them addresses the same Akka anti-pattern where a void async delegate is being passed into the ReceiveActor.Receive<T>() (AK2003), IDslActor.Receive<T>() (AK2004), and ReceivePersistentActor.Command<T>() (AK2005) message handlers.
Here are the documentation for each new rules:
4 contributors since release 1.5.42
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 7 | 435 | 19 | Gregorius Soedharmo |
| 2 | 26 | 23 | Mark Dinh |
| 1 | 49 | 136 | Simon Cropp |
| 1 | 4 | 0 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.43, click here.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →