Skip to content
CAI
Software that uses CAICheck a score

Horusiath/Akkling

51.8

Adequate · 24 September 2026

13.3k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.