Skip to content
CAI
Software that uses CAICheck a score

cloudmark/cats-actors

61.3

Adequate · 20 September 2026

7k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is the SuprNation actor framework, a library providing a Cats Effect-based actor runtime for Scala 2.13 and Scala 3 across JVM, JavaScript, and Native platforms. It supports core actor features such as message passing, scheduled timers, and finite state machines, while offering platform-specific mailbox implementations and a test kit for verification. The project has recently undergone significant refactoring to modernize its build infrastructure and align with Typelevel standards.

Features

Added microbenchmark harness for actor performance testing

A new JMH-based benchmarking suite has been introduced to measure the performance of the actor system. This includes a support trait for managing actor system lifecycle and a specific benchmark for the 'ask' pattern, allowing users to evaluate the throughput and latency of actor message handling.

benchmark · high confidence

Initial release of the SuprNation actor framework

This release introduces the core \shared\ module for the SuprNation actor library, providing a Cats Effect-based actor system. Key additions include the \FiberActorRefProvider\ for actor creation, a \Timers\ trait with \TimerSchedulerImpl\ for scheduled message delivery, and a \Broadcast\/\BroadcastAsk\ system for sending messages to multiple actors in sequence or parallel. The release also adds a \FSM\ (Finite State Machine) implementation with state management and transition handling, a \TrackingActor\ for debugging and lifecycle monitoring, and a \TestKit\ with utilities like \awaitCond\ and \expectMsg\ for testing actors. Platform-specific mailbox queues are defined via the \MailboxQueue\ trait to support Scala Native and JS.

shared · high confidence

Release 2.2.0 with Scala 3, Scala Native/JS support, and updated documentation

The library has been updated to version 2.2.0, adding support for Scala 3 alongside Scala 2.13, and extending platform support to include Scala Native and Scala.js with platform-specific mailbox queues. The release includes a comprehensive rewrite of the README to document the new installation methods (SBT, Maven, Bazel) and API usage, updates the Code of Conduct to align with Typelevel standards, and configures the build to publish all supported Scala versions via JitPack.

(repo-wide) · high confidence

Removals

Removal of FSM and TrackingActor debug infrastructure

The Finite State Machine (FSM) implementation and the associated TrackingActor debug component have been removed from the actor framework. This eliminates the ability to build actors using the previous FSM builder syntax and removes the internal tracking capabilities that monitored actor lifecycle events (such as init, preStart, postStop, and restarts) for debugging purposes.

src/main/scala/com/suprnation/actor/fsm · high confidence

Removal of FSMBuilder Semigroup instance

The \FSMBuilderInstances.scala\ file, which provided a \Semigroup\ instance for combining \FSMBuilder\ configurations, has been removed. This eliminates the ability to merge two FSM builders into a single composite builder using the \Semigroup\ abstraction, potentially requiring users to handle FSM composition or configuration merging through other means.

src/main/scala/com/suprnation/typelevel/fsm/instances · high confidence

Removal of FSMStateSyntax DSL

The FSMStateSyntax file, which provided implicit classes and methods for constructing FSM states (such as using, withNotification, and when), has been removed. This eliminates the previous syntax for defining state transitions and timeouts within the FSM builder.

src/main/scala/com/suprnation/typelevel/fsm/syntax · high confidence

Removal of legacy FiberActorRefProvider and Props abstractions

The \FiberActorRefProvider\ trait and its \LocalActorRefProvider\ implementation, along with the \Props\ factory and sealed trait, have been removed from the actor system. This eliminates the previous mechanism for creating actor instances via \Props\ and the associated reference provider, indicating a shift in how actors are instantiated and managed within the library.

src/main/scala/com/suprnation/actor · high confidence

Behavioural changes

Platform-specific actor mailbox and utility implementations for JVM, JS, and Native

The actor runtime now provides distinct implementations for core utilities and mailbox queues tailored to each target platform. On the JVM, mailbox queues utilize \java.util.concurrent.LinkedTransferQueue\ for blocking operations, while both Scala.js and Scala Native use \cats.effect.std.Queue\ for non-blocking async handling. ID generation also varies by platform: the JVM uses \java.util.UUID\ for standard UUIDs, whereas JS and Native rely on \scala.util.Random\ for formatted hex strings. Additionally, the internal \Unsafe\ utility has been refactored to operate on \ReplyingActor\ types instead of the generic \Actor\, ensuring consistent context and self-reference injection across all platforms.

js, jvm, native · high confidence

Test coverage

Added tests for ControlledTestKit simulated-time actor testing; Removal of actor test suite files.

Dependencies

Upgrade to Scala 3 and multi-platform support with cats-effect 3.7.0

The library now supports Scala 3 (3.3.7) alongside Scala 2.13, enabling cross-compilation for JVM, JavaScript, and Native platforms. The core dependency on cats-effect has been upgraded to version 3.7.0, and the build structure has been reorganized to include separate artifacts for the main library and a testkit module, both available across the supported platforms.

(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

Baseline

  • First survey — no prior run to compare against. CAI 61.

Lenses

  • Code Health 87
  • Architecture 89
  • Maturity 57
  • Readiness 59
  • Security 59

Changes since last survey

  • 39 commits — 28 feature/other, 11 fixes

By area

  • src/main — 17 commits
  • (root) — 12 commits
  • src/test — 5 commits
  • shared/src — 4 commits
  • testkit/shared — 1 commit

Notable commits

  • fix: Bugfix escalateDefault, README, and ifM (#39)
  • fix: Fix: Resolve potential deadlock in suspended actor scenario. (#1)
  • fix: Fixed issue with FSM timeout not actually timing out (#5)
  • fix: Update documentation and fix context become/unbecome bug
  • fix: chore: fix type in docs
  • fix: chore: fixed small bug in scheduler, bumping version for release
  • fix: fix: Added error escalation in the actor pre-start. (#17)
  • fix: fix: Added the stateData to the FSM onTermination in the FSMBuilder. Fixed issue with the FSM termination using data from the old state instead of the new one. (#14)
  • fix: fix: Improved the isTerminated semantics to be based on the ActorCell instead of the Mailbox (#31)
  • fix: fix: expand uncancelable scope to prevent ask pattern deadlock during system termination (#36)
  • fix: test: Fix tests from #9 with syntax from #11 (#12)
  • change: Add ControlledTestKit for simulated-time actor tests (#45)
  • change: Add microbenching test harness (#41)
  • change: Bumping to RC4,
  • change: Cats Actors framework for building apps which are reactive. Cats actors uses a conceptual actor model as a higher level abstraction for concurrency.
  • change: Chore: Bump version to release artefact
  • change: FSM Update (#22)
  • change: Fixed typo in dependencies. Thanks @jducoeur.
  • change: Issue/8 fsm actor context (#9)
  • change: Measure elapsed time with the cats-effect clock instead of the wall clock
  • …and 19 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

cloudmark/cats-actors 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 20 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 c64f979be6ddfe8a93b406dca201d7657ab46649 — 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-b51f968c9b10.