Akka.Remote.TestKit
1.5.72
Prefix Reserved
See the version list below for details.
dotnet add package Akka.Remote.TestKit --version 1.5.72
NuGet\Install-Package Akka.Remote.TestKit -Version 1.5.72
<PackageReference Include="Akka.Remote.TestKit" Version="1.5.72" />
<PackageVersion Include="Akka.Remote.TestKit" Version="1.5.72" />
<PackageReference Include="Akka.Remote.TestKit" />
paket add Akka.Remote.TestKit --version 1.5.72
#r "nuget: Akka.Remote.TestKit, 1.5.72"
#:package Akka.Remote.TestKit@1.5.72
#addin nuget:?package=Akka.Remote.TestKit&version=1.5.72
#tool nuget:?package=Akka.Remote.TestKit&version=1.5.72
Akka.NET
![]()
Akka.NET is a .NET port of the popular Akka project from the Scala / Java community. We are an idiomatic .NET implementation of the actor model built on top of the .NET Common Language Runtime.
- Website: https://getakka.net/
- Twitter 🐦: AkkaDotNet
- Discussions 📣: Akka.NET GitHub Discussions
- Chat 💬: Akka.NET on Discord
- StackOverflow ✔️: Akka.NET on StackOverflow
Akka.NET is a .NET Foundation project.
How is Akka.NET Used?
Akka.NET can be used in-process or inside large, distributed real-time systems; we support a wide variety of use cases.
Akka.NET can be used to solve the following types of problems:
- Concurrency - Akka.NET actors only process messages one-at-a-time and they do so in first in, first out (FIFO) order; this means that any application state internal to an actor is automatically thread-safe without having to use
locks or any other shared-memory synchronization mechanisms. - Stream Processing - Akka.NET actors and Akka.Streams make it easy to build streaming applications, used for processing incoming streams of data or incoming streams of live events such as UI or network events inside native applications.
- Event-Driven Programming - actors make it easy to build event-driven applications, as actors' message-processing routines naturally express these types of designs.
- Event Sourcing and CQRS - Akka.Persistence, used by actors to make their state re-entrant and recoverable across restarts or migrations between nodes, natively supports event sourcing. Akka.Persistence.Query can be used to compute CQRS-style projections and materialized views from Akka.Persistence data.
- Location Transparency - Akka.Remote makes it simple for actors in remote processes to transparently communicate with each other.
- Highly Available, Fault-Tolerant Distributed Systems - Akka.Cluster, Akka.Cluster.Sharding, and other tools built on top of Akka.Cluster make it possible to build highly available and fault-tolerant distributed systems by leveraging peer-to-peer programming models with topology-aware message routing and distribution.
- Low Latency, High Throughput - Akka.NET aims to be low latency and high throughput, processing 10s millions of messages per second in-memory and hundreds of thousands of messages per second over remote connections.
Where Can I Learn Akka.NET?
You can start by taking the Akka.NET Bootcamp, but there are many other great learning resources for Akka.NET Online.
- Petabridge's Akka.NET Videos on YouTube
- ".NET Conf - When and How to Use the Actor Model An Introduction to Akka.NET Actors"
- Reactive Applications with Akka.NET
- Akka.NET Succinctly
Build Status
| Stage | Status | |
|---|---|---|
| NuGet Pack | ||
| .NET Framework Unit Tests | ||
| .NET Unit Tests (Windows) | ||
| .NET Unit Tests (Linux) | ||
| .NET MultiNode Tests (Windows) | ||
| .NET MultiNode Tests (Linux) | ||
| Docs |
Install Akka.NET via NuGet
If you want to include Akka.NET in your project, you can install it directly from NuGet
To install Akka.NET Distributed Actor Framework, run the following command in the Package Manager Console
PM> Install-Package Akka.Hosting
Akka.Hosting includes the base Akka NuGet package and also provides an easy interface to integrate Akka.NET with the most-used parts of the Microsoft.Extensions ecosystem: Configuration, Logging, Hosting, and DependencyInjection. We encourage developers to adopt it.
And if you need F# support:
PM> Install-Package Akka.FSharp
Akka.NET Project Templates
To create your own Akka.NET projects using our templates (Akka.Templates), install them via the dotnet CLI:
dotnet new install "Akka.Templates::*"
This will make our templates available via dotnet new on the CLI and as new project templates inside any .NET IDE such as Visual Studio or JetBrains Rider. You can view the full list of templates included in our package here: https://github.com/akkadotnet/akkadotnet-templates#available-templates
Builds
Please see Building Akka.NET.
To access nightly Akka.NET builds, please see the instructions here.
Support
If you need help getting started with Akka.NET, there's a number of great community resources online:
- Subscribe to the Akka.NET project feed on Twitter: https://twitter.com/AkkaDotNet (@AkkaDotNet)
- Join the Akka.NET Discord: https://discord.gg/GSCfPwhbWP
- Ask Akka.NET questions on Stack Overflow: http://stackoverflow.com/questions/tagged/akka.net
If you and your company are interested in getting professional Akka.NET support, you can contact Petabridge for dedicated Akka.NET support.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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 was computed. 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 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Akka.Remote (>= 1.5.72)
- Akka.TestKit.Xunit (>= 1.5.72)
- Google.Protobuf (>= 3.26.1)
- System.Collections.Specialized (>= 4.3.0)
-
net6.0
- Akka.Remote (>= 1.5.72)
- Akka.TestKit.Xunit (>= 1.5.72)
- Google.Protobuf (>= 3.26.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Akka.Remote.TestKit:
| Package | Downloads |
|---|---|
|
Akka.Cluster.TestKit
Helper classes for combining the Akka.Remote.TestKit with Akka.Cluster |
|
|
Akkatecture.MultiNode.Shared
Wrapper for akka.net multinode test runner shared libraries |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Akka.Remote.TestKit:
| Repository | Stars |
|---|---|
|
ThembisileNGQ/Akkatecture
a cqrs and event sourcing framework for dotnet core using akka.net
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.6.0-beta1 | 38 | 10/2/2026 |
| 1.5.72 | 33 | 10/3/2026 |
| 1.5.71 | 263 | 8/27/2026 |
| 1.5.70 | 359 | 7/3/2026 |
| 1.5.70-beta2 | 190 | 6/30/2026 |
| 1.5.70-beta1 | 203 | 6/23/2026 |
| 1.5.69 | 226 | 6/12/2026 |
| 1.5.68 | 236 | 5/17/2026 |
| 1.5.67 | 242 | 4/26/2026 |
| 1.5.66 | 212 | 4/24/2026 |
| 1.5.65 | 251 | 4/10/2026 |
| 1.5.64 | 246 | 3/31/2026 |
| 1.5.63 | 137 | 3/23/2026 |
| 1.5.62 | 204 | 3/3/2026 |
| 1.5.61 | 192 | 2/26/2026 |
| 1.5.60 | 303 | 2/10/2026 |
| 1.5.59 | 309 | 1/26/2026 |
| 1.5.58 | 547 | 1/8/2026 |
| 1.5.57 | 600 | 12/11/2025 |
| 1.5.57-beta2 | 756 | 12/3/2025 |
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**
* Akka.Hosting moves into the akka.net repository - The six Hosting packages now live under `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](https://getakka.net/articles/hosting/index.html). The [akkadotnet/Akka.Hosting](https://github.com/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`](https://github.com/akkadotnet/Akka.Hosting/commit/cefe3c4ccdc3149c2a2b1c8980f956b303bf1b1a).
* Microsoft.Extensions minimum version moves to 10.0 - The `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](https://github.com/advisories/GHSA-g94r-2vxg-569j).
**Akka.TestKit / Akka.TestKit.Xunit**
* [TestKit.Xunit: implement the async dispose chain](https://github.com/akkadotnet/akka.net/pull/8545) - `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.
* [Put the DotNetty batching override under akka.remote](https://github.com/akkadotnet/akka.net/pull/8561) - The TestKit's write-batching override now lands under the key the transport actually reads. Every TestKit-hosted and multi-node test system runs with DotNetty write batching genuinely off for the first time.
* [Add TestKitBase.ShutdownAsync](https://github.com/akkadotnet/akka.net/pull/8499) - New public `TestKitBase.ShutdownAsync` overloads shut an `ActorSystem` down without blocking a thread pool worker.
* [Eliminate the MultiNodeTestRunner conductor port race](https://github.com/akkadotnet/akka.net/pull/8515) - The conductor node now binds port 0 and reports the real port over a stdout sentinel, instead of guessing a free port in advance, removing a race that could leave every other node waiting out a timeout against a conductor that never started. Adds the public `ConductorBindException` and `ConductorPortSentinel` types, and a 20-minute backstop that kills a node process that never exits on its own.
**Akka.Streams**
* [Tcp Unbind completes immediately when idle](https://github.com/akkadotnet/akka.net/pull/8570) - `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**
* [Arm the remember-entities write timeout with updating-state-timeout](https://github.com/akkadotnet/akka.net/pull/8574) - Remember-entities writes are now timed against `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.
* [A coordinator hand-over only stops the local ShardRegion when the node is leaving](https://github.com/akkadotnet/akka.net/pull/8586) - Fixes [#8583](https://github.com/akkadotnet/akka.net/issues/8583): a routine singleton hand-over during a rolling restart no longer stops a `ShardRegion` that isn't leaving the cluster, which used to leave that region permanently unusable for the life of the process.
**Akka.DistributedData**
* [Fix Replicator.IsKnownNode to trust members first seen as Leaving/Exiting/Downed](https://github.com/akkadotnet/akka.net/pull/8582) - A `Replicator` started after a member had already begun leaving no longer silently drops that member's writes and gossip.
**Akka.Cluster**
* [Prevent removed cluster members from being resurrected by stale gossip](https://github.com/akkadotnet/akka.net/pull/8484) - Gossip now carries UID-scoped removal tombstones and retains them for 24 hours by default (`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.
* [Akka.Cluster: make Cluster extension startup non-blocking](https://github.com/akkadotnet/akka.net/pull/8359) - The `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.
* [Akka.Cluster: route user commands through /system/cluster for the extension's lifetime; LeaveAsync re-sends its Leave](https://github.com/akkadotnet/akka.net/pull/8580) - All user-issued cluster commands (`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**
* [Bugfix5962Spec de-flaked for the non-blocking cluster startup](https://github.com/akkadotnet/akka.net/pull/8398) - the spec's raw 1 second `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.
* De-flaked a large batch of Cluster, Cluster.Sharding, Cluster.Tools, DistributedData, Streams, and Remote specs, both single-process and multi-node, to remove timing-sensitive failures under load.
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](https://github.com/akkadotnet/akka.net/milestone/155?closed=1).