zio/interop-cats
52.9
Adequate · 20 September 2026
4.1k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is a Scala library that provides interoperability between the ZIO and Cats Effect ecosystems. It enables seamless integration by exposing Cats Effect typeclasses for ZIO data types, bridging concurrent primitives like queues and STM, and facilitating conversions between ZIO and fs2 streams. Additionally, it offers utilities for stack trace enrichment and allows ZIO tests to directly evaluate Cats Effect effects.
How it got here
2019 — ZIO Interop Cats 3 migration and build modernization
4 changes.
The project migrated its documentation and build infrastructure to support ZIO Interop Cats 3, standardizing on SBT 1.11.7 and Scala 3.3.7. Core dependencies such as ZIO, Cats, and FS2 were updated to their latest stable versions to ensure ecosystem compatibility. Additionally, new tests were added to verify that core ZIO interop instances function correctly with only the cats-core dependency.
2021 — ZIO 2.0 and fs2 interop expansion
8 changes.
This period focused on extending the library's compatibility with ZIO 2.0 and the fs2 stream library, introducing new interop layers for STM, console, and concurrent data structures. Significant work was also done to improve stream conversion APIs and establish comprehensive test coverage, including property-based law verification and ZIO test integration for Cats Effect.
2023–2025 — ZIO interop module extraction and platform fixes
4 changes.
The project extracted stack trace resolution logic into a new zio-interop-tracer artifact, providing platform-specific implementations for JVM and JavaScript. Concurrently, it corrected behavioral discrepancies in ZIO-Cats interop for Scala.js by aligning blocking and interruptible operation mappings with the JVM version.
Features
Add noop InteropTracer for ZIO JS platform
A new \InteropTracer\ object has been added to the \zio-interop-tracer\ artifact for the JavaScript platform. This component provides a \newTrace\ method that returns a noop trace, ensuring that stack tracing functionality is available but effectively disabled on JS, which prevents runtime errors or missing symbols when the tracer is invoked in this environment.
zio-interop-tracer/js · high confidence
Added ZIO 2.0 console interop with Cats Show support
The library now provides a new \zio.interop.console.cats\ module that bridges ZIO 2.0's console capabilities with Cats' \Show\ type class. This allows users to print values using their \Show\ instances via \print\ and \printLine\ methods, which internally leverage ZIO 2.0's \Trace\ context for better debugging information.
zio-interop-cats/shared/src/main/scala/zio/interop/console · high confidence
Added ZIO Test interop with Cats Effect
This release introduces a new compatibility library that allows ZIO tests to directly evaluate and assert on Cats Effect \IO\ values. The \zio-test-interop-cats\ module provides \CatsTestFunctions\ (accessible via \catz.test\), which expose methods like \assertF\, \checkF\, \checkAllF\, and \testF\ to bridge Cats Effect effects into the ZIO testing framework using a shared \Dispatcher\. A \CatsRunnableSpec\ base class is also provided to manage the lifecycle of the Cats Effect runtime and dispatcher within ZIO test suites, enabling seamless integration of Cats Effect-based logic into ZIO test specifications.
zio-test-interop-cats/shared · high confidence
New InteropTracer component for JVM stack trace interop
A new \InteropTracer\ object has been added to the \zio-interop-tracer\ artifact on the JVM platform. This component provides a caching mechanism to generate stack traces from arbitrary objects, handling various source information formats (including Akka-specific line numbers and lambda names) to produce standardized trace strings for debugging and monitoring.
zio-interop-tracer/jvm · high confidence
New ZIO 2.0 STM interop layer for Cats Effect
This change introduces a new set of Scala files in the \zio.interop.stm\ package that provide a Cats Effect-compatible API for ZIO 2.0's STM (Software Transactional Memory) primitives. The new codebase adds wrapper classes for \STM\, \TRef\, \TQueue\, \TPromise\, and \TSemaphore\, allowing users to perform STM operations within Cats Effect \F\[\_\]\ effect types. Key additions include the \STM.atomically\ method for executing transactions, \mapK\ for effect type transformation, and specific resource management methods like \withPermit\ and \withPermitResource\ for the semaphore interop.
zio-interop-cats/shared/src/main/scala/zio/interop/stm · high confidence
New interop types for ZIO Queues, Dequeues, Enqueues, and Hubs
The \zio.interop\ package now exposes Cats Effect-compatible wrappers for ZIO's concurrent data structures. Users can create and interact with \Queue\, \Dequeue\, \Enqueue\, and \Hub\ instances in Cats Effect \F\[\_\]\ contexts via new factory methods (e.g., \Queue.bounded\, \Hub.unbounded\) and type classes. These implementations bridge ZIO's native concurrency primitives to the Cats Effect \Async\ type class, enabling seamless integration of ZIO queues and hubs into Cats Effect-based applications.
zio-interop-cats/shared/src/main/scala/zio/interop · high confidence
Behavioural changes
Library documentation and build configuration overhaul
The project has migrated its documentation to an auto-generated README based on ZIO Interop Cats 3, explicitly detailing the provision of Cats Effect 3 typeclasses (Concurrent, Temporal, Async) for ZIO Task and the availability of a separate core import for cats-only dependencies. Concurrently, the build infrastructure has been standardized with the addition of .scalafmt.conf (v3.5.9), .sbtopts for JVM tuning, and .scala-steward.conf to manage dependency updates, while the sbt launcher script has been updated to version 1.8.2.
(repo-wide) · high confidence
New ZStream-to-fs2 and fs2-to-ZStream conversion APIs with improved termination handling
This change introduces new syntax extensions for seamless conversion between ZIO and fs2 streams. Users can now convert a ZStream to an fs2.Stream via the new \toFs2Stream\ method, and convert an fs2.Stream to a ZStream via \toZStream\, which utilizes a bounded queue (default size 16) to bridge the two runtime systems. The implementation specifically addresses previous issues with stream termination and hanging by using \ZIO.onExit\ to ensure that end-of-stream signals are correctly propagated and that cleanup occurs even if the queue is blocked, preventing resource leaks and deadlocks during stream finalization.
zio-interop-cats/shared/src/main/scala/zio/stream · high confidence
Stack trace line number resolution moved to zio-interop-tracer
The internal logic for resolving source file and line number information from JVM bytecode, specifically the \AkkaLineNumbers\ parser, has been relocated into the new \zio-interop-tracer\ artifact. This change means that stack trace enrichment capabilities are now provided by this separate interop module rather than being embedded in the core library, requiring users who rely on detailed stack trace information to include the \zio-interop-tracer\ dependency.
repository · high confidence
Fixes
Fix ZIO-Cats interop for blocking and interruptible operations on Scala.js
The Scala.js platform-specific implementation of \ZioBlockingPlatformSpecific\ has been updated to correctly map Cats Effect's \Sync\ typeclass methods (\delay\, \blocking\, \interruptible\) to their corresponding ZIO counterparts (\ZIO.attempt\). Previously, the JS version likely lacked proper handling for these operations or used incorrect mappings, causing behavioral discrepancies with the JVM version. The JVM version remains unchanged, continuing to use \ZIO.attemptBlocking\ and \ZIO.attemptBlockingInterrupt\ for blocking and interruptible operations respectively. This fix ensures consistent behavior of blocking and interruptible effects across both Scala.js and JVM targets.
zio-interop-cats/js, zio-interop-cats/jvm · high confidence
Test coverage
Added comprehensive property-based tests for ZIO-Cats interop; Added comprehensive test coverage for Cats interop behaviors; Added tests for cats-core-only ZIO interop instances; Added tests for the InteropTracer stack-trace utility.
Dependencies
Update ZIO, Cats, and FS2 dependencies
The build configuration updates the core library versions to ZIO 2.1.23, Cats 2.13.0, Cats Effect 3.6.3, FS2 3.12.2, and scala-java-time 2.6.0. This ensures the interop library remains compatible with the latest stable releases of the ZIO and Typelevel ecosystems.
(dependencies) · high confidence
Updated build infrastructure to SBT 1.11.7 and modernized Scala 3 support
The project's build system has been upgraded to SBT version 1.11.7, with corresponding updates to key plugins including sbt-scalajs (1.20.1), sbt-scalafmt (2.5.6), sbt-scoverage (2.4.4), and sbt-bloop (2.0.17). The build configuration now targets Scala 3.3.7 as the primary version, alongside 2.13.16 and 2.12.21, and enables parallel test execution by default. Additionally, the build now includes the sbt-api-mappings plugin to improve API documentation generation.
project · 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 53.
Lenses
- Code Health 97
- Architecture 94
- Maturity 35
- Readiness 60
- Security 63
Changes since last survey
- 300 commits — 268 feature/other, 32 fixes
By area
- (root) — 92 commits
- project/plugins.sbt — 65 commits
- interop-cats/shared — 53 commits
- project/build.properties — 21 commits
- zio-interop-cats/shared — 17 commits
- project/BuildHelper.scala — 13 commits
- zio-interop-cats-tests/shared — 10 commits
- .github/workflows — 9 commits
- zio-interop-cats-tests/jvm — 5 commits
- .circleci/config.yml — 4 commits
- interop-cats/jvm — 3 commits
- (repo) — 2 commits
- .github/CODEOWNERS — 2 commits
- docs/index.md — 1 commit
- zio-interop-cats/js — 1 commit
- zio-interop-cats/jvm — 1 commit
- zio-interop-tracer/jvm — 1 commit
Notable commits
- fix: Add Resource.toManagedZIO, add Concurrent.continual implementation, fix toManaged (#109)
- fix: Apply fix in #751 to Scala.js version; deduplicate JS sources (#752)
- fix: Fix #462 don't publish zio-interop-cats-test; restore publishing of zio-test-interop-cats (#750)
- fix: Fix #669 Add a non-Optional dependency on cats-core for interop-cats (#686)
- fix: Fix #702 propagate defects correctly in conversion from fs2 to ZStream (#705)
- fix: Fix #709 fix hang in toZStream when queue is not fully drained (#747)
- fix: Fix #94, add catz.core object with implicits that require only cats-core, not cats-effect (#95)
- fix: Fix #96 Cache typeclass instances for ZIO (#110)
- fix: Fix CI issue
- fix: Fix Tests And Revert Cats Effect Version (#448)
- fix: Fix doc creation (#279)
- fix: Fix memory leak issue in ZIOConcurrent (#688)
- fix: Fix nested race issue (#212)
- fix: Fix propagation of interruption from CIO to ZIO (#697)
- fix: Fix publishing (#292)
- fix: Fix release (#141)
- fix: Fix resource leak in .toResourceZIO that could happen just after ZManaged was acquired but before the finalizer was registered in Resource interpreter (https://github.com/typelevel/cats-effect/blob/bf1fa530bd651325c7b060389952d37b4852d5e5/core/shared/src/main/scala/cats/effect/Resource.scala#L133) (#234)
- fix: Fix scaladoc
- fix: Fix scaladoc (#150)
- fix: Fix scaladoc (#180)
- …and 280 more
Architecture
- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
zio/interop-cats 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 60f15a5cdaaaac053365eb0ce3d414fa8e004c76 — 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.