ReactiveMongo/Play-ReactiveMongo
43.4
Weak · 20 September 2026
1.4k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is a Scala library that provides ReactiveMongo integration for the Play Framework, enabling asynchronous database operations. It manages MongoDB connection lifecycles, configuration parsing, and dependency injection while offering utilities for form binding and file uploads. The library supports a wide range of Play Framework versions (2.5 through 3.0) and Scala versions (2.11 through 3.3) through dedicated compatibility layers.
How it got here
2012 — Build modernization and legacy cleanup
8 changes.
The project underwent a significant build system overhaul, migrating from SBT 0.11.3 to SBT 2.0 and updating support for modern Scala and Play Framework versions. This period involved removing legacy modules, such as JsValidation and the async-mongo driver, while establishing comprehensive test coverage for the new ReactiveMongo integration.
2015–2017 — Play integration API redesign
6 changes.
This period focused on restructuring the ReactiveMongo Play module by introducing a new, injectable API centered around ReactiveMongoApi and ReactiveMongoModule. The work involved implementing core connection lifecycle management, adding configuration helpers for Play 2.6 and 2.7, and establishing a CI pipeline to automate testing and publishing.
2019–2024 — Play Framework and Scala version compatibility
7 changes.
This period focused on extending ReactiveMongo's compatibility with newer versions of the Play Framework (2.8 through 3.0) and Scala (2.13 and 3). The work involved creating version-specific modules and shims to handle API changes in configuration access, controller types, and stream libraries, ensuring the library functions correctly across these evolving ecosystems.
Features
Add Play 3.0 support for ReactiveMongo
This change introduces a new Play 3.0 module alongside the existing Play 2 module, enabling ReactiveMongo to function with Play 3.0. The Play 3.0 implementation adapts to framework changes by switching from Akka Streams to Pekko Streams (evidenced by the import of \org.apache.pekko.stream.Materializer\ and \reactivemongo.pekkostream.GridFSStreams\), updating the controller base class to Play 3.0's \AbstractController\, and adjusting configuration accessors. Users can now integrate ReactiveMongo with applications running on Play 3.0.
src/main/play-2/modules/reactivemongo, src/main/play-3.0/modules/reactivemongo · high confidence
Initial project setup and configuration scaffolding
The repository is initialized with essential build and configuration files, including .scalafmt.conf (version 3.11.5), .scalafix.conf, .scala-steward.conf, and version.sbt (using dynver). A new README.md documents support for Play Framework 2.5 through 3.0 and ReactiveMongo, replacing the legacy README.txt. The NOTICE.txt file is updated to reflect the ReactiveMongo branding and add Stephane Godbillon as a copyright holder. Build infrastructure is established with codestyle.sbt and .gitignore updates.
(repo-wide) · high confidence
Introduction of DefaultReactiveMongoApi implementation
The repository now includes a new \DefaultReactiveMongoApi\ class that serves as the concrete implementation for the ReactiveMongo API. This component handles the lifecycle of MongoDB connections, including parsing connection URIs with database support, establishing connections via the AsyncDriver, and registering shutdown hooks to ensure proper cleanup of connections and the driver when the application stops. It also provides logic for parsing configuration from the Play \Configuration\ object to support both default and named MongoDB bindings.
repository · high confidence
Introduction of new Play integration API components
This change introduces a new set of API components for the ReactiveMongo Play module, including \ReactiveMongoApi\ and \ReactiveMongoModule\ for dependency injection, \Formatters\ for Play form data binding, \PathBindables\ for URL path parameter binding, and \WithCollection\/\CollectionResolution\ traits for convenient collection access. These additions provide a more structured and injectable way to interact with MongoDB within Play applications, replacing or supplementing previous plugin-based approaches.
src/main/scala/play/modules/reactivemongo · high confidence
New configuration and Play integration helpers for ReactiveMongo
The Play 2.6 ReactiveMongo module now includes dedicated helper objects to simplify integration with the Play framework. A new Config object provides utility methods to safely retrieve optional configuration values (Configuration, String, Boolean) from the Play Configuration API, reducing boilerplate in setup code. Additionally, a PlaySupport object introduces a type alias for the Play Controller and a FileInfo extractor that wraps Play's Multipart.FileInfo, enabling more idiomatic pattern matching when handling file uploads within controllers.
src/main/play-2.6/modules/reactivemongo · high confidence
Removals
Removal of legacy AsyncMongo plugin and BSON helpers
The \MongoAsyncPlugin\, \MongoTemplate\, and \PlayBson\ components have been removed from the \play.modules.mongodb\ package. This eliminates the legacy \org.asyncmongo\ driver integration, its associated BSON serialization/deserialization implicits, and the \ResourceTemplate\-based \MongoTemplate\, effectively ending support for this specific asynchronous MongoDB access pattern within this module.
src/main/scala/play/modules/mongodb · high confidence
Removed Play 2 MongoDB Async sample application
The Play 2 MongoDB Async sample application submodule has been removed from the repository, eliminating this specific example from the available samples.
samples · high confidence
Removed legacy JsValidation and Resource modules
The legacy \JsValidation\ and \Resource\ modules, which provided JSON-based validation and resource management abstractions, have been removed from the codebase. This cleanup eliminates deprecated APIs for validating \JsValue\ structures and managing CRUD operations via \ResourceController\, simplifying the library's public surface area.
src/main · high confidence
Behavioural changes
Add Play 2.8 compatibility layer for ReactiveMongo
This change introduces a new compatibility module for Play 2.8, adding \Config.scala\ and \PlaySupport.scala\ to bridge ReactiveMongo with the Play 2.8 framework. The \Config\ object provides helper methods to retrieve optional configuration values (Configuration, String, Boolean) from the Play \Configuration\ API, while \PlaySupport\ defines a type alias for Play's \AbstractController\ and includes a \FileInfo\ extractor to handle multipart file uploads using Play 2.8's \Multipart.FileInfo\. This enables ReactiveMongo to function correctly within the Play 2.8 ecosystem.
src/main/play-2.8/modules/reactivemongo · high confidence
Added Play 2.9 compatibility layer for ReactiveMongo
This change introduces a new module under src/main/play-2.9/modules/reactivemongo to support Play Framework 2.9. It includes a Config object that provides helper methods for retrieving optional configuration values (Configuration, String, Boolean) and a PlaySupport object that defines a Controller type alias for Play 2.9's AbstractController and updates the FileInfo extractor to handle the new Multipart.FileInfo signature. These additions ensure the ReactiveMongo module functions correctly with the updated Play 2.9 API.
src/main/play-2.9/modules/reactivemongo · high confidence
Added Scala 2.13+ and Scala 3 compatibility shims
The library now supports Scala 2.13 and Scala 3 by introducing version-specific compatibility layers. For Scala 2.13+, the \Compat\ object uses standard \Either\ methods (\map\, \flatMap\), whereas for Scala 2.12 and earlier, it uses the deprecated \right.map\ and \right.flatMap\ syntax. Additionally, a Java implementation (\NamedDatabaseImpl\) is provided for Scala versions prior to 2.13 to work around annotation handling issues, ensuring consistent behavior across supported Scala versions.
src/main/scala-2.13+/play/modules/reactivemongo, src/main/scala-2.13-/play/modules/reactivemongo · high confidence
Added Scala 3-specific implementation for NamedDatabaseImpl
A new Scala 3 source file (src/main/scala-3/play/modules/reactivemongo/NamedDatabaseImpl.scala) has been added to support Scala 3 compilation. This file provides a Scala 3-compatible implementation of the NamedDatabaseImpl class, which extends the NamedDatabase annotation directly (unlike the Scala 2.13 version that extends the trait), ensuring the library can be built and used with Scala 3.
src/main/scala-2.13/play/modules/reactivemongo, src/main/scala-3/play/modules/reactivemongo · high confidence
Establishes CI pipeline for code validation, dependency installation, and publishing
Adds a new set of CI scripts to automate build preparation, code quality checks, and artifact publishing. The pipeline installs and configures OpenSSL and MongoDB (v3.6.6) as build dependencies, runs Scalafmt and Scalafix checks to enforce code style, and executes tests (excluding Scala 3-specific exclusions when applicable). Upon successful builds on the master branch with publish credentials, it publishes snapshots to Sonatype Nexus, supporting both standard and cross-compiled Scala versions.
_.ci\scripts · high confidence
Migrate build system to SBT 2.0 and update Scala/Play support
The project's build infrastructure has been significantly upgraded, moving from SBT 0.11.3 to SBT 2.0.8 and updating the default Scala version to 2.12.20 with cross-compilation support for Scala 2.11, 2.12, 2.13, and 3.3.8. The build now supports Play Framework versions 2.5.0 through 2.8.22, with specific source directories and shading configurations for each Play version. Additionally, the build process includes updated plugins for formatting (scalafmt), versioning (dynver), release management, and binary compatibility checking (MiMa), along with a new build script that automates packaging across different Scala and Play version combinations.
project · high confidence
Updated Play Framework compatibility for configuration and controller support
The reactivemongo module has been updated to align with Play Framework API changes between versions 2.6 and 2.7. For Play 2.6 and earlier, configuration access uses direct getters (getString, getBoolean), while Play 2.7+ switches to optional getters (getOptional) to handle missing keys more safely. Additionally, the controller type alias in PlaySupport now references AbstractController for Play 2.7+, whereas Play 2.6 uses the standard Controller type. The FileInfo parser in Play 2.7 also accounts for an additional parameter in Multipart.FileInfo.
src/main/play-2.6-/modules/reactivemongo, src/main/play-2.7/modules/reactivemongo · high confidence
Test coverage
Added test configuration files for MongoDB URI parsing scenarios; Added test suite for Play integration and BSON formatters; Added test utilities for Play 2.7 integration; Added test utilities for Play 3.0 compatibility; Removed test configuration files for MongoDB plugin.
Dependencies
Major build system overhaul and dependency modernization
The build configuration has been completely rewritten to support modern Scala versions (2.13 and 3) and Play Framework 3.0, replacing the legacy async-mongo driver with ReactiveMongo. This update introduces conditional dependency management for Play 2.x versus Play 3.x (switching between Akka and Pekko streams), integrates the Silencer plugin for Scala 2 to handle compiler warnings, and updates test dependencies to Specs2 4/5 and JUnit 4.13.2.
(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 43.
Lenses
- Code Health 99
- Architecture 69
- Maturity 34
- Readiness 59
- Security 36
Changes since last survey
- 300 commits — 293 feature/other, 7 fixes
By area
- (root) — 120 commits
- project/build.properties — 65 commits
- .circleci/config.yml — 55 commits
- project/plugins.sbt — 44 commits
- src/main — 4 commits
- project/Common.scala — 3 commits
- .ci_scripts/beforeInstall.sh — 2 commits
- project/Compiler.scala — 2 commits
- project/build.sh — 2 commits
- (repo) — 1 commit
- .github/ISSUE_TEMPLATE.md — 1 commit
- src/test — 1 commit
Notable commits
- fix: Adding play 3.0 support. Fixes #564 (#565)
- fix: Fix CI
- fix: Fix config.yml
- fix: Fix scala-xml issue
- fix: Fix snapshot publication in CI
- fix: Revert Scala3 to LTS (#619)
- fix: Try to fix snapshot publication (1)
- change: Bump to 1.0.5
- change: Bump to 1.1.0-RC2
- change: Clean compatibility checks
- change: Close #413, #414 - Update scala-library to 2.12.15 (#415)
- change: Close #419 - Update scala-library to 2.13.7 (#420)
- change: Disable snapshot publication in CI for release version
- change: Merge pull request #603 from scala-steward/update/scala3-library-3.6.4
- change: Patch version 1.0.3
- change: Release 1.1.0-RC12
- change: Release 1.1.0-RC14
- change: Release 1.1.0-RC15
- change: Release 1.1.0-RC16
- change: Release 1.1.0-RC6
- …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
ReactiveMongo/Play-ReactiveMongo 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 325eb63081dfc612d3be21f735b79c0b6d4c56dd — 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.