apache/pekko-persistence-cassandra
55.6
Adequate · 21 September 2026
9k
lines of production code
Scala
primary language
4
measurements over time
What this system is
This system is the Apache Pekko Persistence Cassandra plugin, a library that enables event sourcing and snapshotting for Apache Pekko actors using a Cassandra database. It provides core capabilities for persisting events, managing snapshots, and querying historical data through tag-based streams and persistence ID lookups. The project serves as the direct successor to the Akka Persistence Cassandra plugin, maintaining compatibility with Cassandra and ScyllaDB while adopting the Pekko ecosystem's configuration and API standards.
How it got here
2013–2014 — Apache Pekko migration and repository initialization
6 changes.
The project was rebranded from Akka to Apache Pekko, updating all build dependencies and artifact names to reflect the new framework. Concurrently, the repository was initialized with Apache governance infrastructure, including contribution guidelines and CI configuration. The existing Cassandra journal implementation and its associated tests were removed, shifting the project's focus toward establishing the new Pekko-based foundation.
2017–2026 — Apache Pekko migration and core implementation
16 changes.
This period focused on migrating the Cassandra persistence plugin from Akka to Apache Pekko, including updating core source files, configuration namespaces, and example applications to the new ecosystem. Comprehensive test suites were added to verify journal recovery, tag-based event queries, snapshot storage, and multi-node cluster behavior, alongside specific support for DataStax Enterprise integration.
Features
Add link validation configuration for documentation
A configuration file for the site-link-validator tool has been added to define how documentation links are checked. It maps external documentation URLs (such as Pekko persistence Cassandra docs and ScalaDoc) to local file paths for offline validation, and ignores specific external prefixes like Datastax, GitHub, and Javadoc to prevent false positives from rate limiting or access restrictions.
scripts · high confidence
Apache Pekko Cassandra Persistence plugin core implementation
The core source files for the Apache Pekko Cassandra Persistence plugin have been introduced, providing the foundational components for event sourcing and snapshotting against Cassandra. This includes the \CassandraStatements\ class for managing keyspace and table creation, \EventsByTagMigration\ to handle schema upgrades from older tag storage formats, and \EventsByTagSettings\ for configuring tag-based event queries. The plugin also features \PluginSettings\ for validating keyspace and table names, \Extractors\ for reading and deserializing events from the database, and a \Cleanup\ tool for managing snapshot and event retention. Additionally, configuration for Cassandra compaction strategies (TimeWindow, Leveled, and SizeTiered) and retry logic is now available in this module.
core/src/main/scala · high confidence
Initial Apache Pekko build infrastructure and dependency configuration
The project build system has been established with Apache Pekko as the core framework, replacing the previous Akka foundation. This change introduces the build configuration for Apache Pekko Persistence Cassandra, setting the default Scala version to 2.13.18 with support for Scala 3.3.8 and 3.9.0. It configures the project to depend on Apache Pekko Core 2.0.0-M4, Pekko Connectors Cassandra 2.0.0-M1, and Pekko Management 2.0.0-M1, alongside the Cassandra Java Driver 4.19.3 and Netty 4.2.18.Final. The build also sets up standard Apache 2.0 licensing headers, automated versioning via dynver, and documentation generation using Paradox.
project · high confidence
Repository initialization and governance configuration for Apache Pekko Persistence Cassandra
The repository has been initialized with the Apache Pekko Persistence Cassandra project, establishing the foundational governance and development infrastructure. This includes the addition of the \.asf.yaml\ file to configure GitHub repository settings such as protected branches, required status checks, and community features like discussions. A comprehensive \CONTRIBUTING.md\ guide and \AGENTS.md\/\CLAUDE.md\ files for AI coding agents have been added to define the development workflow, code style requirements (using scalafmt), and licensing rules. The project also introduces a \docker-compose.yml\ to facilitate local testing with Cassandra and ScyllaDB instances, alongside standard Apache artifacts like \LICENSE\, \NOTICE\, and \CHANGELOG.md\. The \README.md\ has been updated to reflect the project's status as a fork of Akka Persistence Cassandra and to direct users to the new Pekko documentation.
(repo-wide) · high confidence
Removals
Removal of Cassandra journal implementation
The Cassandra persistence journal implementation has been removed from the codebase. This change deletes the core journal class, the replay logic trait, the database schema statements, and the utility package object that handled Cassandra-specific conversions, effectively eliminating support for using Cassandra as a persistence store for Akka Persistence.
src/main/scala · high confidence
Behavioural changes
Example application configuration migrated to Apache Pekko
The example application's resource files (common.conf, local.conf, kubernetes.conf, and logback.xml) have been updated to use Apache Pekko instead of Akka. This includes switching actor system providers, persistence journal/snapshot-store plugins, and cluster management settings to their Pekko equivalents, allowing users to run the end-to-end event tagging example against a Cassandra backend using the new Pekko-based stack.
example/src/main/resources · high confidence
Example application migrated to Apache Pekko
The example application in example/src/main/scala has been rewritten to use the Apache Pekko API instead of the previous Akka implementation. This includes updating all actor and persistence imports to the org.apache.pekko namespace, adopting Scala 3 syntax, and adjusting the code to align with Pekko's typed persistence and cluster sharding patterns. Users running this example will now interact with the Pekko-based event sourcing and read-side processing logic.
example/src/main/scala · high confidence
Migration to Pekko configuration namespace
The default configuration file (reference.conf) has been updated to use the 'pekko.persistence.cassandra' namespace instead of the previous 'akka.persistence.cassandra' namespace. This change aligns the plugin with the Pekko ecosystem, requiring users to update their configuration references to point to the new Pekko-based plugin identifiers and settings paths.
core/src/main/resources · high confidence
Removal of default Cassandra journal configuration
The default configuration file for the Cassandra persistence journal (reference.conf) has been removed. Users can no longer rely on the built-in defaults for connection details such as contact points, keyspace, table names, and consistency levels; these settings must now be explicitly provided in the application's own configuration.
src/main/resources · high confidence
Suppress binary compatibility warnings for internal API changes
This update adds exclusion filters for sbt-mima-plugin 1.2.0 to suppress binary compatibility warnings regarding internal, non-public API changes. Specifically, it excludes warnings for \TagWriterSettings\ (which gained a \maxBufferSize\ field) and \TaggedPreparedStatements\ (where return types changed from \Future\ to \RetryableFutureEval\). These changes affect only \@InternalApi\ classes and do not impact the public API.
core/src/main/mima-filters · high confidence
Test coverage
Added DSE-specific test infrastructure and session provider example; Added compile-only documentation tests for Cassandra Reconciliation API; Added comprehensive test suite for Cassandra persistence plugin; Added comprehensive test suite for Cassandra query operations; Added multi-node tests for Cassandra-backed EventsByTag persistence; Added test for Cluster Sharding quick termination behavior; Added test resource configurations for logging and driver metrics; Added tests for Cassandra compaction strategy configuration; Added tests for Cassandra snapshot store metrics, retry logic, and metadata handling; Added tests for RetryableFutureEval behavior; Removal of Cassandra journal integration tests.
Dependencies
Migration from Akka to Apache Pekko
The project has been rebranded and migrated from Akka to Apache Pekko. The build configuration now uses Pekko dependencies (such as pekko-persistence, pekko-stream, and pekko-connectors-cassandra) instead of Akka equivalents, and the artifact name has changed from akka-persistence-cassandra to apache-pekko-persistence-cassandra. This is a foundational dependency update that affects the entire library's runtime and build environment.
(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 67 → 56 (-11.1)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 93 → 89 (-3.9)
- Architecture 100 → 66 (-34.3)
- Maturity 61 → 56 (-4.8)
- Readiness 65 → 77 (+12.3)
- Security 65 → 46 (-19.3)
Resolved (9)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Off-boarding risk: anonymized user #1
- Test reliability not included
- The README mentions Akka Persistence Cassandra but does not link to its own documentation or compare features. (README.md)
- The testing section mentions 'Cassandra Cluster Manager' but does not link to its GitHub repo. (docs/src/main/paradox/testing.md)
- complexity unreadable for .scala — churn × complexity hotspots could not be measured
- knowledge concentrated in recent work — freshness signal contradicted by repo activity
New (58)
- AllPersistenceIdsStage.createLogic (cognitive 28) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/AllPersistenceIdsStage.scala)
- AllPersistenceIdsStage.createLogic (cyclomatic 21) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/AllPersistenceIdsStage.scala)
- CassandraJournal.asyncReadHighestSequenceNr (cognitive 45) (core/src/main/scala/org/apache/pekko/persistence/cassandra/journal/CassandraJournal.scala)
- CassandraJournalStatements.executeCreateKeyspaceAndTables (cognitive 41) (core/src/main/scala/org/apache/pekko/persistence/cassandra/journal/CassandraJournalStatements.scala)
- Documentation: no architecture or design documentation (docs/src/main/paradox/configuration.md)
- Documentation: no installation or build instructions (README.md)
- Duplicated block (10–11 lines × 2) (core/src/main/scala/org/apache/pekko/persistence/cassandra/journal/CassandraJournal.scala)
- Duplicated block (13 lines × 2) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/scaladsl/CassandraReadJournal.scala)
- Duplicated block (25 lines × 2) (core/src/main/scala/org/apache/pekko/persistence/cassandra/journal/CassandraJournal.scala)
- Duplicated block (6 lines × 2) (core/src/main/scala/org/apache/pekko/persistence/cassandra/package.scala)
- EventsByPersistenceIdStage.createLogicAndMaterializedValue (cognitive 107) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/EventsByPersistenceIdStage.scala)
- EventsByPersistenceIdStage.createLogicAndMaterializedValue (cyclomatic 72) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/EventsByPersistenceIdStage.scala)
- EventsByTagStage.createLogic (cognitive 165) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/EventsByTagStage.scala)
- EventsByTagStage.createLogic (cyclomatic 91) (core/src/main/scala/org/apache/pekko/persistence/cassandra/query/EventsByTagStage.scala)
- FixmeComment (example/src/main/scala/org/apache/pekko/persistence/cassandra/example/ReadSide.scala)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- …and 38 more
Changes since last survey
- 23 commits — 22 feature/other, 1 fixes
By area
- core/src — 7 commits
- .github/workflows — 5 commits
- project/Dependencies.scala — 5 commits
- project/build.properties — 2 commits
- project/plugins.sbt — 2 commits
- (root) — 1 commit
- docs/src — 1 commit
Notable commits
- fix: fix issues where snapshot docs refer to journal by accident (#480)
- change: Bump actions/setup-java from 5.6.0 to 5.7.0 (#470)
- change: Bump actions/setup-java from 5.7.0 to 6.0.0 (#490)
- change: Bump actions/setup-java from 6.0.0 to 6.0.1 (#499)
- change: Bump coursier/setup-action from 3.0.0 to 3.0.2 (#475)
- change: Bump coursier/setup-action from 3.0.2 to 3.0.3 (#500)
- change: Terminate the ActorSystems that specs leave running (#495)
- change: Update logback-classic to 1.6.2 (#481)
- change: Update logback-classic to 1.6.3 (#485)
- change: Update netty-handler to 4.2.17.Final (#472)
- change: Update netty-handler to 4.2.18.Final (#497)
- change: Update pekkoVersion to 2.0.0-M4 (#487)
- change: Update sbt, scripted-plugin to 1.12.15 (#474)
- change: Update sbt, scripted-plugin to 1.13.0 (#486)
- change: Update sbt-mima-plugin to 1.2.0 (#496)
- change: Update sbt-paradox, sbt-paradox-theme to 0.11.0 (#473)
- change: Update sbt-site-paradox to 1.8.0 (#482)
- change: Update scala-library to 3.9.0 (#491)
- change: add max-buffer-size for tag writing (#478)
- change: chore: disable additional Scala 3 specific syntax in scalafmt (#439)
- …and 3 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
apache/pekko-persistence-cassandra 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 a181b1ce0c11fd1c416d653b88a4e7172622f8a5 — 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.