Skip to content
CAI
Software that uses CAICheck a score

prooph/event-store-client

72.2

Strong · 22 September 2026

18k

lines of production code

PHP

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a PHP client library for interacting with an Event Store, providing both TCP and HTTP interfaces for event streaming and management. It supports asynchronous operations for core features such as appending to streams, managing persistent and catch-up subscriptions, and executing projections. The library also includes administrative capabilities for managing users and cluster topology, backed by a comprehensive test suite.

Features

Add HTTP API for managing and executing projections

The ProjectionsClient, ProjectionsManager, and QueryManager classes are introduced to expose the Event Store's RESTful API for projections. Users can now create, enable, disable, and abort projections, as well as execute queries and retrieve projection states via the HTTP interface.

src/Projections · high confidence

Add Persistent Subscriptions HTTP client and manager

Introduces new \PersistentSubscriptionsClient\ and \PersistentSubscriptionsManager\ classes to handle HTTP-based persistent subscription operations. The client manages HTTP requests for describing, listing, and replaying persistent subscriptions, while the manager provides a higher-level interface that defaults to the provided user credentials.

src/PersistentSubscriptions · high confidence

Add SystemData types for TCP protocol handling

Added new internal classes and enums in the SystemData namespace to support TCP communication with the event store. This includes the InspectionDecision and TcpCommand enums, along with the TcpPackage and InspectionResult classes, which handle the serialization and deserialization of TCP messages, including authentication headers and command codes.

src/SystemData · high confidence

Add cluster node state and member information DTOs

The library now exposes structured data transfer objects for cluster topology and node status. \VNodeState\ is a new string-backed enum representing the operational state of a node (e.g., \Master\, \Follower\, \CatchingUp\). \MemberInfoDto\ provides detailed information about individual cluster members, including TCP/HTTP endpoints, health status, and internal/external network addresses. \ClusterInfoDto\ aggregates a list of \MemberInfoDto\ instances, enabling clients to inspect the current state and configuration of the entire cluster.

src/Messages/ClusterMessages · high confidence

Add user management capabilities to the Event Store client

The library now includes a new \UsersClient\ and \UsersManager\ in the \src/UserManagement\ directory, enabling users to perform administrative actions on the Event Store. This includes creating, updating, and deleting user accounts, as well as enabling, disabling, and listing users. The \UsersManager\ also supports changing and resetting passwords, providing a complete set of tools for managing user accounts and their credentials within the system.

src/UserManagement · high confidence

Added local 3-node EventStore cluster configuration

Introduced a new local development environment for running a 3-node EventStore cluster using Docker Compose. The setup includes a shared environment file (common-variables.env) and a docker-compose.yml defining three distinct nodes (eventstore1, eventstore2, eventstore3) based on the EventStore image release-5.0.1. Each node is configured with specific internal and external ports, IP addresses, and health checks to facilitate local clustering.

docker/local-3-node-cluster · high confidence

Introduce TCP transport layer with length-prefix framing

Added new TCP transport implementation for the event-store client, introducing \TcpPackageConnection\ to handle network connections (including SSL/TLS) and \LengthPrefixMessageFramer\ to parse incoming data streams using a length-prefix protocol. This change adds the core networking components required for TCP-based communication with the event store.

src/Transport/Tcp · high confidence

New connection and cluster settings builders

The library introduces new builder classes for configuring connection and cluster settings, including \ConnectionSettingsBuilder\, \ClusterSettingsBuilder\, \DnsClusterSettingsBuilder\, and \GossipSeedClusterSettingsBuilder\. These classes provide a fluent API to configure connection parameters such as logging, retry policies, SSL, and cluster discovery via DNS or gossip seeds. The \ConnectionString\ class parses connection strings into \ConnectionSettings\ objects, supporting keys like \usesslconnection\, \maxretries\, and \gossipseeds\. The \EventStoreConnectionFactory\ uses these settings to create \EventStoreConnection\ instances, supporting \tcp\ and \discover\ URI schemes as well as direct endpoint connections.

src · high confidence

Behavioural changes

6 commits (0 fixes) modifying GPBMetadata

A change to existing behaviour in GPBMetadata — 6 commits, 1 file.

GPBMetadata · medium confidence · unverified

HTTP client implementation updated to support TLS peer verification control

The HTTP client now allows users to disable TLS peer verification via a new \verifyPeer\ constructor parameter. When \verifyPeer\ is false, the client configures the underlying Amp HTTP client to skip peer certificate validation, which can be useful for development or internal networks with self-signed certificates.

src/Transport/Http · high confidence

Refactor client operations to use prooph/event-store v8 as core

The \ClientOperations\ directory has been refactored to use \prooph/event-store\ v8 as the core dependency. This introduces new abstract base classes (\AbstractOperation\, \AbstractSubscriptionOperation\) and updates all concrete operation classes (e.g., \AppendToStreamOperation\, \ConnectToPersistentSubscriptionOperation\) to implement the new interfaces and handle responses using the updated \prooph/event-store\ types and messages.

src/ClientOperations · high confidence

Refactored internal connection and subscription handling for Event Store v8 core

The internal \src/Internal\ directory has been completely rewritten to align with the \prooph/event-store\ v8 core interfaces. This introduces new internal classes such as \EventStoreConnectionLogicHandler\, \EventStoreCatchUpSubscription\, and \EventStorePersistentSubscription\ to manage TCP connections, cluster discovery, and event subscriptions. The change replaces previous synchronous implementations with an asynchronous, promise-based architecture using \amphp\, and introduces new exception classes in \src/Exception\ to expose HTTP status codes for command failures.

src/Internal · high confidence

Regenerated client message classes using Google Protobuf

The client message classes in src/Messages/ClientMessages have been regenerated using the Google Protobuf library (google/protobuf) instead of the previous implementation. This change updates the underlying protobuf code generation, which may affect how message serialization and deserialization are handled internally.

src/Messages/ClientMessages · medium confidence

Updated example scripts to use prooph/event-store v8 interfaces

The example scripts in the \examples/\ directory have been updated to use the \prooph/event-store\ v8 interfaces and classes, such as \EventStoreCatchUpSubscription\ and \CatchUpSubscriptionSettings\, replacing the previous synchronous implementations. This change reflects the core library's upgrade to v8, requiring users to adopt the new async interfaces and closure-based callbacks in their own code.

examples · medium confidence

Updated test configuration and added protobuf message definitions

The PHPUnit configuration was updated to use the XML schema for version 9.5, added environment variables for EventStore connection details (host, port, credentials), and excluded the generated ClientMessages directory from coverage reports. A new ClientMessageDtos.proto file was added to define the protobuf message structures for client-server communication. Additionally, the PHP-CS-Fixer configuration was updated to exclude the ClientMessages directory from style checks, and the copyright headers were updated to reflect the year 2024.

(repo-wide) · high confidence

Test coverage

Added system tests for the TcpPackage class; Added test helper utilities for event store testing; Added test infrastructure and test cases for the EventStore client; Added tests for PersistentSubscriptionsManager; Added tests for user management operations; Expanded test coverage for event store security and access control.

Dependencies

Initial release of prooph/event-store-client with modern async dependencies

The project introduces a new composer.json defining the 'prooph/event-store-client' library, establishing its core dependencies on PHP 8.1/8.2 and the amphp ecosystem (amp, byte-stream, http, http-client, socket). It also integrates google/protobuf, prooph/event-store (dev-master), and psr/log, while setting up development tools like phpunit, php-cs-fixer, and php-coveralls for testing and code quality.

(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 → 72 (+5.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 90 → 94 (+3.4)
  • Architecture 100 → 99 (-0.5)
  • Maturity 61 → 61 (+0.0)
  • Readiness 61 → 72 (+11.1)
  • Security 75 → 91 (+15.9)

Resolved (34)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (src/ClientOperations/AppendToStreamOperation.php)
  • Duplicated block (10 lines × 2) (src/ClientOperations/AppendToStreamOperation.php)
  • Duplicated block (10 lines × 2) (src/ClientOperations/ReadAllEventsBackwardOperation.php)
  • Duplicated block (10 lines × 2) (src/Internal/OperationsManager.php)
  • Duplicated block (11 lines × 2) (src/ClientOperations/DeleteStreamOperation.php)
  • Duplicated block (11 lines × 2) (src/Projections/ProjectionsClient.php)
  • Duplicated block (12 lines × 2) (src/ClientOperations/ReadAllEventsBackwardOperation.php)
  • Duplicated block (12 lines × 2) (src/ClientOperations/ReadStreamEventsBackwardOperation.php)
  • Duplicated block (12 lines × 2) (src/ClientOperations/ReadStreamEventsBackwardOperation.php)
  • Duplicated block (12 lines × 2) (src/Internal/EventStoreCatchUpSubscription.php)
  • Duplicated block (12 lines × 2) (src/Projections/ProjectionsClient.php)
  • Duplicated block (13 lines × 2) (src/Internal/EventStoreCatchUpSubscription.php)
  • Duplicated block (14 lines × 2) (src/Internal/EventStoreConnectionLogicHandler.php)
  • Duplicated block (15 lines × 2) (src/UserManagement/UsersManager.php)
  • Duplicated block (15 lines × 4) (src/Projections/ProjectionsClient.php)
  • Duplicated block (15 lines × 4) (src/UserManagement/UsersClient.php)
  • Duplicated block (16 lines × 2) (src/ClientOperations/AbstractOperation.php)
  • Duplicated block (16 lines × 3) (src/PersistentSubscriptions/PersistentSubscriptionsClient.php)
  • …and 14 more

New (59)

  • ClassTooLong: EventStoreConnectionLogicHandler (src/Internal/EventStoreConnectionLogicHandler.php)
  • ClassTooLong: EventStoreNodeConnection (src/Internal/EventStoreNodeConnection.php)
  • ClassTooLong: ProjectionsClient (src/Projections/ProjectionsClient.php)
  • Dependency hygiene PARTLY measured — Composer dependencies read, no committed lock to grade for currency
  • Documentation: no contributor guidance (README.md)
  • Duplicated block (11 lines × 2) (src/Internal/OperationsManager.php)
  • Duplicated block (11 lines × 2) (src/Internal/OperationsManager.php)
  • Duplicated block (11 lines × 2) (src/Projections/ProjectionsClient.php)
  • Duplicated block (11 lines × 2) (src/Projections/ProjectionsClient.php)
  • Duplicated block (11 lines × 4) (src/ClientOperations/AppendToStreamOperation.php)
  • Duplicated block (11 lines × 5) (src/Projections/ProjectionsClient.php)
  • Duplicated block (12 lines × 2) (src/ClientOperations/AppendToStreamOperation.php)
  • Duplicated block (12–13 lines × 2) (src/Internal/EventStoreCatchUpSubscription.php)
  • Duplicated block (13 lines × 2) (src/UserManagement/UsersManager.php)
  • Duplicated block (14 lines × 2) (src/ClientOperations/ReadAllEventsBackwardOperation.php)
  • Duplicated block (14 lines × 2) (src/ClientOperations/ReadStreamEventsBackwardOperation.php)
  • Duplicated block (14 lines × 2) (src/Internal/EventStoreCatchUpSubscription.php)
  • Duplicated block (14 lines × 3) (src/ClientOperations/AppendToStreamOperation.php)
  • Duplicated block (15 lines × 2) (src/Internal/EventStoreNodeConnection.php)
  • Duplicated block (16 lines × 2) (src/ClientOperations/ReadAllEventsBackwardOperation.php)
  • …and 39 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

prooph/event-store-client 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 22 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 a4cef3ac413a9702c1114d03117f5f7b890d55b7 — 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-821afab8930d.