higherkindness/droste
63.2
Adequate · 20 September 2026
3.3k
lines of production code
Scala
primary language
1
measurement over time
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.