softwaremill/quicklens
60.2
Adequate · 28 September 2026
1.4k
lines of production code
Scala
primary language
2
measurements over time
What this system is
Quicklens is a Scala library that provides macros for deeply modifying immutable data structures, supporting Scala 2.11 through 3.3 and cross-compiling to JVM, JavaScript, and Native platforms. It enables path-based updates for nested fields, collections, and options via methods like modify, modifyAll, and lens-based APIs. The system includes comprehensive test coverage for complex hierarchies, sealed traits, and edge cases, ensuring reliable behavior across diverse data types and language versions.
How it got here
2015 — Initial project setup and build modernization
4 changes.
The project was initialized with Apache 2.0 licensing, CI automation, and comprehensive documentation for the Quicklens library. The build system was migrated from sbt 0.13 to 1.x, modernizing plugin configurations for Scala.js and Scala Native. Concurrently, the macro-based lens implementation and associated test utilities were removed, stripping the core functionality from the source code.
2017–2019 — Scala 2.13 support and API modernization
4 changes.
The project modernized its API by introducing lazy lens modification capabilities and officially supporting Scala 2.13, while restructuring implicits to prevent conflicts. It also expanded cross-platform compatibility to include Scala Native and Scala 3, accompanied by comprehensive test coverage for the new and existing features.
2021 — Scala 3 support and macro fixes
4 changes.
This period focused on introducing a native Scala 3 implementation for the Quicklens library, including core macro logic and public API exposure. Concurrently, the Scala 2 macro implementation was updated to correctly handle parameterized types and closure interactions, with comprehensive test coverage added for both versions.
Features
Initial Scala 3 implementation of Quicklens macros and API
This change introduces the native Scala 3 implementation of the Quicklens library, located in the \scala-3\ source directory. It provides the core macro logic in \QuicklensMacros.scala\ to handle path modification, including support for nested fields, extension methods, and various collection traversals (\each\, \at\, \index\, etc.). The \package.scala\ file exposes the public API, including \modify\, \modifyAll\, and lens helpers, while defining the \QuicklensFunctor\ and \QuicklensIndexedFunctor\ type classes to support modifications on \Seq\, \Array\, \Option\, and \Map\ types. This replaces or runs alongside the Scala 2 implementation, enabling users to leverage Scala 3-specific features like macros and inline definitions.
quicklens/src/main/scala-3 · high confidence
Initial project setup with Apache 2.0 license and CI automation
The repository is initialized with the Apache License 2.0 (LICENSE.txt) and a comprehensive README documenting the Quicklens library's capabilities, including deep field modification, conditional updates, and traversal of collections and options. To support development workflows, the project adds configuration for Scala Steward (to manage dependency updates), Mergify (to automate merging of dependency and build-file PRs), and Scalafmt (configured for Scala 2.13 and Scala 3 dialects). The .gitignore is also expanded to exclude common IDE and build artifacts.
(repo-wide) · high confidence
New lens-based modification API and Scala 2.13 support
This release introduces a new \modifyLens\ and \modifyAllLens\ API that returns lazy, reusable modification functions, allowing users to define a modification path once and apply it to multiple objects without re-parsing the path. The library now officially supports Scala 2.13, with implementation details moved into the \scala-2.13+\ source directory. To prevent implicit conflicts with other libraries, the \QuicklensEach\ implicits have been moved to a \LowPriorityImplicits\ trait. Additionally, new methods \at\, \atOrElse\, and \index\ are available for modifying elements in Options, Sequences, and Maps.
quicklens/src/main/scala-2.13+ · high confidence
Removals
Removal of macro-based lens implementation
The \QuicklensMacros\ object and the \modify\ macro definition in \package.scala\ have been removed from the source code. This eliminates the compile-time macro machinery that previously generated immutable update paths (e.g., \modify(a)(\_.b.c)\), meaning the library no longer provides its core lens functionality in this location.
quicklens/src/main/scala · high confidence
Behavioural changes
Fix macro behavior for parameterized types and eachWhere closures
The Scala 2 macro implementation has been updated to correctly handle parameterized types within modification paths and to resolve issues with the interaction between \eachWhere\ and closures. This ensures that complex path expressions involving generic types and filtered collections are processed accurately by the \QuicklensMacros\.
quicklens/src/main/scala-2 · high confidence
Scala 2.13 cross-build support and API restructuring
Quicklens now supports Scala 2.13, introducing a dedicated source directory for version-specific implementations. This release restructures the implicit resolution hierarchy by moving \LowPriorityImplicits\ to a separate trait to prevent conflicts with other libraries, and renames the \modify\[T\]\ entry point to \modifyLens\[T\]\ to distinguish lazy lens creation from immediate modification. The API also adds support for \Option.get\ and \Option.getOrElse\ patterns, relaxes type constraints for \QuicklensMapAt\, and introduces an \index\ method for options, sequences, and maps.
quicklens/src/main/scala-2.13- · high confidence
Test coverage
Added Scala 3-specific test coverage for new and edge-case features; Added tests for QuicklensMapAtFunctor implicits; Expanded test coverage for quicklens modification capabilities; Removed test utility file.
Dependencies
Migrate build system to sbt 1.x and modernize plugin configuration
The project build has been upgraded from sbt 0.13 to sbt 1.12.12, requiring users and contributors to use a compatible sbt version. The legacy \project/Build.scala\ file has been removed in favor of a modern \project/plugins.sbt\ configuration that explicitly defines versions for Scala.js (1.21.0), Scala Native (0.5.12), and sbt-projectmatrix (0.11.0), alongside updated SoftwareMill common and publish plugins. This change simplifies the build structure and aligns the project with current sbt standards.
project · high confidence
Updated Scala versions and added Scala Native support
The build configuration has been updated to support Scala 2.11.12, 2.12.21, 2.13.18, and Scala 3.3.8. Additionally, the project now cross-builds for Scala Native alongside JVM and JavaScript platforms, with Scala 3 support enabled for JS and Native targets. Test dependencies have been updated to ScalaTest 3.2.18.
(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
Score
- CAI 60 → 60 (+0.5)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 94 → 94 (+0.0)
- Architecture 69 → 69 (+0.0)
- Maturity 54 → 54 (+0.0)
- Readiness 61 → 64 (+2.8)
- Security 62 → 62 (+0.0)
New (2)
- Documentation: no project overview (README.md)
- Documentation: no usage examples (README.md)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
softwaremill/quicklens 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 28 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 a6ed237680641abbf341ba2c784090a7555b7119 — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.