Skip to content
CAI
Software that uses CAICheck a score

innFactory/akka-persistence-gcp-datastore

58.4

Adequate · 21 September 2026

1.3k

lines of production code

Scala

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Akka Persistence plugin that integrates Google Cloud Datastore as a backend for event sourcing and CQRS patterns. It provides the core infrastructure for persisting actor state, including a write journal for event storage, a read journal for querying events by ID or tag, and a snapshot store for state serialization. The implementation leverages Akka Streams to stream persistence data and supports both Scala and Java DSLs for querying and managing persistent data.

Features

Add Datastore read journal implementation

Added the Datastore read journal implementation for Akka Persistence Query, including the Scala DSL (\DatastoreScaladslReadJournal\), the Java DSL wrapper (\DatastoreJavadslReadJournal\), and the provider (\DatastoreReadJournalProvider\). This enables querying persisted events from a Datastore backend using standard Akka Persistence Query interfaces such as \eventsByTag\, \eventsByPersistenceId\, \persistenceIds\, and \currentPersistenceIds\.

src/main/scala/akka/persistence/datastore/journal/read · high confidence

Add Google Cloud Datastore snapshot store implementation

Introduces a new DatastoreSnapshot component that enables Akka Persistence to save and load snapshots using Google Cloud Datastore. This adds support for persisting and retrieving state snapshots to/from the Datastore, allowing users to leverage Datastore as a backend for their Akka Persistence snapshots.

src/main/scala/akka/persistence/datastore/snapshot · high confidence

Add serialization support for Datastore persistence

Introduced new serialization classes for the Datastore persistence module, including DatastoreSerializer, SerializedPayload, and SerializedSnapshot. These components enable the serialization and deserialization of persistent data and snapshots, integrating with Akka's serialization extension to handle byte arrays, serializer IDs, and manifests for Datastore operations.

src/main/scala/akka/persistence/datastore/serialization · high confidence

Added Akka Persistence configuration for GCP Datastore

A new reference.conf file has been added to configure Akka Persistence plugins for Google Cloud Datastore. This includes settings for the journal (gcp-datastore-journal), snapshot store (gcp-datastore-snapshot), and read journal (gcp-datastore-query), along with environment-variable-based project ID and test host configurations.

src/main/resources · high confidence

Initial implementation of the Akka Datastore Journal

This change introduces the core components for persisting Akka actor state to Google Cloud Datastore. The update adds the \DatastoreConnection\ object to manage Datastore client initialization for both production and test environments, alongside the \DatastoreJournal\ class which implements \AsyncWriteJournal\ and \AsyncRecovery\ to handle message persistence, deletion, and replay operations via the Datastore API.

src/main/scala/akka/persistence/datastore/journal · high confidence

Initial project scaffolding and configuration

The repository was initialized with essential configuration and metadata files. A Mergify configuration (.mergify.yml) was added to automate pull request merging and head branch deletion. A Scala Steward configuration (.scala-steward.conf) was introduced to manage dependency updates. The project's code formatting was defined in .scalafmt.conf (version 3.4.3). A CHANGELOG.md was added to track project changes, and an Apache 2.0 LICENSE file was included. Additionally, a test.sh script was added to facilitate local testing with the Google Cloud Datastore emulator, and a .gitignore file was configured to exclude build artifacts and IDE files.

(repo-wide) · high confidence

New stream sources for reading persistence data

Added four new Akka Stream GraphStage sources in the Datastore read journal: PersistenceIdsSource and CurrentPersistenceIdsSource for listing persistence IDs, plus PersistenceEventsByPersistenceIdSource and PersistenceEventsByTagSource for retrieving event envelopes by persistence ID and tag respectively. These components enable the journal to stream persistence IDs and tagged events from Google Cloud Datastore with configurable refresh intervals.

src/main/scala/akka/persistence/datastore/journal/read/sources · high confidence

Behavioural changes

Introduces shared persistence abstractions for GCP Datastore

Adds DatastoreCommon and DatastorePersistence traits to the Akka Persistence Datastore plugin, defining shared constants (such as journal and snapshot kinds, and field keys like persistenceId, sequenceNr, and timestamp) and base traits for connecting to the Google Cloud Datastore service. This refactoring extracts common configuration and service access logic, enabling the journal and snapshot components to share a consistent interface for Datastore operations.

src/main/scala/akka/persistence/datastore · high confidence

Test coverage

Added test coverage for GCP Datastore persistence components

Added new test suites for the GCP Datastore journal and snapshot store implementations. The DatastoreJournalSpec validates the journal plugin configuration and serialization capabilities, while DatastoreSnapshotSpec covers the snapshot store plugin configuration and serialization support.

src/test · high confidence

Dependencies

Initial release of Akka Persistence GCP Datastore connector

The project introduces a new Akka Persistence plugin for Google Cloud Datastore, enabling event sourcing and CQRS patterns with GCP's managed database. The build configuration defines dependencies on Akka 2.6.17, Scala 2.12.15 and 2.13.7, Play JSON 2.9.2, and Google Cloud Datastore 2.2.9, establishing the foundation for this integration.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 48 → 58 (+10.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 99 (-0.7)
  • Architecture 69 → 66 (-3.3)
  • Maturity 38 → 50 (+12.3)
  • Readiness 50 → 63 (+13.7)
  • Security 50 → 62 (+11.9)

Resolved (10)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • 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 (27)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (19 lines × 4) (src/main/scala/akka/persistence/datastore/journal/read/sources/CurrentPersistenceIdsSource.scala)
  • Duplicated block (24 lines × 4) (src/main/scala/akka/persistence/datastore/journal/read/sources/CurrentPersistenceIdsSource.scala)
  • Duplicated block (37 lines × 2) (src/main/scala/akka/persistence/datastore/journal/read/sources/CurrentPersistenceIdsSource.scala)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 7 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

innFactory/akka-persistence-gcp-datastore 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 c71018729e901ef26eefecbdeacfbe0bbff2d735 — 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.