NextGenTel/akka-tools
55.0
Adequate · 21 September 2026
4.2k
lines of production code
Scala
primary language
4
measurements over time
What this system is
This system is a Scala library for building distributed, event-sourced applications using the Akka framework. It provides a comprehensive persistence layer that supports JDBC-based event and snapshot storage, alongside cluster coordination utilities for managing node states. The library also offers a structured aggregate pattern for managing domain state transitions and durable messaging within actors.
Features
Added Trust Account Creation System example
A new example demonstrating a Trust Account Creation System has been added to the Akka Tools library. This includes the core aggregate logic, command and event definitions, and a starter configuration that wires together email, e-signing, and trust account processing systems. The example illustrates how to use the \AggregateStarter\ for bootstrapping and how the aggregate coordinates with external actors to complete a multi-step business process.
examples/aggregates/src/main/scala/no/nextgentel/oss/akkatools/example2 · high confidence
Adds SQL schema files for MySQL and PostgreSQL and updates configuration
The Akka JDBC journal now includes database-specific Liquibase SQL scripts for MySQL and PostgreSQL, enabling users to initialize the required schema for those databases. The configuration has been updated to support the new read journal provider and reflects the package rename from 'no.ngt' to 'no.nextgentel'.
akka-tools-jdbc-journal/src/main/resources · high confidence
Introduced new aggregate architecture with improved usability and functional DM generation
The library has been refactored to introduce a new, more usable aggregate structure. This includes a new \AggregateStarter\ for bootstrapping aggregates, a \StateTransition\ model that allows state transitions to return new or extra events, and a \GeneralAggregateV3\ that supports functional durable message generation via \eventToDMFunc\. Additionally, \ActorWithDMSupport\ and \ActorWithDMSupportFuture\ were added to simplify implementing regular actors that interact with durable messages, and \AggregateStateGetter\ was added to facilitate testing by allowing retrieval of an aggregate's current state.
akka-tools-persistence/src/main · high confidence
New booking example demonstrating aggregate patterns
Added a new example application in the aggregates module that demonstrates an Akka-based booking system. The example includes a BookingAggregate implementing the GeneralAggregateDMViaEvent pattern, handling commands like OpenBookingCmd, ReserveSeatCmd, and CancelSeatCmd, with corresponding events and state management. The demo app uses AggregateStarter for bootstrapping and includes utility classes for data source management and a state machine for booking lifecycle management.
examples/aggregates/src/main/scala/no/nextgentel/oss/akkatools/example · high confidence
Removals
Removal of Akka cluster singleton and JDBC persistence components
The \ClusterSingletonHelper\ and \NgtSeedNodesListOrderingResolver\ classes in the Akka cluster module have been removed, eliminating the ability to manage cluster singletons and resolve seed node ordering. Additionally, the \JdbcJournal\ and \StorageRepo\ components in the JDBC journal module have been deleted, removing the implementation for storing and retrieving persistent actor state and snapshots via a relational database. These changes indicate a significant reduction in the framework's built-in support for cluster coordination and JDBC-based persistence.
akka-tools-cluster/src/main/scala/no/ngt, akka-tools-jdbc-journal/src/main/scala/no/ngt · high confidence
Behavioural changes
Added configuration files for the aggregates example
New configuration files were added to the aggregates example to support the application's runtime environment. An application.conf file was introduced to configure Akka cluster settings, including remote transport, seed nodes, and logging filters, while also including external Akka tools for sharding and JDBC journaling. Additionally, a logback.xml file was added to define console and rolling file appenders for structured logging, with specific patterns for Akka sources and recovery states.
examples/aggregates/src/main/resources · high confidence
Improved cluster error detection and startup logic
The cluster listener now prevents false-positive error detection during startup by checking if the node has actually joined the cluster before evaluating other nodes' status. It also handles application shutdown gracefully by stopping error detection when the JVM is shutting down, preventing spurious restart triggers. Additionally, the code was renamed from 'ngt' to 'nextgentel' and refactored to use a new 'AkkaClusterConfig' class with a Java API.
akka-tools-cluster/src/main/scala/no/nextgentel · high confidence
JDBC journal and read journal implementations rewritten for Akka 2.4/2.5 compatibility
The JDBC journal and read journal implementations have been completely rewritten to support Akka 2.4 and 2.5. The write journal now publishes events via Distributed PubSub for instant delivery to the read journal, and the read journal uses a GraphStage-based source for event streams. The implementation now supports Oracle, MySQL, and PostgreSQL databases, and includes a new \EventWithInjectableTimestamp\ trait to inject database timestamps into events. Configuration has been simplified with a new \jdbcJournalRuntimeDataFactory\ parameter to support multiple journals with different configurations.
akka-tools-jdbc-journal/src/main/scala/no/nextgentel · high confidence
New serialization trait and updated cluster node repository interface
Added a new \JacksonJsonSerializableButNotDeserializable\ trait alongside the existing \JacksonJsonSerializable\ in the \akka-tools-common\ module. Additionally, the \ClusterNodeRepo\ interface was moved to \akka-tools-common\ and updated to include a \joined\ boolean parameter in its \writeClusterNodeAlive\ and \findAliveClusterNodes\ methods, allowing callers to filter or record node status based on whether the node has joined the cluster.
akka-tools-common · high confidence
Renamed JSON serializer from NgtJsonSerializer to JacksonJsonSerializer
The JSON serialization component has been renamed from NgtJsonSerializer to JacksonJsonSerializer, with corresponding updates to the package name (no.ngt.oss to no.nextgentel.oss) and configuration keys (ngt-json-serializer to jackson-json-serializer). The serializer now uses a pre-configured ObjectMapper via setObjectMapper() instead of init(), and exceptions thrown during serialization no longer cause Akka remoting connections to drop.
akka-tools-json-serializing/src · high confidence
Test coverage
Added test configuration and logging setup for JDBC journal tests; Added test configuration files for Akka persistence tests; Added test configuration for Akka 2.4.0-RC3; Added test fixtures for the Booking aggregate; Added tests for ClusterSingletonHelper and SeedNodesListOrderingResolver; Added tests for DurableMessage support in actors; Added tests for JDBC journal and snapshot store; Added tests for aggregate behavior and event generation; Added tests for aggregate state management and snapshot handling; Added tests for the Trust Account Creation system; Added tests for the booking aggregate example; Added tests for the new V2 aggregate implementation.
Dependencies
Upgrade to Akka 2.5 and Scala 2.12
The project has been upgraded to Akka 2.5.16 and Scala 2.12.6, replacing the previous Akka 2.3/2.4 and Scala 2.11 versions. This update includes new dependencies for Akka Cluster, Cluster Sharding, and Persistence Query, while removing the experimental persistence module. The build configuration now supports cross-compilation for Scala 2.11.8 and 2.12.6, and test dependencies have been updated to include Akka Testkit and Awaitility.
(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 57 → 55 (-1.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 96 → 94 (-1.5)
- Architecture 100 → 68 (-31.9)
- Maturity 40 → 54 (+13.9)
- Readiness 46 → 44 (-1.4)
- Security 100 → 78 (-22.2)
Resolved (7)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- LLM evaluation failed
- No exposed public API
- Test reliability not included
- complexity unreadable for .scala — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (26)
- Documentation: no installation or build instructions (README.md)
- Documentation: written for insiders (README.md)
- Duplicated block (13 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (17 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (21 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (23 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (26 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (37 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (40 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (7 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (8 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (9 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (9 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (9 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- Duplicated block (9 lines × 3) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/StorageRepoImpl.scala)
- EnhancedPersistentView.receive (cognitive 17) (akka-tools-persistence/src/main/scala/no/nextgentel/oss/akkatools/persistence/EnhancedPersistentActor.scala)
- EnhancedPersistentView.receive (cyclomatic 16) (akka-tools-persistence/src/main/scala/no/nextgentel/oss/akkatools/persistence/EnhancedPersistentActor.scala)
- GeneralAggregateBase.tryCommand (cognitive 39) (akka-tools-persistence/src/main/scala/no/nextgentel/oss/akkatools/aggregate/GeneralAggregateBase.scala)
- JdbcAsyncWriteJournal.asyncReplayMessages (cognitive 16) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/JdbcAsyncWriteJournal.scala)
- JdbcEventsByPersistenceIdSource.createLogic (cognitive 23) (akka-tools-jdbc-journal/src/main/scala/no/nextgentel/oss/akkatools/persistence/jdbcjournal/JdbcEventsByPersistenceIdSource.scala)
- …and 6 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
NextGenTel/akka-tools 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 21 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 a877a4db118dc5a06198cbfe88d9e589d4563238 — 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-fa71c66cabd8.