Horusiath/Akkling
51.8
Adequate · 24 September 2026
13.3k
lines of production code
F#
primary language
5
measurements over time
What this system is
Akkling is an F\#-first library that provides idiomatic, type-safe wrappers for the Akka.NET actor framework. It enables developers to build distributed, persistent, and streaming applications using F\#-specific features like computation expressions and discriminated unions. The system covers core Akka.NET capabilities including cluster sharding, distributed data, and testing utilities, all while maintaining compatibility with modern .NET versions.
How it got here
2015 — Typed actor model and .NET 8 upgrade
6 changes.
This period focused on modernizing the Akkling library by upgrading to .NET 8.0 and Akka.NET 1.5.63. The core development centered on introducing a fully typed actor model with F\# computation expressions, alongside comprehensive test coverage and new persistence wrappers.
2016–2026 — F\# wrapper expansion
6 changes.
This period focused on expanding the Akkling library with comprehensive F\#-friendly wrappers for Akka.NET's core features, including cluster sharding, streams, distributed data, and Hocon configuration. The work also introduced new testing utilities (TestKit) to support functional testing patterns in F\#.
Features
Add Akka.NET cluster sharding and singleton abstractions
The Akkling library introduces new modules for Akka.NET cluster features, including cluster sharding, cluster singletons, and distributed pub/sub. The sharding module provides typed entity references (IEntityRef) and factory functions (spawnSharded, spawnShardedAsync, spawnShardedProxy) to manage distributed actors, alongside a TypedMessageExtractor that supports the new IMessageExtractor interface with a messageHint-based ShardId computation. Additionally, helpers for cluster singletons and a receptionist for cluster clients are added.
src/Akkling.Cluster.Sharding · high confidence
Add F\# wrappers for Akka.NET test utilities
New F\#-friendly test utilities are introduced for Akka.NET, providing idiomatic wrappers for the standard test kit (including message and event filtering, actor lifecycle, and timing helpers) and the Reactive Streams TCK test kit (including publisher, subscriber, and sink/source probes). These additions enable developers to write tests in F\# using xUnit with a more natural, functional API.
src/Akkling.Streams.TestKit.Xunit, src/Akkling.TestKit.Xunit · high confidence
Added F\# wrappers for Akka.NET persistence and delivery semantics
Introduced new files in the Akkling.Persistence module, including AtLeastOnceDelivery.fs, Patterns.fs, PersistentActor.fs, and Spawning.fs. These changes provide F\#-friendly wrappers for Akka.NET's persistence API, offering typed interfaces for persistent actors, support for at-least-once delivery semantics, and helper functions for snapshot and event handling.
src/Akkling.Persistence · high confidence
Added new Akka.NET example scripts
Added a collection of new F\# example scripts demonstrating various Akka.NET capabilities, including basic actor behavior, lifecycle events, persistence, streams, remote actors, cluster sharding, distributed data, and TCP I/O.
examples · high confidence
Adds Hocon configuration support for Akka.NET actors
The Akkling.Hocon library now includes new F\# modules to configure Akka.NET actors via Hocon. This adds type-safe builders for actor dispatchers (including fork-join and thread-pool executors), mailbox settings (capacity, timeouts, stash), deployment configurations (resizers, routees), router types (round-robin, random, consistent-hashing, etc.), serialization bindings and identifiers, and inbox settings. These changes enable users to define actor system and actor-specific configurations in Hocon format.
src/Akkling.Hocon · high confidence
Introduced Akkling.TestKit.Xunit2 and Akkling.Streams.TestKit.Xunit2 libraries
Added two new F\# wrapper libraries for Akka.NET testing: Akkling.TestKit.Xunit2 and Akkling.Streams.TestKit.Xunit2. The former provides a functional API for standard Akka.NET test scenarios (e.g., expectMsg, receiveOne, event filters), while the latter exposes Reactive Streams (TCK) test utilities (e.g., publisher/subscriber probes) for stream testing.
src/Akkling.Streams.TestKit.Xunit2, src/Akkling.TestKit.Xunit2 · high confidence
Introduces F\# wrappers for Akka.NET Streams
The Akkling.Streams module now provides a comprehensive set of F\#-friendly wrappers for Akka.NET's Stream processing API. This includes functional interfaces for Source, Sink, and Flow operations, alongside dedicated modules for BidiFlow, Framing, GraphDsl, KillSwitch, and Stage logic. Users can now construct and manipulate streams using idiomatic F\# patterns, such as computation expressions for graph building and async/await integration for materialized values.
src/Akkling.Streams · high confidence
Introduction of typed actor model and computation expressions
The Akkling library introduces a fully typed actor model, replacing the previous untyped interfaces with generic \IActorRef\<'Message\>\ and \ICanTell\<'Message\>\ interfaces that enforce message type safety. This change brings a new \ActorBuilder\ that enables F\# computation expressions (using \let!\ bindings) for defining actor behaviors, allowing developers to write asynchronous and synchronous message handling logic in a more idiomatic F\# style. The \Actors\ module now exposes a typed \Actor\<'Message\>\ context, and the \Props\ system is updated to work with these new typed effects, fundamentally changing how actors are defined and interact with the Akka.NET runtime.
src/Akkling · high confidence
New F\# wrappers for Akka.NET Distributed Data (CRDTs and consistency)
The Akkling.DistributedData module now provides a comprehensive set of F\#-friendly wrappers for Akka.NET's distributed data types, including Flag, GCounter, PNCounter, GSet, ORSet, ORMap, and ORMultiMap, along with convenience functions for read/write consistency levels and async operations on the DistributedData actor.
src/Akkling.DistributedData · high confidence
Behavioural changes
Akkling upgraded to Akka.NET 1.5.37 and .NET 8.0
The library has been upgraded to use Akka.NET version 1.5.37, bringing the latest features and fixes from the Akka ecosystem. Additionally, the project has been updated to target .NET 8.0, replacing the previous .NET 6.0 target framework. These changes ensure compatibility with the latest Akka.NET APIs and modern .NET runtime features.
(repo-wide) · high confidence
Test coverage
Added comprehensive test coverage for Akkling core features
Added new test files in the Akkling.Tests project to verify core functionality, including actor behavior (recursive functions, message handling, lifecycle events), computation expressions (try/with/finally, exception handling), async support for actors and persistent actors, configuration parsing, serialization of typed actor refs and discriminated unions, and stream operators (Graph DSL, deduplicate, concat, expand).
tests · high confidence
Dependencies
Updated Akka.NET dependencies to version 1.5.63
The project files for the Akkling library and its sub-modules (including Akkling, Akkling.Hocon, Akkling.Persistence, Akkling.Streams, Akkling.Cluster.Sharding, Akkling.DistributedData, and the various TestKit packages) have been updated to reference Akka.NET packages at version 1.5.63. This ensures the F\# wrapper aligns with the latest stable release of the Akka.NET framework, providing access to the latest features, performance improvements, and bug fixes available in that version.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 47 → 52 (+4.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 73 → 75 (+1.5)
- Architecture 100 → 94 (-5.8)
- Maturity 47 → 47 (-0.2)
- Readiness 26 → 36 (+10.3)
- Security 100 → 100 (+0.0)
Resolved (39)
- Dependency hygiene not measured — no packages were read
- Duplicated block (10 lines × 2) (src/Akkling.Hocon/Shared.Udp.fs)
- Duplicated block (10 lines × 2) (src/Akkling.Streams.TestKit.Xunit/Library.fs)
- Duplicated block (11 lines × 2) (src/Akkling.Hocon/Cluster.Metrics.fs)
- Duplicated block (11 lines × 2) (src/Akkling/ActorRefs.fs)
- Duplicated block (12 lines × 2) (src/Akkling.Persistence/PersistentActor.fs)
- Duplicated block (12 lines × 2) (src/Akkling/ActorRefs.fs)
- Duplicated block (13 lines × 2) (src/Akkling.Hocon/Persistence.SnapshotStore.fs)
- Duplicated block (13 lines × 2) (src/Akkling.Hocon/Shared.Udp.fs)
- Duplicated block (14 lines × 2) (src/Akkling.Hocon/Remote.WatchFailureDetector.fs)
- Duplicated block (17 lines × 2) (src/Akkling.Streams/Source.fs)
- Duplicated block (17 lines × 2) (src/Akkling.TestKit.Xunit/TestKit.fs)
- Duplicated block (18 lines × 2) (src/Akkling.Hocon/Persistence.SnapshotStore.fs)
- Duplicated block (20 lines × 2) (src/Akkling.Hocon/Remote.WatchFailureDetector.fs)
- Duplicated block (25 lines × 2) (src/Akkling.Hocon/Actor.Mailbox.fs)
- Duplicated block (5 lines × 2) (src/Akkling.Hocon/Remote.DotNetty.fs)
- Duplicated block (5 lines × 2) (src/Akkling.Streams/Source.fs)
- Duplicated block (5 lines × 2) (src/Akkling.Streams/Source.fs)
- Duplicated block (5 lines × 2) (src/Akkling.TestKit.Xunit/TestKit.fs)
- Duplicated block (5 lines × 3) (src/Akkling.Streams/Graph.fs)
- …and 19 more
New (43)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (src/Akkling.Streams.TestKit.Xunit/Library.fs)
- Duplicated block (11 lines × 2) (src/Akkling.Hocon/Shared.Tcp.fs)
- Duplicated block (11 lines × 2) (src/Akkling.Persistence/PersistentActor.fs)
- Duplicated block (11 lines × 2) (src/Akkling.Persistence/PersistentActor.fs)
- Duplicated block (11 lines × 2) (src/Akkling/ActorRefs.fs)
- Duplicated block (11–16 lines × 2) (src/Akkling.Hocon/Actor.Deployment.fs)
- Duplicated block (13 lines × 2) (src/Akkling.Hocon/Akka.fs)
- Duplicated block (13–20 lines × 2) (src/Akkling.Hocon/Persistence.Journal.fs)
- Duplicated block (14 lines × 2) (src/Akkling.Hocon/Persistence.Journal.fs)
- Duplicated block (14 lines × 2) (src/Akkling.Persistence/PersistentActor.fs)
- Duplicated block (14 lines × 2) (src/Akkling/ActorRefs.fs)
- Duplicated block (14 lines × 4) (src/Akkling.Hocon/Shared.Cluster.fs)
- Duplicated block (15 lines × 2) (src/Akkling.Persistence/PersistentActor.fs)
- Duplicated block (17 lines × 2) (src/Akkling.Streams.TestKit.Xunit/Library.fs)
- Duplicated block (18 lines × 2) (src/Akkling.Hocon/Persistence.PluginFallback.fs)
- Duplicated block (18 lines × 3) (src/Akkling.Hocon/Cluster.FailureDetector.fs)
- Duplicated block (18–19 lines × 2) (src/Akkling.Hocon/Cluster.FailureDetector.fs)
- Duplicated block (26 lines × 2) (src/Akkling.TestKit.Xunit/TestKit.fs)
- …and 23 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Horusiath/Akkling was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 213a5b14b46c6bc76115c75553c11c1b8c56d0b6 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-923689c465cf.