Skip to content
CAI
Software that uses CAICheck a score

higherkindness/droste

63.2

Adequate · 20 September 2026

3.3k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is the Droste library, a functional programming toolkit for Scala that provides recursion schemes and algebraic data types for manipulating recursive structures. It enables developers to define, fold, unfold, and transform recursive trees using a comprehensive set of higher-order functions and type classes. The library supports both Scala 2 and Scala 3, offering features like automatic type class derivation, symbolic expression evaluation, and visualization of recursive data structures.

How it got here

2018 — Build system migration and Scala 3 support

8 changes.

The project undertook a major infrastructure overhaul by introducing Bazel alongside SBT to establish a reproducible build environment and automate CI workflows. This period also focused on modernizing the build configuration to support Scala 3 and cross-compilation, while upgrading core dependencies and implementing binary compatibility checks.

2019–2021 — Droste library foundation and Scala 3 migration

9 changes.

This period focused on establishing the core Droste recursion scheme library by introducing foundational data types, algebraic expression evaluation, and comprehensive recursion patterns. The work also involved migrating the codebase to Scala 3, rebranding the project under the higherkindness namespace, and implementing cross-build support with corresponding macro derivations and documentation.

Features

Add Scala 3 core data types and RefTree visualization support

The core library now includes Scala 3-specific implementations of recursive data structures (\Attr\, \AttrF\, \Coattr\, \CoattrF\, and \Fix\) in the \modules/core\ module, enabling users to work with these types on Scala 3. Additionally, the \reftree\ module provides implicit conversions that allow these new core types to be visualized as \RefTree\ structures, making them inspectable in debugging or logging contexts.

modules/core/src/main/scala-3, modules/reftree · high confidence

Add Scala 3 derivation support for Traverse, Functor, and Foldable

The macros module now includes Scala 3-specific derivation implementations for \Traverse\, \Functor\, and \Foldable\ type classes, enabling users to automatically derive these instances for case classes and ADTs using the \derives\ keyword. This change introduces new source files under \scala-3/higherkindness/droste/derivation\ (including \Derived.scala\, \DerivedFoldable.scala\, \DerivedFunctor.scala\, and \DerivedTraverse.scala\) that mirror the functionality previously available only via Scala 2 macro annotations, and adds corresponding tests to verify the derivation behavior.

modules/macros · high confidence

Added ScalaCheck generators and property laws for recursive data structures

The \modules/scalacheck\ module now provides automatic \Arbitrary\ instances and explicit generators for core recursive data types, including \Fix\, \Mu\, \Nu\, \Attr\, \Coattr\, and their variants. This enables users to easily generate test data for these structures using ScalaCheck. Additionally, the \modules/laws\ module introduces \BasisLaws\ to verify the algebra-coalgebra identity property for basis implementations.

modules/scalacheck · high confidence

Core recursion scheme library restructured under higherkindness.droste

The core library has been reorganized under the \higherkindness.droste\ package, introducing a comprehensive set of recursion schemes (such as \ana\, \cata\, \para\, \apo\, \histo\, and \futu\) via the \scheme\ and \zoo\ objects. This update adds foundational data types like \Fix\, \Attr\, and \Coattr\ in the \data\ package, implements a lazy \Stream\ type with \Monad\ and \Monoid\ instances, and provides generalized plumbing for composed functors and monadic transformations. Users gain access to a unified API for building, folding, and unfolding recursive data structures with support for both standard and advanced recursion patterns.

modules/core/src/main/scala/higherkindness · high confidence

Initial Droste microsite documentation and theme

The microsite now features a dedicated landing page and documentation structure for the Droste recursion library. This includes a Quick Start guide with SBT installation instructions and usage examples for recursion schemes, alongside a new visual theme with custom CSS/Sass styles, navigation, and layout templates.

modules/microsite · high confidence

Introduce algebraic expression evaluation, differentiation, and simplification

The athema module now provides core capabilities for manipulating algebraic expressions, including evaluating expressions to numeric values, computing symbolic derivatives with respect to a specified variable, and simplifying expression trees. These features are implemented using the higherkindness.droste recursion-schemes library and are supported by property-based tests verifying parsing, evaluation, differentiation, and gradient computation.

athema · high confidence

Introduction of Bazel build system and CI automation scripts

This change introduces a Bazel build system alongside the existing SBT setup, providing a new method to compile and manage dependencies. To support this, new shell scripts have been added: \scripts/ci-jobs.sh\ automates common development tasks such as building with Bazel, running SBT tests, formatting code, generating coverage reports, and updating documentation; \scripts/update\_bazel\_deps.sh\ manages the synchronization of JVM dependencies using the \bazel-deps\ tool. Users can now leverage these scripts to streamline their workflow, particularly for CI environments and dependency management.

scripts · high confidence

Introduction of Bazel version management wrapper

A new \tools/bazel\ script has been added to manage the Bazel build tool. This wrapper automatically downloads and installs a specific Bazel version (defaulting to 2.1.0) based on the host OS, verifying the installer's integrity via SHA-256 checksums. It also configures a local disk cache and allows overriding the default version via the \OVERRIDE\_BAZEL\_VERSION\ environment variable, ensuring consistent build environments across different machines.

tools · high confidence

New algebraic data types for recursive structures

Added new data types \Attr\, \AttrF\, \Coattr\, \CoattrF\, and \Fix\ to the core library, providing foundational structures for working with recursive algebraic data types and fixed points. These types include companion objects with algebra/coalgebra definitions, implicit type class instances (such as \Functor\, \Traverse\, and \Comonad\), and utility methods for conversion to and from Cats' \Cofree\ and \Free\ types, enabling more expressive pattern matching and recursion schemes.

modules/core/src/main/scala-2 · high confidence

Removals

Removal of core recursive data structures and scheme combinators

The \modules/core/src/main/scala/droste\ package has removed its foundational recursive data types and evaluation schemes. Specifically, the \Fix\ type (and its \FixDecl\ trait) for representing recursive structures, the \EnvT\ data type, and the \Pattern\, \Embed\, and \Project\ typeclasses have been deleted. Additionally, the \scheme\ package, which provided higher-order functions like \hylo\, \ana\, and \cata\ for folding and unfolding these structures, has been removed, along with the \FunctorK\ typeclass and its associated syntax. This change eliminates the library's previous mechanism for defining and processing recursive algebraic data types using these specific recursive schemes.

modules/core/src/main/scala/droste · high confidence

Architecture

Project migration to Bazel build system

The project has adopted Bazel as a build system, introducing configuration files such as WORKSPACE, BUILD, .bazelrc, and .bazelignore, along with dependency management via bazel\_deps.yaml and a Nix-based development environment (shell.nix, .envrc). This change provides a reproducible build environment and replaces the previous COPYING file with a standard LICENSE.md.

(repo-wide) · high confidence

Behavioural changes

Introduction of Niv-based dependency management for Nix environments

The project now uses Niv to manage Nix dependencies, introducing \nix/sources.json\ and \nix/sources.nix\ to pin specific versions of \niv\ and \nixpkgs\ (release-20.09). This change ensures that the Nix development environment is reproducible by explicitly tracking the commit hashes and SHA-256 checksums of upstream sources, replacing any previous ad-hoc or unversioned dependency resolution.

nix · high confidence

Library rebranded to higherkindness.droste with Scala 3 cross-build support

The library has moved from the qq.droste namespace to higherkindness.droste, requiring users to update their package imports. The codebase now supports cross-building for Scala 3, and the core algebraic structures (GAlgebra, GCoalgebra, Basis, Fix, Mu, Nu) have been re-implemented to align with current Cats library conventions, including new syntax extensions for composition, embedding, and projecting recursive structures.

repository · high confidence

Major build system modernization and Scala 3 support

The project has significantly upgraded its build infrastructure, moving from sbt 1.0.3 to 1.11.6 and replacing legacy plugins with modern equivalents, including sbt-scalajs 1.20.1, sbt-scala-native 0.5.8, and sbt-microsites 1.4.4. This update enables cross-compilation for Scala 2.12, 2.13, and Scala 3.3.5, while also introducing comprehensive documentation generation via mdoc 2.7.2 and code coverage via scoverage 2.3.1. The removal of the custom ScalacOptionsPlugin and the adoption of sbt-tpolecat standardizes compiler flags, and the build now supports multi-platform publishing with sbt-ci-release.

project · high confidence

Test coverage

Comprehensive test coverage for recursion schemes and data types

Added extensive property-based tests for the \higherkindness.droste\ library, covering core data types (\Fix\, \Mu\, \Nu\, \Attr\, \Coattr\, \Cofree\, \Free\, \Stream\, \ListF\) and advanced recursion schemes (\ana\, \cata\, \gcata\, \gana\, \histo\, \zygo\, \futu\, \apoM\, \paraM\, \prepro\, \postpro\, \trans\). The tests verify algebraic laws, scheme equivalences, and example behaviors such as making change, list transformations, and expression evaluation, while also removing the legacy \droste.scheme.SchemeTests\ file.

modules/tests · high confidence

Dependencies

Add Bazel build support for the meta module

The meta module now includes a Bazel build configuration (BUILD file) that defines a scala\_macro\_library target for the Scala 2 macro implementation. This enables users to build and depend on the meta module using the Bazel build system, in addition to existing build tools. The macro source code itself (Meta.scala) remains unchanged, providing runtime type casting optimization via macros.

modules/meta · high confidence

Upgrade core dependencies and introduce MiMa for binary compatibility

This change updates the project's dependency versions, bumping Cats, Cats-Free, and Algebra to 2.13.0, scala-collection-compat to 2.13.0, refined to 0.11.3, and scalacheck to 1.19.0. It also introduces MiMa (Migration Manager) to ensure binary compatibility across releases, configuring previous artifact checks for the core, meta, macros, scalacheck, laws, and reftree modules, and excluding specific signature problems in the core module to maintain compatibility with the previous Droste version (0.9.0-M3).

(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 63.

Lenses

  • Code Health 96
  • Architecture 86
  • Maturity 53
  • Readiness 73
  • Security 69
  • Accessibility 68

Changes since last survey

  • 300 commits — 296 feature/other, 4 fixes

By area

  • project/plugins.sbt — 129 commits
  • (root) — 110 commits
  • project/build.properties — 30 commits
  • (repo) — 12 commits
  • .github/workflows — 7 commits
  • project/ProjectPlugin.scala — 4 commits
  • .github/release-drafter.yml — 2 commits
  • modules/tests — 2 commits
  • modules/core — 1 commit
  • modules/macros — 1 commit
  • modules/microsite — 1 commit
  • modules/scalacheck — 1 commit

Notable commits

  • fix: Merge pull request #210 from higherkindness/fixes-license-issue
  • fix: Merge pull request #213 from higherkindness/revert-212-patch-2
  • fix: Revert "Brings back the COPYING file as COPYING_NOTICE"
  • fix: Revert the sbt-github plugin bump (#237)
  • change: Add missing ci-publish sbt alias
  • change: Add support for deriveTraverse in scala3
  • change: Adding notice to the README file
  • change: Adds year range to the license
  • change: Brings back the COPYING file as COPYING_NOTICE
  • change: Bumps Scala 3 version (#299)
  • change: Create LICENSE.md
  • change: Crossbuild scala 3
  • change: Delete COPYING temporarily
  • change: Merge branch 'main' into auto-update-workflows-docs
  • change: Merge branch 'main' into main
  • change: Merge branch 'main' into patch-1
  • change: Merge pull request #191 from custommonkey/main
  • change: Merge pull request #194 from higherkindness/gb-scala3
  • change: Merge pull request #206 from higherkindness/gb-scala3
  • change: Merge pull request #207 from higherkindness/gb-release
  • …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

higherkindness/droste 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 7617eb2b58607bdf1a4c30622d9bd66d00dfc860 — 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.