Skip to content
CAI
Software that uses CAICheck a score

typelevel/kittens

60.9

Adequate · 20 September 2026

4.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 a Scala library that provides automatic and semi-automatic derivation of typeclass instances for data structures across Scala 2.12, 2.13, and Scala 3. It enables developers to generate implementations for standard typeclasses like Eq, Functor, and Monoid without manual boilerplate, supporting heterogeneous lists and records. The library also offers utilities for sequencing and traversing these structures within applicative effect types.

How it got here

2015 — Major library overhaul and build migration

4 changes.

This period involved a significant library overhaul to version 2.0.0-M1, including a comprehensive documentation update and a migration to sbt-typelevel infrastructure. The work featured major dependency updates, a switch to GitHub Actions, and the removal of legacy derived type class instances and their associated tests.

2019–2020 — Scala 2.12/2.13 derivation utilities

4 changes.

The project introduced version-specific derivation utilities for Scala 2.12 and 2.13 to handle lazy implicit resolution and improve error reporting. It also added semiauto derivation helpers in both versions, allowing users to explicitly control type class instance generation for case classes and type constructors.

2021 — Scala 2 and 3 derivation expansion

6 changes.

This period focused on expanding automatic typeclass derivation capabilities for both Scala 2 and Scala 3. It introduced comprehensive auto-derivation for a wide range of typeclasses in Scala 2 via Shapeless and implemented a strict semiauto derivation scheme for Scala 3 using shapeless3.deriving. Extensive test suites were added to verify the correctness of these new derivation mechanisms across various data structures and effect types.

Features

Added HList-based sequence, traverse, and replicateH operations

Users can now sequence, traverse, and replicate HLists using shapeless type-level naturals and labeled records. This change introduces new \sequence\, \parSequence\, \traverse\, \parTraverse\, \replicateH\, and \parReplicateH\ operations in the \cats.sequence\ package, enabling parallel and sequential processing of heterogeneous lists wrapped in applicative or parallel effect types.

core/src/main/scala-2/cats/sequence · high confidence

Auto-derive typeclass instances for Scala 2

The \cats.derived\ package for Scala 2 now provides automatic derivation for a comprehensive set of typeclasses, including \Eq\, \Hash\, \Functor\, \Apply\, \Applicative\, \Foldable\, \Traverse\, \Monoid\, \CommutativeMonoid\, \Empty\, \EmptyK\, \MonoidK\, \CommutativeSemigroup\, \Contravariant\, \Invariant\, \ConsK\, and \Iterable\. These new \Mk\*\ traits and their companion objects allow users to automatically derive instances for case classes, sealed traits, nested types, and constant types using Shapeless, eliminating the need for manual boilerplate implementations.

core/src/main/scala-2/cats/derived · high confidence

Introduce semiauto derivation helpers for Scala 2.12

A new \semiauto\ object has been added to the \cats.derived\ package for Scala 2.12, providing explicit methods to derive typeclass instances (such as \Eq\, \Show\, \Monoid\, \Functor\, and \Traverse\) for case classes and type constructors. This allows users to control derivation on a per-field or per-type basis, avoiding the pitfalls of automatic derivation where nested structures might not respect existing instances, as demonstrated in the included documentation examples.

core/src/main/scala-2.12/cats/derived · high confidence

Introduce semiauto derivation helpers for type class instances

A new \semiauto\ object has been added to the \cats.derived\ package, providing explicit helper methods to derive standard type class instances (such as \Eq\, \Order\, \Show\, \Monoid\, \Functor\, and \Traverse\) for case classes. This change establishes a controlled derivation pattern that allows users to manually trigger derivation for specific types, addressing previous issues where automatic derivation might not respect native instances or required implicit resolution in a less predictable manner.

core/src/main/scala-2.13/cats/derived · high confidence

Removals

Removal of derived Foldable, Functor, and Iterable instances

The \cats.derived\ package in \src/main/scala/cats/derived/\ has removed the source files for \foldable.scala\, \functor.scala\, and \iterable.scala\. This eliminates the automatic derivation of \Foldable\, \Functor\, and \Iterable\ type class instances for user-defined types using Shapeless generic representations (HCons, CCons, Split, Generic1). Users relying on these specific derived instances will no longer have them available and must provide their own implementations or use alternative derivation mechanisms.

src/main · high confidence

Behavioural changes

Introduces Scala 2.12-specific lazy implicit resolution for derived typeclasses

A new version-specific utility file for Scala 2.12 defines a \Lazy\ type alias pointing to \shapeless.Lazy\ and implements an \OrElse\ mechanism with \Primary\ and \Secondary\ implicits. This change ensures that derived typeclasses resolve dependencies lazily in Scala 2.12, mirroring the behavior of Scala 2.13's built-in lazy implicits, which prevents infinite recursion during derivation and ensures the derived instances are serializable.

core/src/main/scala-2.12/cats/derived/util · high confidence

Introduces Scala 2.13-specific derivation utilities

A new version-specific utility file for Scala 2.13 provides a \Lazy\ type class with an \implicitNotFound\ message to improve error reporting during derivation, and implements \OrElse\ with \Primary\ and \Secondary\ cases to support lazy evaluation and fallback logic in type class derivation.

core/src/main/scala-2.13/cats/derived/util · high confidence

Major library overhaul and documentation update

The library has been significantly updated to version 2.0.0-M1, introducing a comprehensive rewrite of the documentation and API usage. The README now details support for Scala 2.12/2.13, Scala.js 1.5, and Scala Native 0.4, and outlines three derivation strategies: \auto\, \cached\, and the recommended \semiauto\. New utility functions for \Applicative\ operations like \lift\, \traverse\, and \sequence\ on HLists, Records, and case classes are documented. The build configuration has also changed, removing the legacy \.travis.yml\ in favor of GitHub Actions and updating the scalafmt version to 3.11.5.

(repo-wide) · high confidence

Strict semiauto derivation for Scala 3

The \core/src/main/scala-3/cats/derived\ package has been rewritten to use a new derivation scheme powered by \shapeless3.deriving\. This change introduces a \strict\ mode for all derived type classes (such as \Functor\, \Monoid\, \Eq\, and \Traverse\), allowing users to opt into stricter, compile-time-checked instance generation that prevents accidental derivation of incompatible types. The implementation replaces the previous opaque \Derived\ wrapper with direct usage of \shapeless3.deriving.Derived\ and \OrElse\, and adds support for deriving instances for nested types, product types (case classes), and coproduct types (sealed traits/enums) using the new \ProductInstances\ and \CoproductInstances\ APIs.

core/src/main/scala-3 · high confidence

Test coverage

Added Scala 3 test suites for derived type class instances; Added comprehensive test suites for derived type class instances; Added test coverage for sequence, traverse, and replicateH operations; Removed legacy test suite for derived Foldable and Functor instances.

Dependencies

Major build system overhaul and dependency updates

The project has migrated to the sbt-typelevel infrastructure, updating the organization to org.typelevel and the base version to 3.5. This change upgrades core dependencies to Cats 2.13.0, MUnit 1.3.6, and Shapeless 2.3.13/3.5.0, while switching the default Scala version to 3.3.8 and supporting cross-compilation for Scala 2.12.21, 2.13.18, and 3.3.8 across JVM, JS, and Native platforms. The build now includes binary compatibility checks via MiMa and enforces formatting via Scalafmt.

(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 99
  • Architecture 100
  • Maturity 59
  • Readiness 50
  • Security 70

Changes since last survey

  • 300 commits — 296 feature/other, 4 fixes

By area

  • (repo) — 129 commits
  • (root) — 68 commits
  • project/plugins.sbt — 39 commits
  • project/build.properties — 37 commits
  • core/src — 20 commits
  • .github/workflows — 7 commits

Notable commits

  • fix: Fix implicit error message tests
  • fix: Fix scala options
  • fix: Fix warnings
  • fix: Fix warnings (#753)
  • change: Add 'Reformat with scalafmt 3.9.10' to .git-blame-ignore-revs
  • change: Add type aliases for composed type constructors (#642)
  • change: Add using clause for context bounds (#641)
  • change: Bump base version to 3.3 (#657)
  • change: Derive Band, Semilattice and BoundedSemilattice on Scala 3 (#645)
  • change: Derive Bifunctor (#714)
  • change: Derive Bitraverse (#717)
  • change: Derive CommutativeGroup on Scala 3 (#643)
  • change: Derive Group on Scala 3 (#638)
  • change: Derived Bifoldable (#716)
  • change: Make auto instances transparent inline to support Scala 3.4.0 (#656)
  • change: Make implicit not found message more terse (#646)
  • change: Merge pull request #647 from typelevel/update/sbt-typelevel-ci-release-0.6.6
  • change: Merge pull request #648 from typelevel/update/scalafmt-core-3.8.0
  • change: Merge pull request #649 from typelevel/update/sbt-1.9.9
  • change: Merge pull request #650 from typelevel/update/kind-projector-0.13.3
  • …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/kittens 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 e865bafe867fd79eb82ff98ef09a2e5ab2d5cfed — 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.