typelevel/catbird
62.5
Adequate · 20 September 2026
814
lines of production code
Scala
primary language
1
measurement over time
What this system is
This library provides functional programming interoperability for Twitter Util and Finagle types within the Cats ecosystem. It offers Cats typeclass instances for core types like Future, Try, and Var, as well as compositional abstractions for Finagle services. The system also includes tools for Cats Effect 3 integration and automated migration utilities for package namespace changes.
How it got here
2015 — Build modernization and dependency migration
7 changes.
The project modernized its build infrastructure by migrating to SBT 1.11.1, sbt-typelevel, and GitHub Actions, while updating core dependencies to support Scala 2.13 and Cats Effect 3. Concurrently, legacy Cats typeclass instances for Twitter Futures and Finagle conversions were removed to clean up the API, with comprehensive property-based tests added to verify the remaining abstractions.
2021 — cats-effect integration and namespace migration
7 changes.
This period focused on integrating the library with the Cats ecosystem by adding typeclass instances for Twitter Util and Finagle types, enabling seamless interoperability with cats-effect 3. Concurrently, tooling was implemented to automate the migration of code from the io.catbird package to the new org.typelevel.catbird namespace.
Features
Add Cats typeclass instances for Twitter Util types
The \util\ module now provides Cats typeclass instances (such as \Monad\, \MonadError\, \Semigroup\, \Monoid\, and \Eq\) for Twitter Util types including \Future\, \Try\, \Var\, and \AsyncStream\. This allows these types to be used directly with Cats abstractions like \Parallel\ and \Eq\ without requiring manual conversions, while also introducing a \Rerunnable\ wrapper for deferred execution and a \Newtype1\ helper for safe newtype encoding.
util/src/main/scala/org · high confidence
Add Scalafix rule for io.catbird to org.typelevel.catbird migration
A new Scalafix rule, CatbirdPackageRename, has been added to automatically migrate code from the io.catbird package to the org.typelevel.catbird package. This tooling change allows users to update their codebase to reflect the package rename with a single command, ensuring consistency with the library's new organization.
scalafix/rules · high confidence
Add cats-effect 3 instances for Twitter Future and Rerunnable
The effect3 module now provides cats-effect 3 typeclass instances (MonadCancel, Sync, Clock) for Twitter's Future and the library's Rerunnable type. This enables seamless interoperability, allowing users to convert Twitter Futures to cats-effect Async contexts and Rerunables to IO, while ensuring that exceptions during resource release are properly caught by Twitter's Monitor.
effect3 · high confidence
Added Finagle service typeclass instances
The library now provides implicit Category and Profunctor instances for Finagle's Service type, enabling functional composition and mapping of services within the Cats ecosystem. This allows users to treat Finagle services as composable arrows, supporting operations like composition (chaining services) and dimension-preserving mapping (transforming input/output types) directly through standard Cats abstractions.
finagle/src/main/scala/org · high confidence
Scalafix rule to migrate io.catbird to org.typelevel.catbird
A new Scalafix rule has been added to automatically migrate code from the io.catbird package to the org.typelevel.catbird package. This change updates import statements and package references, ensuring that codebases using the library can seamlessly transition to the new namespace without manual refactoring.
scalafix/input, scalafix/output · high confidence
Removals
Removal of legacy Cats typeclass instances for Future, Try, and Var
The \FutureInstances\, \TryInstances\, and \VarInstances\ traits have been removed from the \io.catbird.util\ package. This deletes the implicit \Monad\, \CoflatMap\, \Comonad\, \Eq\, \Semigroup\, and \Monoid\ instances that were previously provided for \com.twitter.util.Future\, \Try\, and \Var\. Users relying on these implicit conversions for Cats interoperability will need to update their dependencies or provide their own instances, as these legacy definitions are no longer available in this module.
util/src/main/scala/io · high confidence
Behavioural changes
Build infrastructure modernized with SBT 1.11.1 and Typelevel tooling
The build system has been upgraded from SBT 0.13.8 to 1.11.1, bringing significant changes to the development and release workflow. The project now relies on the sbt-typelevel plugin (0.8.2) for standardized configuration, replacing older custom setups. Several plugins have been updated or replaced: sbt-scoverage is upgraded to 2.3.1, sbt-unidoc to 0.6.0, and sbt-ghpages to 0.9.0. Notably, the sbt-wartremover plugin has been removed, and sbt-coveralls is no longer included. A new BaseVersion utility enforces a year.month versioning scheme, and a FinaglePlugin has been added to manage binary compatibility checks (MiMa) for Finagle dependencies.
project · high confidence
Migrate CI to GitHub Actions and update code formatting
The project has moved its continuous integration from Travis CI to GitHub Actions, reflected in the removal of .travis.yml and updated build/coverage badges in the README. Additionally, the codebase now uses Scalafmt version 3.9.7 with Scala 2.13 dialect for consistent code formatting, and the .gitignore has been updated to exclude IDE and BSP directories.
(repo-wide) · high confidence
Removal of Finagle-to-Cats Kleisli conversion instances
The implicit conversion instances that allowed Finagle \Service\ objects to be treated as Cats \Kleisli\ functors have been removed. This eliminates the \ServiceConversions\ trait and its associated \serviceToKleisli\ implicit, meaning users can no longer automatically use Finagle services within Cats effect contexts without providing their own conversion logic.
finagle/src/main/scala/io · high confidence
Test coverage
Added benchmark comparing Rerunnable performance against standard Futures; Added comprehensive property-based tests for Catbird utilities and Finagle services; Added test suite for the catbird package rename rule; Removed test helper traits for bijection and arbitrary instances.
Dependencies
Migrate to sbt-typelevel and update core dependencies
The build system has been migrated to sbt-typelevel, introducing automated versioning, binary compatibility checks (MiMa), and CI header checks. Core library dependencies have been updated, including Cats to 2.13.0, ScalaTest to 3.2.14, and ScalaCheck to 1.17.1. The project now supports Scala 2.12.20 and 2.13.16, and a new \effect3\ module has been added to provide support for Cats Effect 3.x alongside the existing Cats Effect 2.x support.
(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 62.
Lenses
- Code Health 100
- Architecture 69
- Maturity 53
- Readiness 68
- Security 70
Changes since last survey
- 300 commits — 295 feature/other, 5 fixes
By area
- (root) — 160 commits
- project/plugins.sbt — 44 commits
- project/build.properties — 33 commits
- (repo) — 32 commits
- .github/workflows — 9 commits
- util/src — 8 commits
- effect/src — 7 commits
- effect3/src — 2 commits
- project/FinaglePlugin.scala — 2 commits
- .github/CODEOWNERS — 1 commit
- benchmark/src — 1 commit
- scalafix/rules — 1 commit
Notable commits
- fix: Attempt to fix flakiness in tests
- fix: Fix warning.
- fix: Travis build: update versions and fix some warnings. (#238)
- fix: fix scalafmt config file to work with scalafmt 3
- fix: use scala-xml 2; see https://github.com/scala/bug/issues/12632
- change: Add 'Reformat with scalafmt 3.5.8' to .git-blame-ignore-revs
- change: Add 'Reformat with scalafmt 3.9.7' to .git-blame-ignore-revs
- change: Add Alternative/MonoidK instance for AsyncStream.
- change: Add Finagle 22.12.0 to MiMa
- change: Add MiMa check to the root
- change: Add RerunnableTimer and RerunnableClock implementations
- change: Add docblocks for methoods that create instances that call Await.
- change: Add effect conversion functions which shift correctly
- change: Bracket instance for Future. (#237)
- change: Enable snapshots (#455)
- change: Format
- change: FunctionK instance for Rerunnable ~> Future (#240)
- change: Introduce ContextShift for Rerunnable
- change: Merge branch 'local-mima' into update-finagle
- change: Merge branch 'master' into ci-release
- …and 280 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
typelevel/catbird 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 da6018b3cc502650779eceb25decc1fade0f07ea — 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.