Skip to content
CAI
Software that uses CAICheck a score

typelevel/paiges

59.5

Adequate · 20 September 2026

1.7k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Paiges is a functional pretty-printing library for Scala that constructs and renders formatted text documents. It provides a core engine with lazy document evaluation and integrates with the Cats ecosystem through standard typeclass instances. The system supports cross-compilation across the JVM, Scala.js, and Scala Native platforms.

Features

Add Scala Native platform support for Paiges

The Paiges library now supports Scala Native. A new \Platform.scala\ file has been added to the \cats/native\ module, which defines platform detection constants (\isJvm\, \isJs\, \isNative\) to enable the library to function correctly on the Native target.

cats/native · high confidence

Add platform-specific runtime detection for Scala.js and JVM

The library now includes distinct \Platform\ objects for the JVM and Scala.js targets to allow code to detect the runtime environment at compile time. The \cats/jvm\ module provides a \Platform\ object where \isJvm\ is true, while the \cats/js\ module provides one where \isJs\ is true. This enables conditional compilation and dead-code elimination based on the target platform.

cats/js, cats/jvm · high confidence

Adds Cats typeclass instances for Document and Style

The library now provides integration with the Cats ecosystem by adding \Contravariant\, \Semigroupal\, and \Defer\ instances for \Document\, as well as \Monoid\ and \Eq\ instances for \Doc\ and \Style\. This allows users to leverage Cats' functional programming abstractions directly with paiges' core types, enabling more composable and idiomatic code when working with document layouts and styling.

cats/shared/src/main · high confidence

Core pretty-printing engine and lazy document support

The core library now includes the main pretty-printing implementation (Doc, Chunk, Style) and introduces LazyDoc for deferred document construction, allowing users to build complex, potentially infinite document structures without immediate evaluation overhead. This change also adds Scala version compatibility shims (ScalaVersionCompat) to support both Scala 2.12 and 2.13+ by abstracting over Stream and LazyList, ensuring the core rendering engine works consistently across supported Scala versions.

core/src/main · high confidence

Initial project setup and documentation for Paiges

This change establishes the initial structure for the Paiges library, an implementation of Wadler's prettier printer. It adds configuration files for the build environment (JVM options), code formatting (Scalafmt 3.8.6 with Scala 2.13 dialect), and Git history management. It also updates the README to provide a comprehensive overview, including quick-start instructions for integrating the library via Maven/SBT for JVM, Scala.js, and Scala Native, along with examples of usage and benchmarking details.

(repo-wide) · high confidence

Test coverage

Add Paiges performance benchmark; Added comprehensive test suite for Paiges document rendering; Added property-based law tests for Paiges types.

Dependencies

Update build dependencies to Scala 2.13.16, 2.12.20, 3.3.4, and Cats 2.12.0

The project's build configuration has been updated to support Scala versions 2.12.20, 2.13.16, and 3.3.4. Key library dependencies have been upgraded, including Cats core and laws to version 2.12.0, and testing libraries such as ScalaTest FunSuite and ScalaCheck to version 3.2.19. This change ensures compatibility with the latest stable releases of the Scala platform and its ecosystem libraries.

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

Lenses

  • Code Health 94
  • Architecture 100
  • Maturity 53
  • Readiness 53
  • Security 62

Changes since last survey

  • 300 commits — 296 feature/other, 4 fixes

By area

  • project/plugins.sbt — 107 commits
  • (root) — 84 commits
  • (repo) — 57 commits
  • project/build.properties — 33 commits
  • .github/workflows — 11 commits
  • core/src — 8 commits

Notable commits

  • fix: Fix #341: Enable coverage after plugin is released for 2.12.13 (#348)
  • fix: Fix Build Badge
  • fix: Fix NPE caused by eager initialization of Reset (#726)
  • fix: Merge pull request #630 from ekrich/fix/status
  • change: Add 'Reformat with scalafmt 3.8.4' to .git-blame-ignore-revs
  • change: Add support for Scala Native (#338)
  • change: Bump dependencies (#632)
  • change: Merge branch 'master' into update/sbt-scoverage-2.2.2
  • change: Merge branch 'master' into update/sbt-typelevel-0.7.3
  • change: Merge branch 'master' into update/sbt-typelevel-0.8.0
  • change: Merge branch 'master' into update/scala-library-2.13.16
  • change: Merge branch 'update/sbt-scoverage-2.2.2' into update/scala-library-2.13.15
  • change: Merge pull request #331 from scala-steward/update/scala-library-2.13.5
  • change: Merge pull request #335 from scala-steward/update/sbt-sonatype-3.9.7
  • change: Merge pull request #336 from scala-steward/update/sbt-dotty-0.5.4
  • change: Merge pull request #343 from scala-steward/update/cats-core-2.6.0
  • change: Merge pull request #344 from scala-steward/update/mdoc-2.2.20
  • change: Merge pull request #346 from scala-steward/update/sbt-1.5.1
  • change: Merge pull request #350 from scala-steward/update/sbt-scoverage-1.7.2
  • change: Merge pull request #351 from scala-steward/update/sbt-scoverage-1.7.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/paiges 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 da2ffe05cd2011de884b874cc96b94f9f9484637 — 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.