typelevel/kittens
60.9
Adequate · 20 September 2026
4.7k
lines of production code
Scala
primary language
1
measurement over time
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.