Skip to content
CAI
Software that uses CAICheck a score

atnos-org/eff

53.3

Adequate · 28 September 2026

4.8k

lines of production code

Scala

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Scala library providing an extensible effects (Eff) monad for composing and interpreting side effects in a functional programming style. It supports a wide range of built-in effects such as state, reader, writer, and validation, while offering addons to integrate with external libraries like Doobie for database transactions, Cats-Effect for IO, and Scalaz for typeclass interoperability. The project has been modernized to Scala 3 with a robust test suite covering effect laws, stack safety, and integration behaviors.

How it got here

2016 — Scala 3 migration and Eff removal

7 changes.

The project underwent a major infrastructure overhaul, migrating the build system to sbt 2.0 and upgrading to Scala 3.9.0 with modernized CI and dependency management. Concurrently, the legacy extensible effects (Eff) implementation and its associated benchmarks and tests were completely removed from the codebase.

2017 — Doobie and cats-effect integration

4 changes.

This period focused on expanding the Eff effect system by adding dedicated support for Doobie's ConnectionIO and cats-effect IO. The work involved creating new addon modules, syntax extensions, and comprehensive test suites to ensure correct interpretation and error handling for these database and asynchronous effects.

2026 — Eff monad implementation and Scala 3 migration

4 changes.

The project introduced the core Eff monad effect system with a comprehensive suite of effect types and a new Continuation-based execution model. This work included a complete rewrite of the core library for Scala 3 and sbt 2, alongside the addition of a Validate effect for accumulating errors. Documentation generation was also secured with new automated tests.

Features

Add Doobie ConnectionIO effect support

Users can now integrate Doobie's ConnectionIO with the Eff effect system via the new DoobieConnectionIOEffect addon. This change introduces a dedicated effect type (\_connectionIO) and provides utilities to lift ConnectionIO actions into Eff and interpret them using a Transactor, including support for transaction strategies (before, after, always, oops) and error handling.

doobie/src/main/scala/org/atnos/eff/addon · high confidence

Add Eff monad effect system and comprehensive test suite

This change introduces the core Eff monad implementation, including the SubscribeEffect for asynchronous operations, effect creation and interpretation traits (Reader, Writer, State, Eval, Option, List, Either, Validate, Choose, Future, Memo, Safe), and syntax objects for all effects. It also adds a comprehensive test suite covering effect laws, stack safety, member implicits, and various effect combinations.

(repo-wide) · high confidence

Add Scalaz integration addon for Eff

This change introduces a new Scalaz addon for the Eff effect system, providing seamless interoperability between Eff and Scalaz typeclasses. Users can now leverage Scalaz's Monad, Applicative, and Traverse instances for Eff computations, enabling operations like \traverseA\, \sequenceA\, and \detach\ on Eff effects using Scalaz syntax. The addon also includes support for Scalaz's Either (\/\), Validation, Safe, and Eval effects, allowing Eff effects to be run and combined using Scalaz's disjunction and validation types. This enables users to integrate Eff with existing Scalaz-based codebases or leverage Scalaz's functional programming primitives within Eff workflows.

scalaz · high confidence

Add cats-effect IO integration for Eff

Users can now integrate cats-effect IO into the Eff effect system via the new IOEffect addon. This adds support for running, suspending, and interpreting IO effects within Eff computations, including utilities for error handling (ioAttempt), memoization (ioMemo), and execution modes like unsafeRunSync, unsafeRunAsync, and unsafeToFuture.

cats · high confidence

Add doobie ConnectionIO syntax extension

A new syntax extension is provided for Eff effects that wrap Doobie's ConnectionIO. Users can now call runConnectionIO on an Eff\[R, A\] value, passing a Transactor, to execute the embedded ConnectionIO operations within the effect stack.

doobie/src/main/scala/org/atnos/eff/syntax · high confidence

New Validate effect for accumulating errors and warnings

Added a new Validate effect to the Eff library that supports validation logic with three states: correct, warning, and wrong. This effect allows computations to accumulate multiple errors and warnings rather than failing fast. The implementation includes creation methods for converting Options, Eithers, and Iors into Validate effects, interpretation methods to run the effect into various output formats (such as ValidatedNel, NonEmptyList, or Ior), and syntax extensions for convenient usage. Additionally, it provides interceptors to catch and handle wrong values, supporting strategies for the first, last, or all errors.

validate · high confidence

Removals

Removal of the extensible effects (Eff) implementation

The \org.specs2.control.eff\ package has been removed, deleting the entire extensible effects system including the core \Eff\ monad, effect handlers (\Interpret\), and specific effect implementations such as \ErrorEffect\, \StateEffect\, \ReaderEffect\, \WriterEffect\, \ListEffect\, \OptionEffect\, and \DisjunctionEffect\. This change eliminates the library's custom effect stack infrastructure and its associated syntax extensions.

src/main · high confidence

Removed EffBenchmark using specs2 control effects

The EffBenchmark file, which previously benchmarked the \org.specs2.control.eff\ library (specifically \EvalEffect\ and \Effects\), has been removed from the codebase. This eliminates the performance tests associated with the specs2 effect system from the benchmark suite.

src/bench · high confidence

Behavioural changes

Core effects library rewritten for Scala 3 and sbt 2

The core effects library has been completely rewritten to support Scala 3 and the sbt 2 build tool. This update introduces a new internal architecture for the \Eff\ monad, utilizing a \Continuation\-based execution model and a \Cache\ trait with a \ConcurrentHashMapCache\ implementation for memoization. The change also adds new type-level utilities like \Augment\ and \CollectedUnions\ to handle effect stacking and interpretation, fundamentally changing how effects are composed and run compared to the previous version.

core · high confidence

Migrate to Scala 3 and modernize build configuration

The project has been upgraded to support Scala 3, with the default version set to 8.1.1-SNAPSHOT. This includes adopting the Scala 3 dialect in scalafmt, configuring scalafix for Scala 3, and updating the README to reflect Scala 3 installation instructions. The build infrastructure has been modernized by replacing the legacy sbt launcher and Travis CI configuration with GitHub Actions, and adding configuration files for Scala Steward and scalafmt. Additionally, JVM options have been updated to use G1GC and increased memory limits, and the Code of Conduct has been added.

(repo-wide) · high confidence

Test coverage

Added tests for Doobie ConnectionIO effect handling; Added tests for the documentation site generation; Removed obsolete Eff effect system tests and examples.

Dependencies

Migration to sbt 2.0 and modern build infrastructure

The build system has been upgraded from sbt 0.13.9 to sbt 2.0.9, requiring a migration from the legacy \project/build.scala\ and \project/depend.scala\ structure to the modern \project/plugins.sbt\ approach. This change removes the old \promulgate\, \sbt-sonatype\ (v0.4.0), and \sbt-pgp\ (v1.0.0) plugins, replacing them with updated versions of \sbt-pgp\ (2.3.2), \sbt-scalajs\ (1.22.0), \sbt-scala-native\ (0.5.12), and \sbt-buildinfo\ (0.13.2), while adding \scalafix-check\, \sbt-scalafix\ (0.14.9), \sbt-scalafmt\ (2.6.2), and \sbt-salad-days\ (0.2.0).

project · high confidence

Upgrade to Scala 3.9.0 and update core library dependencies

The build configuration has been updated to use Scala 3.9.0 as the primary version, replacing previous versions like 3.3.x. This change is accompanied by updates to key library dependencies: cats-effect is upgraded to 3.7.1, monix-eval to 3.5.0, scalaz-core to 7.3.9, and cats-core to 2.13.0. Additionally, the specs2 testing framework is set to version 4.23.0, and doobie is updated to 0.13.4. These updates ensure compatibility with the latest Scala 3 features and provide users with the most recent stable versions of the underlying effect libraries.

(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 64 → 53 (-10.6)
  • Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 97 → 97 (+0.0)
  • Architecture 100 → 84 (-16.3)
  • Maturity 58 → 38 (-20.0)
  • Readiness 61 → 61 (+0.0)
  • Security 62 → 62 (+0.0)

Resolved (2)

  • Documentation: no installation or build instructions (README.md)
  • Off-boarding risk: anonymized user #1

New (3)

  • Documentation: no usage examples (README.md)
  • Off-boarding risk: anonymized user #1
  • Projects may be oversized for their cohesion

Changes since last survey

  • 10 commits — 10 feature/other, 0 fixes

By area

  • (root) — 3 commits
  • .github/workflows — 3 commits
  • project/plugins.sbt — 2 commits
  • project/build.properties — 1 commit
  • validate/src — 1 commit

Notable commits

  • change: Bump actions/setup-java from 6.0.0 to 6.0.1
  • change: Bump sbt/setup-sbt from 1.5.8 to 1.5.9
  • change: Change kind-projector flag from -Y to -X
  • change: Fix infix warnings
  • change: Fix warning in ValidateInterpretation
  • change: Scala 3.10.0-RC2
  • change: Update sbt to 2.0.9
  • change: Update sbt-buildinfo to 0.13.2
  • change: Update sbt-scalafix to 0.14.9
  • change: Update scala3-library to 3.9.0

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

atnos-org/eff 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 28 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 857338d530a8515c236bf2e095750a73c95fef45 — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d46da229e3fd.