RailsEventStore/rails_event_store
49.1
Weak · 22 September 2026
10.5k
lines of production code
Ruby
with JavaScript
6
measurements over time
What this system is
This system is a comprehensive event sourcing framework for Ruby, centered around the RubyEventStore and RailsEventStore libraries. It provides core infrastructure for persisting and querying domain events, including an AggregateRoot implementation for managing entity state and a flexible mapper pipeline for serialization and encryption. The ecosystem extends these capabilities through various integrations, such as transactional outbox patterns, process managers, and adapters for ActiveRecord, Sequel, and ROM, alongside tools for testing, profiling, and external API access via MCP.
How it got here
2015–2020 — v3.1.0 monorepo release and architecture overhaul
57 changes.
This period centered on the v3.1.0 release, which restructured the codebase into a monorepo and introduced a new Client API with ActiveJob-based asynchronous dispatching. The work involved extracting storage implementations into separate gems, adding a composable mapper pipeline for encryption and upcasting, and releasing new components like AggregateRoot, Outbox, and RSpec matchers. Additionally, the project modernized its tooling with a unified Makefile, mutation testing, and migrated the browser UI and documentation to modern stacks.
2021–2022 — contrib gem expansion and ActiveRecord modernization
36 changes.
This period focused on expanding the RubyEventStore ecosystem by releasing new integration gems for profiling, Sidekiq scheduling, feature flags, and ROM, alongside a dedicated client for remote event stores. Simultaneously, the core ActiveRecord adapter underwent significant modernization to support Rails 8.0, introducing batched reads, refined migration generators for multiple database backends, and improved JSON serialization handling.
2023–2026 — Sequel adapter and MCP integration
43 changes.
This period focused on expanding the Ruby Event Store ecosystem by introducing a Sequel-based repository for non-ActiveRecord applications and a Model Context Protocol (MCP) server for external AI tooling. Concurrently, the project modernized its infrastructure by migrating the browser UI to server-side rendering and implementing programmatic CI workflows, while releasing new Process Manager and CLI tools.
Features
Add Asciinema widget component
Introduces a new AsciinemaWidget component that dynamically loads the Asciinema player script in the browser to embed terminal recordings. The component handles script injection and cleanup via React hooks and ensures server-side rendering safety by deferring execution to the client side.
railseventstore.org/src/components · high confidence
Add Billetto case study and JobValley logo to customer showcase
The website now features a detailed case study for Billetto, highlighting their use of RailsEventStore for asynchronous processing, audit logging, and third-party integrations, including specific production statistics. Additionally, the JobValley logo has been added to the list of companies using RailsEventStore.
railseventstore.org/source · high confidence
Add InfluxDB metrics support for the outbox
The outbox now supports sending operational metrics to InfluxDB. A new InfluxDB metrics adapter has been added to track lock operation results (success/failure) and queue statistics, including the number of enqueued, failed, and remaining records. A null adapter is also provided for environments where metrics collection is not desired, and a test adapter is included to facilitate unit testing of metric emission.
_contrib/ruby\_event\_store-outbox/lib/ruby\_event\store/outbox/metrics · high confidence
Add Process Manager browser extension for state inspection
The \ruby\_event\_store-process\_manager\ gem now includes a browser extension that provides a web interface for inspecting process manager state. This adds a new GET route at \/process\_managers/:stream\_name\ which replays events for a specific process stream and renders a view showing the current state and a step-by-step history of events and resulting states. The extension also registers a CSS asset for styling the interface and provides a helper to add a 'Process state' link to stream listings.
_contrib/ruby\_event\_store-process\_manager/lib/ruby\_event\_store/process\manager · high confidence
Add Tailwind CSS plugin and YouTube ID helper
This change introduces a new Tailwind CSS PostCSS plugin configuration to manage styling dependencies and adds a utility function to extract YouTube video IDs from URLs, supporting embedded video content in the application.
railseventstore.org/plugins, railseventstore.org/src/helpers · high confidence
Add demo script for Ruby Event Store Profiler
A new executable demo script has been added to the examples directory to demonstrate how to use the Ruby Event Store Profiler. The script sets up an instrumented event store client and repository using ActiveSupport::Notifications, defines a sample aggregate root, and runs a measurement loop to profile event handling performance.
_contrib/ruby\_event\store-profiler/examples · high confidence
Add development server with sample data and restrictive CSP
The \ruby\_event\_store-browser/devserver\ now includes a functional Sinatra-based development server (\config.ru\) that initializes a Ruby Event Store client with correlation and causation linking, seeds it with sample events (including edge cases like \Float::INFINITY\), and mounts the browser application under a configurable path. The server enforces a restrictive Content Security Policy (CSP) via a wrapper app to ensure safe local development.
_ruby\_event\store-browser/devserver · high confidence
Add res-mcp CLI entry point for Ruby Event Store MCP integration
A new executable script, bin/res-mcp, has been added to the contrib/ruby\_event\_store-mcp directory. This script serves as the command-line entry point for the Ruby Event Store MCP (Model Context Protocol) server. It automatically loads the Rails application environment and locates the configured event store instance (expected at Rails.configuration.event\_store) to initialize and start the MCP server. Users can now run this binary from the root of a Rails application to expose event store capabilities via the MCP protocol.
_contrib/ruby\_event\store-mcp/bin · high confidence
Added Nix shells for temporary database and cache services
Developers can now use Nix shells in the support/nix directory to run temporary, isolated instances of MySQL (8.0 and 8.4), PostgreSQL (13–17), and Redis. These shells automatically initialize the database, set the appropriate environment variables (DATABASE\_URL, REDIS\_URL), and clean up the temporary files and processes when the shell exits, simplifying local development setup.
support/nix · high confidence
Added PostgreSQL migration template for Ruby Event Store Sequel adapter
A new Sequel migration file has been added to generate the required PostgreSQL tables for the Ruby Event Store. This migration creates the \event\_store\_events\ and \event\_store\_events\_in\_streams\ tables, defining specific column types such as \Bignum\ for primary keys and \TIMESTAMP\ for time fields. It also introduces a configurable \DATA\_TYPE\ environment variable (defaulting to \text\, supporting \json\ or \jsonb\) to control the storage format of event metadata and data, and includes necessary indexes for stream/position and event\_id lookups.
_contrib/ruby\_event\_store-sequel/lib/ruby\_event\store/generators/templates/postgres · high confidence
Added ROM SQL migration for Ruby Event Store tables
A new database migration has been added to create the \event\_store\_events\ and \event\_store\_events\_in\_streams\ tables using the ROM SQL adapter. The schema supports PostgreSQL (using UUIDs and JSON/JSONB) and other databases (using String/Text), with configurable data types via the \DATA\_TYPE\ environment variable.
_contrib/ruby\_event\store-rom/db · high confidence
Added Sequel migration template for Event Store tables
A new migration template has been added to generate the \event\_store\_events\ and \event\_store\_events\_in\_streams\ tables for Sequel-based integrations. The schema defines primary keys using Bignum, stores event data and metadata as text, and includes specific indexes for stream/position, stream/event\_id, event\_id, created\_at, and valid\_at. The \valid\_at\ column is defined as nullable, and the template supports configuring the data type for text columns via the \DATA\_TYPE\ environment variable.
_contrib/ruby\_event\_store-sequel/lib/ruby\_event\_store/generators/templates, contrib/ruby\_event\_store-sequel/lib/ruby\_event\store/generators/templates/mysql · high confidence
Added binstubs for Mutant and RSpec
The contrib/ruby\_event\_store-protobuf/bin directory now includes executable binstubs for the Mutant mutation testing framework and RSpec. These files allow developers to run these tools directly from the repository's bin directory, ensuring consistent execution environments and simplifying the workflow for running tests and mutation checks within this specific protobuf integration component.
_contrib/ruby\_event\store-protobuf/bin · high confidence
Added convenience binstubs for CLI, RSpec, and Mutant
The outbox component now includes executable binstubs in the \bin\ directory to simplify running development and runtime tools. The \res\_outbox\ script provides a direct entry point to the \RubyEventStore::Outbox::CLI\, allowing users to run the outbox command-line interface easily. Additionally, \rspec\ and \mutant\ binstubs are added to facilitate running the test suite and mutation testing without needing to invoke them via \bundle exec\.
_contrib/ruby\_event\store-outbox/bin · high confidence
Added convenience binstubs for Rails, RSpec, and Mutant
The contrib/dres\_rails/bin directory now includes executable binstubs for the 'rails', 'rspec', and 'mutant' commands, along with a 'setup' script. These additions allow developers to run these tools directly from the repository root without needing to invoke them via bundle exec, streamlining the development and testing workflow for the DRES Rails engine.
_contrib/dres\rails/bin · high confidence
AggregateRoot v3.1.0: New Apply Strategies and Instrumented Repository
This release introduces a new \DefaultApplyStrategy\ that handles event application with configurable strictness (raising on missing handlers or ignoring them), replacing the previous inline logic. It also adds an \InstrumentedApplyStrategy\ and \InstrumentedRepository\ to wrap core operations with instrumentation events (e.g., \apply.aggregate\_root\, \load.repository.aggregate\_root\), enabling better observability and logging. The \SnapshotRepository\ remains but is now part of a broader architecture that supports these new strategies and instrumentation hooks. The library version is bumped to 3.1.0.
_aggregate\_root/lib/aggregate\root · high confidence
Initial release of AggregateRoot gem v3.1.0
This change introduces the AggregateRoot gem, an event-sourced aggregate root implementation for RubyEventStore. The initial release (v3.1.0) includes the core library structure, configuration for mutation testing via Mutant, and specific Gemfiles for testing against Rails 7.2. It establishes the foundational build and test infrastructure for this component within the RubyEventStore ecosystem.
_aggregate\root · high confidence
Initial release of Ruby Event Store MCP server
This change introduces the \ruby\_event\_store-mcp\ gem (version 0.1.0), providing a Model Context Protocol (MCP) server implementation for Ruby Event Store. The server handles JSON-RPC communication over stdio, supporting the MCP protocol version 2024-11-05, and includes a \ReadEvents\ tool that allows querying events by type, time range, and limit. This enables external applications to interact with Ruby Event Store instances via the standard MCP interface.
_contrib/ruby\_event\_store-mcp/lib/ruby\_event\store/mcp · high confidence
Initial release of Ruby Event Store Sidekiq Scheduler
Introduces the \ruby\_event\_store-sidekiq\_scheduler\ gem, allowing users to schedule Ruby Event Store handlers via Sidekiq. The library supports Sidekiq 7 and 8, integrates with Ruby Event Store 3.x (including the renamed \AfterCommitDispatcher\), and uses \RubyEventStore::Serializers::YAML\ as the default serializer to ensure compatibility with Ruby 3.1+ Psych changes.
_contrib/ruby\_event\_store-sidekiq\scheduler · high confidence
Initial release of RubyEventStore::Profiler
Introduces the RubyEventStore::Profiler, a new tool that hooks into RubyEventStore's instrumentation infrastructure to measure and profile event store operations. The profiler is compatible with RubyEventStore 3.x (relaxing the dependency bound to \< 4.0) and captures the renamed \\*.ruby\_event\_store\ instrumentation events. It includes a README with usage examples demonstrating how to integrate the profiler with a RubyEventStore client and AggregateRoot.
_contrib/ruby\_event\store-profiler · high confidence
Initial release of RubyEventStore::RSpec gem
This change introduces the RubyEventStore::RSpec gem (version 3.1.0), providing RSpec matchers for testing RubyEventStore integrations. The diff establishes the gem's foundational structure, including configuration for the Mutant mutation testing tool (\.mutant.yml\), a Makefile for build and test automation, and a Gemfile targeting Rails 7.2 with pinned dependencies like \zeitwerk\ and \diff-lcs\. The README confirms the gem's purpose as a set of RSpec matchers for the event store.
_ruby\_event\store-rspec · high confidence
Initial release of Sequel adapter for Ruby Event Store
This change introduces the \ruby\_event\_store-sequel\ gem (v0.2.1), providing a new \EventRepository\ implementation that allows Ruby Event Store to persist events to any relational database supported by Sequel (PostgreSQL, MySQL, SQLite). The adapter supports standard operations such as appending and linking events to streams, reading events with filtering (by ID, type, position, and time), batch reading, and upserts, while including an \IndexViolationDetector\ to handle database-specific unique constraint errors for duplicate event detection.
_contrib/ruby\_event\_store-sequel/lib/ruby\_event\store/sequel · high confidence
Initial release of Sequel-based Event Repository
Introduces \ruby\_event\_store-sequel\, a new SQL-based event repository implementation using the Sequel ORM, serving as an alternative to the ActiveRecord repository for applications that do not use ActiveRecord (such as Hanami). This release includes internal query optimizations for the global stream and \valid\_at\ handling, and relaxes the dependency bound to allow \ruby\_event\_store\ 3.x.
_contrib/ruby\_event\store-sequel · high confidence
Initial release of minitest-ruby\_event\_store assertions
This change introduces the \minitest-ruby\_event\_store\ gem (version 0.1.0), providing a suite of Minitest assertions for testing RubyEventStore integrations. The library adds specific assertions such as \assert\_published\, \assert\_not\_published\, \assert\_published\_once\, \assert\_nothing\_published\, \assert\_dispatched\, and \assert\_not\_dispatched\, along with stream-specific checks like \assert\_event\_in\_stream\. It also includes utilities for verifying exact new events and comparing event equality, allowing users to write cleaner, domain-specific tests for their event sourcing logic.
_contrib/minitest-ruby\_event\store · high confidence
Initial release of the AggregateRoot module
This change introduces the core AggregateRoot library, providing a foundational structure for implementing event-sourced aggregates. It includes the main \AggregateRoot\ module along with supporting components such as \DefaultApplyStrategy\, \Repository\, \InstrumentedRepository\, \InstrumentedApplyStrategy\, and \SnapshotRepository\. The implementation offers a Domain Specific Language (DSL) for declaratively defining event handlers via the \on\ method, manages aggregate state through versioning and unpublished event tracking, and supports serialization via \marshal\_dump\ and \marshal\_load\. Additionally, it allows for customization of the apply strategy and event type resolution through the \with\ method.
_aggregate\root/lib · high confidence
Initial release of the Ruby Event Store Outbox gem
This entry introduces the \ruby\_event\_store-outbox\ gem (v0.2.0), a new component that enables transactional background job enqueuing via an outbox pattern. The gem provides a \SidekiqScheduler\ to write jobs to a database table within the application transaction and a standalone \res\_outbox\ process to consume these records and push them to Sidekiq. Key features include support for non-locking repositories using \SKIP LOCKED\, configurable split keys for queue distribution, and metrics reporting to InfluxDB. The release also includes a Dockerfile for the outbox process, a Makefile for building and pushing images, and test configurations for Rails 7.2, 8.0, and 8.1 with Sidekiq 7 and 8.
_contrib/ruby\_event\_store-outbox, contrib/ruby\_event\store-transformations · high confidence
Introduce ActiveRecord adapter with migration generators
The library now includes a new \ruby\_event\_store/active\_record\ entry point that wires up the ActiveRecord event repository and related components. This change adds a suite of migration generators for managing database schema changes, including creating indexes for \event\_id\, \valid\_at\, and \stream\_id\, as well as adding foreign keys for existing tables. It also introduces logic to handle JSON serialization skipping when Rails is not present, ensuring the adapter functions correctly in both Rails and non-Rails environments.
_ruby\_event\_store-active\_record/lib/ruby\_event\store · high confidence
Introduce DRES client library for fetching events
Added a new Ruby gem (dres\_client) that provides an HTTP client for retrieving events from a Remote Event Store. The library includes an Http class capable of fetching events by ID, draining event streams, and mapping serialized records to domain events using RubyEventStore, along with a Makefile to manage building, testing, and releasing the gem.
_contrib/dres\client · high confidence
Introduce DresRails event queue and API endpoint
This change adds the core components for the DresRails engine, including an ActiveRecord-backed queue system and a REST API to interact with it. The \DresRails::Queue\ model manages event processing with optimistic locking and transactional job tracking, persisting state to new database tables (\dres\_rails\_queues\ and \dres\_rails\_queue\_jobs\). A new \ApplicationController\ exposes an index endpoint that reads events from a \RubyEventStore::ActiveRecord\ repository and returns them as JSON, allowing users to query processed events via an \after\_event\_id\ parameter.
_contrib/dres\rails/app · high confidence
Introduce New Relic integration stub for RubyEventStore
Adds a new \ruby\_event\_store-newrelic\ gem (version 0.1.0) that provides a stubbed integration for New Relic RPM with RubyEventStore. The contribution includes the core library structure, a README, and a complete development/test environment setup using RSpec, Mutant for mutation testing, and support for Rails 7.2.
_contrib/ruby\_event\store-newrelic · high confidence
Introduce ProcessManager framework for event-driven state management
Adds the \ruby\_event\_store-process\_manager\ gem, providing a framework to build process managers that maintain state based on event streams. Users can define process managers using the \with\_state\ DSL to specify state classes, subscribe to specific events via \subscribes\_to\, and automatically handle replaying past events to reconstruct state. The implementation includes built-in retry logic for resilience and registers process managers for stream name parsing, allowing them to be instantiated and configured with an event store and command bus.
_contrib/ruby\_event\_store-process\_manager/lib/ruby\_event\store · high confidence
Introduce RSpec integration for Ruby Event Store
This change adds a new RSpec integration library (\ruby\_event\_store-rspec\) that provides matchers and helpers for testing event-sourced applications. It includes matchers such as \have\_published\, \have\_applied\, and \have\_subscribed\_to\_events\, along with classes for fetching published and unpublished events. The integration allows users to configure a default failure message formatter and includes the matchers into the RSpec configuration by default.
_ruby\_event\_store-rspec/lib/ruby\_event\store · high confidence
Introduce Ruby Event Store Outbox library
The Ruby Event Store Outbox library is now available, providing a structured way to manage database outbox patterns. The library exposes core components including a repository for persisting events, a Sidekiq scheduler for job dispatch, a Tempo module for dynamic batch size control, and various utilities like fetch specifications and cleanup strategies, allowing users to integrate reliable event publishing into their Rails applications.
_contrib/ruby\_event\_store-outbox/lib/ruby\_event\store · high confidence
Introduce RubyEventStore Outbox consumer with Sidekiq integration
This release adds the RubyEventStore Outbox gem (v0.2.0), providing a CLI-driven consumer that reads pending records from a database outbox table and pushes them to Sidekiq queues. The consumer supports configurable batch sizes, split keys, and locking modes (with deadlock/timeout handling), and includes cleanup strategies to remove old enqueued records. It integrates with InfluxDB for metrics and uses a dynamic batch size controller (Tempo) to adjust processing load.
_contrib/ruby\_event\_store-outbox/lib/ruby\_event\store/outbox · high confidence
Introduce RubyEventStore::Flipper integration gem
Adds the \ruby\_event\_store-flipper\ gem (v0.2.1), which bridges the Flipper feature-flag library with RubyEventStore. The integration subscribes to Flipper's \feature\_operation.flipper\ notifications and publishes corresponding domain events (such as \ToggleAdded\, \ToggleEnabledForActor\, \ToggleGloballyDisabled\, etc.) to a configurable event stream. Users can enable the integration via \RubyEventStore::Flipper.enable\, customize the stream name pattern, swap the notification backend (defaulting to \ActiveSupport::Notifications\), and provide custom event classes for specific toggle operations.
_contrib/ruby\_event\store-flipper · high confidence
Introduce RubyEventStore::Transformations namespace
The gem now exposes a \RubyEventStore::Transformations\ module that serves as the entry point for event transformation capabilities. This module loads the \IdentityMap\ and \WithIndifferentAccess\ transformations, making them available for use within the RubyEventStore ecosystem.
_contrib/ruby\_event\_store-transformations/lib/ruby\_event\store · high confidence
Introduce ruby\_event\_store-cli for inspecting event stores
The new \ruby\_event\_store-cli\ gem (v0.1.0) provides a \res\ command-line interface for inspecting a RubyEventStore event store without needing a Rails console. It reads the event store from \Rails.configuration.event\_store\ and offers commands to list and filter stream events (\res stream events\), view stream summaries (\res stream show\), display full event details (\res event show\), list an event's streams (\res event streams\), search events by type or time (\res search\), trace causation trees by correlation ID (\res trace\), view system statistics (\res stats\), and watch new events live grouped by namespace (\res watch\).
_contrib/ruby\_event\store-cli · high confidence
New MCP tools for inspecting event store data and traces
This change introduces a suite of new tools for the Ruby Event Store MCP integration, enabling users to query and visualize event data directly. The new tools include \aggregate\_history\ to view the full event history of a specific aggregate instance, \event\_show\ for detailed event inspection (including data and metadata), and \event\_streams\ to list which streams an event belongs to. Users can now browse recent events with \recent\, perform flexible searches across streams with \search\, and view stream statistics and bounds via \stats\ and \stream\_show\. Additionally, \stream\_events\ allows listing events within a specific stream with filters, while the new \trace\ tool visualizes the causation tree for events sharing a correlation ID.
_contrib/ruby\_event\_store-mcp/lib/ruby\_event\store/mcp/tools · high confidence
New Makefile targets for testing, mutation, and gem management
The project introduces a set of new Makefile targets in the support/make directory to streamline development workflows. Users can now run unit tests with \test\ or \test-fast\, execute mutation tests via \mutate\, \mutate-fast\, and \mutate-changes\ (which supports incremental runs against a specific SHA), and manage dependencies using \install\, \install-all\, and \update-all\. Additionally, \build\ and \push\ targets are provided for packaging and publishing the gem, while a \help\ target displays available commands.
support/make · high confidence
New Ruby Event Store Profiler for measuring event handling performance
A new Profiler class has been added to the Ruby Event Store library, allowing users to measure and visualize the performance of event handling. The profiler instruments specific event types (such as those matching 'ruby\_event\_store' or 'aggregate\_root') and a 'total' metric, then outputs a formatted table showing the duration in milliseconds and percentage contribution for each metric when the \measure\ block is executed.
_contrib/ruby\_event\_store-profiler/lib/ruby\_event\store · high confidence
New advanced documentation for v2.19.0
The v2.19.0 documentation site now includes a comprehensive set of new advanced topic guides. These cover bi-temporal event sourcing, command bus patterns, custom repositories (including in-memory and linearized variants), event serialization formats (YAML, Marshal, JSON/JSONB), GDPR considerations with encryption mappers, instrumentation hooks, mapper pipelines, handler mapping, event migration strategies, and the transactional outbox pattern. Additional guides explain using Protobuf for binary serialization, transaction handling, and setting up Ruby Event Store without Rails using ActiveRecord or ROM/Sequel.
_railseventstore.org/versioned\docs/version-2.19.0 · high confidence
New advanced documentation topics for version 2.19.3
The documentation site for version 2.19.3 now includes new advanced topic guides covering bi-temporal event sourcing, command bus usage, custom repositories, event serialization formats, GDPR considerations (including encryption mappers), instrumentation hooks, mappers, handler mapping, event migration, transactional outbox, Protobuf integration, and non-Rails setups.
_railseventstore.org/versioned\docs/version-2.19.3 · high confidence
New case study and community pages added to the website
The website now includes a new Billetto case study page detailing their production use of Rails Event Store, including statistics and benefits. Additionally, new Community and Contributing pages have been added to provide resources for users, including links to GitHub Discussions, Discord, and a guide on how to contribute to the project. The homepage has been updated to feature a video promo for RES Camp 2026.
railseventstore.org/src/pages · high confidence
New documentation for advanced Event Sourcing topics
The documentation site now includes a comprehensive set of new guides under the 'advanced-topics' and 'common-usage-patterns' sections. These pages cover specific implementation patterns and configurations, including bi-temporal event sourcing, command bus usage, custom repositories, event serialization formats (such as JSON/B and Protobuf), GDPR compliance strategies like encryption, instrumentation hooks, mapper pipelines, and transaction handling. Additionally, new guides explain how to use Ruby Event Store without Rails, publish unique events for idempotency, and map handlers to events.
_railseventstore.org/versioned\docs/version-2.18.0 · high confidence
New event transformation utilities for identity mapping and indifferent access
This release introduces two new transformation classes for Ruby Event Store events. The \IdentityMap\ transformation ensures that loaded events are returned as the same object instance if they share the same event ID, supporting identity management during event loading. The \WithIndifferentAccess\ transformation converts metadata and data hashes to use indifferent access (allowing both string and symbol keys), leveraging ActiveSupport to simplify hash key handling for users.
_contrib/ruby\_event\_store-transformations/lib/ruby\_event\store/transformations · high confidence
New generators for bounded contexts and browser views
Added new Rails generators to streamline project setup: the \bounded\_context\ generator scaffolds a new domain context with its library structure and eager-loading configuration; the \browser\_views\ generator copies default view templates for the Ruby Event Store Browser into \app/views/ruby\_event\_store\_browser\, allowing users to customize the UI while retaining gem defaults for missing files; and the \rspec\ and \test\_unit\ generators create the necessary spec/test helpers and auto-require statements so that tests within the new bounded context are automatically loaded by the main test suite.
_rails\_event\store/lib/generators · high confidence
New homepage sections for company logos and feature highlights
The homepage now includes two new sections: a 'Companies' section displaying a grid of logos for users like Billetto, ZenCargo, and Elucid, and a 'Features' section highlighting key capabilities of Rails Event Store such as event sourcing and decoupling. These components are now rendered as dedicated React components within the site structure.
railseventstore.org/src/components/HomepageCompanies · high confidence
New mapper pipeline architecture with encryption and instrumentation
The mappers subsystem has been restructured around a composable \Pipeline\ of transformations, introducing new classes like \PipelineMapper\, \BatchMapper\, and \InstrumentedMapper\ to handle event-to-record conversion. This update adds built-in support for event encryption via \EncryptionMapper\ and \EncryptionKey\, which defaults to authenticated AES-256-GCM mode, and introduces \RubyEventStore::Serializers::YAML\ as the default serializer. Users benefit from automatic symbolization of metadata keys, standardized instrumentation events for monitoring mapper performance, and a more flexible, modular approach to customizing event serialization and transformation logic.
_ruby\_event\_store/lib/ruby\_event\store/mappers · high confidence
New rake tasks to generate database migrations
The library now provides specific rake tasks to generate migration files for common database schema adjustments. Users can run \db:migrations:copy\ to copy existing migrations, \db:migrations:fix\_missing\_event\_id\_index\ to add missing event ID indexes, \db:migrations:add\_valid\_at\_index\ to add valid\_at indexes, \db:migrations:add\_foreign\_key\_on\_event\_id\ to add foreign key constraints, and \db:migrations:add\_stream\_id\_index\ to add stream ID indexes. These tasks automate the creation of migration files tailored to the current database adapter and configuration.
_ruby\_event\_store-active\_record/lib/ruby\_event\_store/active\record/tasks · high confidence
New v3.0.0 documentation for advanced event sourcing patterns
The v3.0.0 documentation site now includes comprehensive guides for advanced topics, covering bi-temporal event sourcing, command bus implementation, custom repositories (including in-memory and PostgreSQL linearized variants), event serialization formats (YAML, Marshal, JSON/JSONB), GDPR compliance with encryption mappers, instrumentation hooks, mapper pipelines, handler mapping, event migration, transactional outbox integration, Protobuf support, and usage without Rails.
_railseventstore.org/versioned\docs/version-3.0.0 · high confidence
Rails Event Store version 2.17.0 documentation release
This update introduces the documentation for version 2.17.0 of Rails Event Store. The new docs cover advanced topics including bi-temporal event sourcing, command bus patterns, custom repositories, and various event serialization formats (YAML, Marshal, JSON/JSONB). It also details GDPR compliance features such as the EncryptionMapper and cryptographic erasure, alongside comprehensive instrumentation hooks for monitoring repository and dispatcher activities. Additional guides address using the event store with Protobuf, managing transactions, configuring non-Rails environments (ActiveRecord, ROM/Sequel), and implementing unique event publishing patterns.
_railseventstore.org/versioned\docs/version-2.17.0 · high confidence
Ruby Event Store MCP integration exposes event querying tools
The Ruby Event Store library now includes a Model Context Protocol (MCP) integration that allows external applications to interact with event data through a standardized interface. This change introduces a main entry point (\RubyEventStore::MCP.server\) that registers a suite of tools for event operations, including viewing stream details (\StreamShow\), listing events (\StreamEvents\), inspecting specific events (\EventShow\), searching events (\Search\), retrieving statistics (\Stats\), tracing event flows (\Trace\), aggregating history (\AggregateHistory\), and fetching recent events (\Recent\). Users can now leverage these tools to query and analyze event store data via MCP-compatible clients.
_contrib/ruby\_event\_store-mcp/lib/ruby\_event\store · high confidence
Swimlane view for comparing multiple event streams
The browser now includes a swimlane view that allows users to compare events across multiple streams side-by-side in a table. The interface displays events aligned by time (either creation or validity), highlights events present in specific streams, and provides controls to add or remove streams from the comparison. It also explicitly notifies users if a requested stream does not exist, rather than showing an empty column.
_ruby\_event\_store-browser/lib/ruby\_event\store/browser/views/swimlane · high confidence
Removals
Removal of DeleteStream action class
The \DeleteStream\ action class, previously located in \rails\_event\_store/lib/rails\_event\_store/actions/delete\_stream.rb\, has been removed. This class provided a dedicated interface for deleting event streams by validating the stream name and delegating the deletion to the repository. Users relying on this specific action class for stream deletion will need to adjust their code, likely by calling the repository's delete method directly or using an alternative provided mechanism.
_rails\_event\_store/lib/rails\_event\store/actions · high confidence
Behavioural changes
ActiveRecord adapter upgraded to v3.1.0 with batched reads and double-serialization handling
The \ruby\_event\_store-active\_record\ adapter has been updated to version 3.1.0, introducing a new \BatchEnumerator\ for efficient batched reading of events and a configurable mechanism to detect and unwrap double JSON serialization in \data\ and \metadata\ columns. The adapter now uses Arel for query construction, supports custom model factories via \WithAbstractBaseClass\, and includes a \PgLinearizedEventRepository\ for PostgreSQL-specific transaction locking. Additionally, the \SkipJsonSerialization\ module ensures compatibility with ActiveRecord 7.2+ by hooking into attribute type casting, while the \IndexViolationDetector\ provides database-agnostic error parsing for PostgreSQL, MySQL, and SQLite.
_ruby\_event\_store-active\_record/lib/ruby\_event\_store/active\record · high confidence
Added binstubs for Mutant and RSpec across all components
Bundler-generated binstubs for the \mutant\ and \rspec\ tools have been added to the \bin/\ directory of every project in the repository, including the main \aggregate\_root\, \rails\_event\_store\, \ruby\_event\_store\, and all \contrib\ modules. This allows developers to run these tools directly via \./bin/mutant\ and \./bin/rspec\ from any component directory, ensuring consistent execution environments and simplifying local development workflows.
(repo-wide) · high confidence
Added robots.txt to control search indexing
A robots.txt file has been added to the static site root to manage how search engines crawl the site. Specifically, it disallows indexing of the /search/ path and points to the sitemap at https://railseventstore.org/sitemap.xml. Additionally, a .nojekyll file was created to prevent Jekyll processing of the static assets.
railseventstore.org/static · high confidence
Browser UI migrated to server-side ERB with Tailwind CSS and Stimulus
The Ruby Event Store browser interface has been rebuilt from a client-side Elm SPA to a server-side rendered application using ERB templates, Tailwind CSS for styling, and Stimulus for interactivity. This change introduces a new visual design with improved swimlane UX, including a toggleable drawer that hides when empty, and adds extension points allowing browser extensions to inject custom navigation links, stylesheets, and scripts into the layout. The UI now features a global search command (⌘K/Ctrl+K), timezone-aware timestamp display, and proper HTML escaping for JSON trees and stream names to ensure security and correctness.
_ruby\_event\_store-browser/lib/ruby\_event\store/browser/views · high confidence
Browser UI rebuilt with Tailwind CSS and Stimulus
The browser interface has been replaced with a modern stack using Tailwind CSS for styling and Stimulus (v3.2.2) for interactivity. This change introduces a new \ruby\_event\_store\_browser.css\ bundle and a \ruby\_event\_store\_browser.js\ file that manages client-side features like the swimlane drawer, timezone handling, and stream search. The UI now includes a dedicated swimlane view for comparing streams, improved navigation, and better handling of empty states, providing a more responsive and visually consistent experience for users browsing event data.
_ruby\_event\store-browser/public · high confidence
CI workflows are now generated programmatically via a Ruby script
The continuous integration setup has shifted from static YAML definitions to a generated approach using a new \support/ci/generate\ script. This script uses the \szczupac\ library to dynamically produce GitHub Actions workflows, allowing for a more maintainable and DRY configuration of test matrices across various gems (such as \rails\_event\_store\, \ruby\_event\_store-active\_record\, and contrib gems). The generated workflows cover testing against multiple Ruby versions (including 3.3, 3.4, and 4.0), database combinations (PostgreSQL, MySQL, SQLite), and Rails versions, ensuring consistent CI coverage while reducing manual maintenance of workflow files.
support/ci · high confidence
Documentation site migrated to Docusaurus with Tailwind CSS and versioned docs
The railseventstore.org documentation site has been rebuilt using Docusaurus, replacing the previous static site generator. This change introduces a new build system managed via Makefile (install, build, serve, dev, release targets) and uses npm instead of yarn. The UI styling now relies on Tailwind CSS with the typography plugin, enabling consistent markdown rendering and dark mode support. Documentation is now versioned, with a \versions.json\ file and a release script that automatically manages versioned documentation directories and sidebar configurations. The navigation structure is defined in \sidebars.json\, and the site includes Algolia search integration and Plausible analytics.
railseventstore.org · high confidence
Documentation update for v2.19.1 with new advanced topics and sync handler examples
The v2.19.1 documentation release introduces several new advanced topic guides, including Bi-Temporal EventSourcing, Command Bus usage, Custom Repositories, Event Serialization Formats, GDPR considerations (with EncryptionMapper), Instrumentation hooks, Mappers, Migrating Existing Events, the Transactional Outbox pattern, Protobuf integration, and usage without Rails. Additionally, the Command Bus and Protobuf examples have been updated to use callable lambdas (procs) instead of class-based handlers for better flexibility and development-mode compatibility.
_railseventstore.org/versioned\_docs/version-2.19.1, railseventstore.org/versioned\docs/version-2.19.2 · high confidence
Dres Rails engine and generators restructured
The Dres Rails library has been reorganized into a standard Rails engine structure. The main entry point now explicitly requires the engine and identity modules, which define the library version as 0.6.0. The engine itself is isolated under the DresRails namespace. Additionally, new Rails generators have been added to facilitate installation and upgrades of Dres Rails resources, including \dres\_rails:install\ and \dres\_rails:upgrade\, along with a placeholder rake task.
_contrib/dres\rails/lib · high confidence
Event Browser rewritten with server-side ERB and Stimulus
The Ruby Event Store Browser has replaced its previous Elm-based single-page application with a server-side rendered interface using ERB templates and Stimulus JavaScript controllers. This change simplifies the frontend architecture, improves compatibility with Content Security Policy (CSP) by removing inline script requirements, and introduces new features such as a clipboard copy button for event IDs, a swimlane view for comparing multiple streams, and a debug page. The browser now supports extension points for custom navigation links, stylesheets, and scripts, and allows users to override default views via the \views\_root\ option.
_ruby\_event\_store-browser/lib/ruby\_event\store/browser · high confidence
Explicit precision in outbox migration templates
The outbox generator templates now explicitly specify a precision of 6 for datetime columns (created\_at, enqueued\_at, locked\_at) in the generated ActiveRecord migrations. This ensures consistent timestamp resolution across different database backends and Rails versions, preventing potential precision loss or ambiguity in time-based indexing and locking logic.
_contrib/ruby\_event\_store-outbox/lib/generators/ruby\_event\store/outbox/templates · high confidence
Migrate browser UI to Tailwind CSS and Stimulus
The browser's frontend has been replaced with a server-side ERB and Stimulus architecture, removing the previous Elm-based single-page application. Users will now see the event browser styled with Tailwind CSS and powered by the Hotwired Stimulus library, which is vendored and built via the Makefile. This change simplifies the development stack by using \tailwindcss-ruby\ for CSS generation and standard Rack for serving assets, ensuring the UI is consistent and easier to maintain.
_ruby\_event\store-browser · high confidence
MySQL schema generation now includes functional indexes and explicit foreign keys
The MySQL-specific migration templates have been updated to support functional indexes and stricter referential integrity. The \CreateEventStoreEvents\ template now defines a functional index on \COALESCE(valid\_at, created\_at)\ for the \event\_store\_events\ table and adds an explicit foreign key constraint from \event\_store\_events\_in\_streams\ to \event\_store\_events\. Additionally, new dedicated migration templates have been introduced to handle adding these indexes and the foreign key to existing tables, ensuring that upgrades to this version correctly apply the new MySQL-specific schema requirements.
_ruby\_event\_store-active\_record/lib/ruby\_event\_store/active\record/generators/templates/mysql · high confidence
New event transformation pipeline for serialization, encryption, and upcasting
The library introduces a new set of transformation classes within the mapper layer to handle event data processing. \DomainEvent\ now serializes events into a generic \Record\ format, supporting \timestamp\ and \valid\_at\ fields, and handles missing event classes gracefully by falling back to a generic \Event\. \Encryption\ allows selective encryption of event payload attributes based on a defined schema and key repository, skipping missing attributes. \PreserveTypes\ enables custom serialization and deserialization of specific data types (e.g., dates, custom objects) within the event data and metadata, storing type information to ensure correct restoration. \Upcast\ provides a mechanism to transform events from older types to newer ones during loading, raising an error if the transformation does not change the event type. Additionally, \StringifyMetadataKeys\ and \SymbolizeMetadataKeys\ allow consistent key handling in metadata. These changes represent a shift towards a more flexible and explicit data transformation pipeline.
_ruby\_event\_store/lib/ruby\_event\store/mappers/transformation · high confidence
PostgreSQL generator templates now include foreign keys and optimized indexes
The PostgreSQL migration templates for the Event Store have been updated to enforce referential integrity and improve query performance. The \create\_event\_store\_events\ template now defines a foreign key constraint linking \event\_store\_events\_in\_streams\ to \event\_store\_events\ and includes a COALESCE index on \valid\_at\ and \created\_at\ for efficient time-based lookups. Additionally, new separate migration templates are provided to add a foreign key on \event\_id\ and specific indexes (including a concurrent index on \\[:stream, :id\]\) to existing tables, allowing for non-blocking schema evolution.
_ruby\_event\_store-active\_record/lib/ruby\_event\_store/active\record/generators/templates/postgres · high confidence
Preserve tmp directory in version control
A .gitkeep file has been added to the contrib/ruby\_event\_store-rom/tmp directory to ensure the folder is preserved in the repository. This prevents the temporary directory from being accidentally deleted by users or tools that clean up untracked empty directories.
_contrib/ruby\_event\store-rom/tmp · high confidence
Protobuf support moved to a separate gem with namespaced classes
The protobuf integration has been extracted from the core library into the separate \ruby\_event\_store-protobuf\ gem. This change introduces a dedicated entry point (\RubyEventStore::Protobuf\) and moves all related mappers and transformation classes (such as \ProtoEvent\ and \ProtobufEncoder\) under the \RubyEventStore::Protobuf\ namespace. To ensure a smooth transition, aliases are provided at the top-level \RubyEventStore\ namespace (e.g., \RubyEventStore::Proto\) so that existing code referencing the previous locations continues to work without modification.
_contrib/ruby\_event\_store-protobuf/lib/ruby\_event\store · high confidence
RSpec matchers rewritten with improved failure messages and strict matching
The RSpec integration (version 3.1.0) has been refactored to provide more readable and detailed failure messages when event expectations are not met. The \publish\, \apply\, \have\_published\, and \have\_applied\ matchers now use dedicated formatter classes (\StepByStepFailureMessageFormatter\ and \CrudeFailureMessageFormatter\) that clearly display diffs for event data and metadata, and explicitly state when an event type is correct but the payload is wrong. Additionally, a new \strict\ modifier allows users to enforce exact matching of event data (using \RSpec::Matchers::BuiltIn::Match\) instead of the default subset matching (\Include\), and the \exactly\ and \once\ modifiers are now supported across all event matchers for precise count assertions.
_ruby\_event\_store-rspec/lib/ruby\_event\store/rspec · high confidence
Rails 4.2 support removed and migration version bumped
The outbox migration generator no longer supports Rails 4.2, reflecting the end of its lifecycle. The default migration version has been updated to align with current ActiveRecord standards (bumped to 6.0 in the diff context), ensuring generated migrations are compatible with modern Rails versions. This change affects the \migration\_generator.rb\ file which now relies on \ActiveRecord::Migration.current\_version\ to determine the appropriate migration structure.
_contrib/ruby\_event\_store-outbox/lib/generators/ruby\_event\store/outbox · high confidence
Rails Event Store v3.1.0 release and monorepo scaffolding
This change establishes the v3.1.0 release for the Rails Event Store monorepo, introducing a unified top-level Makefile to manage build, test, and release tasks across all gems (aggregate\_root, ruby\_event\_store, ruby\_event\_store-browser, ruby\_event\_store-rspec, rails\_event\_store, ruby\_event\_store-active\_record). It adds a new APP\_TEMPLATE for bootstrapping Rails applications with explicit AggregateRoot::Repository injection and LinkBy handlers, updates the documentation site configuration with v2-to-v3 redirect rules, and introduces a devenv-based local development environment for reproducing CI database matrices (PostgreSQL 14/18, MySQL 8.4/9.7).
(repo-wide) · high confidence
RailsEventStore now delegates to RubyEventStore::ActiveRecord
The RailsEventStore library has been refactored to remove its own internal storage implementations, which have been moved to the separate RailsEventStoreActiveRecord gem. The main entry point now simply requires ruby\_event\_store/active\_record, meaning users must ensure the RailsEventStoreActiveRecord gem is installed and configured to handle event persistence, rather than relying on built-in storage logic within the core rails\_event\_store package.
_rails\_event\store/lib · high confidence
RailsEventStore v3.1.0 documentation release
The documentation site has been updated to version 3.1.0, introducing new advanced topics for bi-temporal event sourcing, command bus patterns, custom repositories, and event serialization formats. It also covers GDPR considerations with encryption mappers, instrumentation hooks, mapper pipelines, handler mapping, event migration strategies (upcasting and permanent migration), transactional outbox implementation, Protobuf integration, and usage without Rails.
_railseventstore.org/versioned\docs/version-3.1.0 · high confidence
RailsEventStore v3.1.0 release with Rails 8.0 support and configuration updates
This release updates RailsEventStore to version 3.1.0, adding explicit support for Rails 8.0 alongside the existing Rails 7.2 compatibility. The gem now relies on the newer Ruby Event Store ecosystem (v3.1.0) and includes a new \.mutant.yml\ configuration file to standardize mutation testing coverage criteria. Additionally, a unified \Makefile\ has been introduced to streamline build, test, and gem management tasks across the project.
_rails\_event\store · high confidence
RailsEventStore v3.1.0: ActiveJob-based async dispatching and new bulk scheduling
RailsEventStore now uses ActiveJob for asynchronous event handling by default, replacing the previous synchronous or custom dispatcher mechanisms. This change introduces new scheduler classes—ActiveJobScheduler, ActiveJobIdOnlyScheduler, and bulk variants (ActiveJobBulkScheduler, ActiveJobIdOnlyBulkScheduler)—to manage event dispatch via ActiveJob, including support for bulk enqueuing and buffering within database transactions (AfterCommitDispatcher). The Client class is restructured to accept a message\_broker dependency, deprecating direct subscriptions/dispatcher arguments, and automatically instruments repositories, mappers, and brokers with ActiveSupport::Notifications. Additional features include request metadata capture (remote IP, request ID) via middleware, helper modules for async and correlated handlers, and a browser engine for inspecting events. The default serializer is YAML, and JSONClient supports specific type transformations.
_rails\_event\_store/lib/rails\_event\store · high confidence
Redesigns site appearance and typography with Tailwind CSS
The site's visual presentation has been updated to use Tailwind CSS for styling, replacing the previous default Infima CSS configuration. This change introduces a new color palette (primary red \#CA3A31), updated font families, and refined typography for code blocks and lists. It also adjusts the layout constraints for the navbar and main content wrapper at various breakpoints (64rem, 80rem, 96rem) and modifies the sidebar menu styling, resulting in a cleaner, more consistent look across light and dark themes.
railseventstore.org/src/css · high confidence
Refactor browser UI to use server-side ERB and Stimulus
The Ruby Event Store browser interface has been migrated from a client-side Elm Single Page Application to a server-side rendered approach using ERB templates and Stimulus. This change simplifies the rendering pipeline by serving assets locally via Rack::Static with fingerprinted URLs and introduces new routing and rendering components (GetEventsFromStream, GetEventsFromStreams, Router, Renderer) to handle the UI logic on the server.
_ruby\_event\_store-browser/lib/ruby\_event\store · high confidence
Refactored Protobuf event mapping pipeline and namespace
The Protobuf mapper implementation has been reorganized under the RubyEventStore::Protobuf namespace and restructured into a dedicated transformation pipeline. This change introduces specific components for encoding/decoding Protobuf data (ProtobufEncoder), handling nested struct metadata (ProtobufNestedStructMetadata), and mapping to domain events (ProtoEvent), replacing the previous EventClassRemapper logic. Users interacting with this library will see the internal mapping architecture updated to use these new, explicit transformation steps.
_contrib/ruby\_event\_store-protobuf/lib/ruby\_event\store/protobuf/mappers · high confidence
Refactored migration generators to support multiple database adapters
The migration generation logic has been restructured to use a \DatabaseAdapter\ value object that routes to adapter-specific templates for PostgreSQL, MySQL (including the new Trilogy adapter), SQLite, and PostGIS. This change introduces distinct generators for creating the initial event store schema, adding foreign keys on \event\_id\, and adding indexes for \event\_id\, \stream\_id\, and \valid\_at\. Users will now see adapter-specific SQL generated for these operations, with PostgreSQL receiving two-step foreign key migrations (add and validate) while other databases use a single step, and MySQL/SQLite gaining support for \valid\_at\ indexing.
_ruby\_event\_store-active\_record/lib/ruby\_event\_store/active\record/generators · high confidence
Ruby Event Store CLI now requires Rails configuration for event store resolution
The \res\ CLI tool has been updated to resolve the event store instance from \Rails.configuration.event\_store\ instead of relying on a global constant. This change introduces a safety check that aborts with a friendly error if \config/environment.rb\ is missing or if the event store is not properly configured in the Rails application, ensuring users are guided to correct setup issues rather than encountering cryptic failures.
_contrib/ruby\_event\store-cli/bin · high confidence
Ruby Event Store Profiler released as version 0.2.0
The Ruby Event Store Profiler component has been updated to version 0.2.0. This release includes the addition of a version constant file and applies standard Ruby magic comments for string literal freezing to the codebase.
_contrib/ruby\_event\_store-profiler/lib/ruby\_event\store/profiler · high confidence
Ruby Event Store Protobuf gem extracted and upgraded to v2.0.0
The \ruby\_event\_store-protobuf\ component has been extracted into a standalone gem (version 2.0.0), moving from the main \ruby\_event\_store\ distribution. This release imposes a minimum \google-protobuf\ version of 26.0 (4.26.0) and makes previously optional dependencies (\google-protobuf\, \protobuf\_nested\_struct\) required for the gem to function. The gem now supports Rails 7.2 and Rails 8.0, with dedicated Gemfiles provided for each.
_contrib/ruby\_event\store-protobuf · high confidence
RubyEventStore ROM adapter v2.3.0 release
The RubyEventStore ROM adapter has been updated to version 2.3.0, which relaxes the dependency bound to allow \ruby\_event\_store\ 3.x (up to \\< 4.0\). This release includes no functional code changes or schema modifications compared to version 2.2.0; it consists entirely of internal style adjustments and refactoring. The update also adds a README 'Setup' section documenting Rake tasks, database migration procedures (including the \DATA\_TYPE\ option), and application wiring.
_contrib/ruby\_event\store-rom · high confidence
RubyEventStore library structure and public API reorganization
The library's public API surface has been reorganized and expanded in the main entry point. The main require file now explicitly loads the \SyncScheduler\ (replacing the deprecated \Dispatcher\), \Subscriptions\ (replacing \Broker\), and the \Client\ (replacing \Facade\). It introduces a new mappers pipeline with specific transformations for encryption, upcasting, and metadata key handling, alongside new mappers for encryption and instrumentation. The API also exposes new capabilities such as \LinkByMetadata\, \CorrelatedCommands\, and \EventTypeResolver\, while standardizing on \Record\ instead of \SerializedRecord\ and \YAML\ as the default serializer.
_ruby\_event\store/lib · high confidence
RubyEventStore v3.1.0: New Client API, Broker Architecture, and Batch Reading
This release introduces RubyEventStore v3.1.0, featuring a redesigned \Client\ that now accepts a \message\_broker\ argument (deprecating the direct \subscriptions\ and \dispatcher\ arguments) to centralize event dispatching. The library adds a new \BatchEnumerator\ class to support efficient batch reading of events from repositories, and introduces \ComposedBroker\ and \ComposedDispatcher\ to allow chaining multiple brokers or dispatchers. Additionally, the \Projection\ API has been updated to use \Projection.init\ instead of \new\, and the \Client\ now returns \self\ from write operations like \publish\ and \append\ to enable method chaining.
_ruby\_event\_store/lib/ruby\_event\store · high confidence
RubyEventStore::ActiveRecord v3.1.0 release with Rails 8.0 support
The ActiveRecord event repository has been updated to version 3.1.0, introducing official support for Rails 8.0 alongside the existing Rails 7.2 compatibility. This release includes a namespace rename from \RailsEventStoreActiveRecord\ to \RubyEventStore::ActiveRecord\ and removes the legacy compatibility shim. Additionally, the library now supports \valid\_at\ indexes for MySQL and SQLite, and fixes a long-standing issue with JSON and JSONB column serialization.
_ruby\_event\_store-active\record · high confidence
Server-side ERB rendering for stream views with swimlane integration
The stream detail page now uses server-side ERB templates instead of the previous Elm SPA, enabling direct rendering of event lists with pagination controls and a new 'Add to swimlane' button that is hidden on the global stream view. The interface also supports extension points for additional action links and displays related streams, while ensuring link URLs are properly escaped for security.
_ruby\_event\_store-browser/lib/ruby\_event\store/browser/views/streams · high confidence
Support for Sidekiq::Job::Setter instances in SidekiqScheduler
The Ruby Event Store Sidekiq Scheduler now accepts Sidekiq::Job::Setter instances in addition to standard Sidekiq::Worker classes. This allows the scheduler to verify and process jobs that utilize Sidekiq's newer job setter interface, ensuring compatibility with Sidekiq 6.3.0+ job definitions.
_contrib/ruby\_event\_store-sidekiq\_scheduler/lib/ruby\_event\store · high confidence
Updated database schema and migration templates for Event Store
The ActiveRecord adapter's migration templates have been updated to reflect the current database schema. The \CreateEventStoreEvents\ migration now creates both \event\_store\_events\ and \event\_store\_events\_in\_streams\ tables, adding a \valid\_at\ column with a \COALESCE\ index on \event\_store\_events\ and a foreign key constraint on \event\_id\ in \event\_store\_events\_in\_streams\. New separate migration templates have been added to support upgrading existing installations: \AddEventIdIndexToEventStoreEventsInStreams\, \AddForeignKeyOnEventIdToEventStoreEventsInStreams\, \AddStreamIdIndexToEventStoreEventsInStreams\, and \AddValidAtIndexToEventStoreEvents\, allowing users to incrementally apply schema changes like indexes and foreign keys to their existing databases.
_ruby\_event\_store-active\_record/lib/ruby\_event\_store/active\record/generators/templates · high confidence
Updated partner logos on the homepage
The static images directory for the railseventstore.org site has been refreshed with new or updated SVG logo files for several partner companies, including Acatus, Arkency, Billetto, Elucid, GAT, Gigs, Jobvalley, and Monterail. This change ensures the company logos displayed on the homepage are current and visually consistent.
railseventstore.org/static/images · high confidence
ruby\_event-store-process\_manager v0.2.0: Breaking change to dependency injection and new browser extension
The ruby\_event\_store-process\_manager gem has been released at version 0.2.0, introducing a breaking change where process manager classes no longer accept a constructor for dependencies; instead, dependencies (event\_store, command\_bus) must be injected via a new \with\ method (e.g., \Klass.new.with(event\_store:, command\_bus:)\). This change enables process managers to be subclassed from frameworks like ActiveJob that instantiate classes without arguments, supporting asynchronous handling. Additionally, the gem now includes a browser extension for RubyEventStore::Browser that adds a 'Process state' link to relevant streams, allowing users to replay and view the step-by-step state evolution of a process without side effects. A clear error is now raised if \call\ is invoked before \with\.
_contrib/ruby\_event\_store-process\manager · high confidence
Test coverage
Add test infrastructure for minitest-ruby\_event\_store; Added RSpec test infrastructure for dres\_rails; Added RSpec tests for DresClient HTTP event retrieval; Added Rails dummy application for testing DresRails; Added comprehensive test coverage for RSpec matchers and failure formatting; Added comprehensive test coverage for Rails Event Store schedulers, dispatchers, and browser integration; Added comprehensive test coverage for RubyEventStore::ActiveRecord; Added comprehensive test suite for AggregateRoot core behaviors; Added comprehensive test suite for RubyEventStore Outbox; Added comprehensive test suite for RubyEventStore core components; Added feature and model tests for DresRails; Added initial test suite for the New Relic integration; Added integration tests for CLI commands; Added integration tests for the Ruby Event Store MCP server; Added minitest assertions for RubyEventStore; Added shared spec for event correlation behavior; Added shared test examples for buffering scheduler validation; Added test coverage for CLI event inspection and monitoring commands; Added test coverage for Outbox metrics components; Added test coverage for Process Manager; Added test coverage for ROM integration; Added test coverage for Ruby Event Store MCP tools and server; Added test coverage for event transformation mappers; Added test coverage for mappers and key transformations; Added test infrastructure for warning detection and test fixtures; Added test suite for RubyEventStore::Protobuf integration; Added test suite for RubyEventStore::Sequel EventRepository; Added test support helpers for database and Sidekiq setup; Added test support infrastructure for Rails Event Store specs; Added test support infrastructure for browser integration tests; Added tests for Protobuf mapper and transformation components; Added tests for identity map and indifferent access transformations; Added tests for the Ruby Event Store Profiler; Initial test suite for RubyEventStore-Flipper integration; Initial test suite for the Sidekiq Scheduler integration; Introduce support/helpers for test infrastructure; New lint specifications for Ruby Event Store components; New test infrastructure for RubyEventStore::ROM integration.
Dependencies
Centralize database and shared development dependencies
The support/bundler area now uses dedicated Gemfile fragments to manage dependencies: Gemfile.database explicitly pins the pg (1.5.6) and mysql2 (0.5.6) gems, while Gemfile.shared consolidates common development tools including rake (\>= 10.0), rspec, mutant-rspec, mutant-minitest, mutant, and irb.
support/bundler · high confidence
Ruby Event Store v3.1.0 release with Rails 7.2 support and mutation testing setup
This release updates the gem to version 3.1.0 and introduces a new Gemfile configuration for testing against Rails 7.2 (activesupport \~\> 7.2.0). It also adds a \.mutant.yml\ configuration file to enable mutation testing with the 'light' operator set, excluding specific internal methods and hash implementations from mutation analysis. The release includes a unified Makefile structure and an updated README.
_ruby\_event\store · high confidence
Update development dependencies and lockfiles across multiple gems
This change updates the development and test dependencies for several Ruby gems, including \aggregate\_root\, \dres\_client\, \dres\_rails\, \minitest-ruby\_event\_store\, \ruby\_event\_store-cli\, \ruby\_event\_store-flipper\, \ruby\_event\_store-mcp\, \ruby\_event\_store-newrelic\, and \ruby\_event\_store-outbox\. The updates primarily involve bumping versions of development tools like \mutant\, \rspec\, and \irb\, as well as aligning runtime dependencies such as \ruby\_event\_store\ and \activesupport\ to newer versions (e.g., \activesupport \~\> 8.0.0\ in \aggregate\_root\, \rails \~\> 8.1.0\ in \ruby\_event\_store-outbox\). These changes ensure compatibility with the latest Ruby and Rails versions and improve the development environment for contributors.
(dependencies) · high confidence
Housekeeping
Documentation for version 2.16.0 released
The documentation site for version 2.16.0 has been updated with new and revised advanced topic guides. These additions cover bi-temporal event sourcing, command bus usage, custom repository configuration, event serialization formats, GDPR considerations (including encryption mappers), instrumentation hooks, mapper pipelines, handler mapping, event migration strategies, Protobuf integration, transaction handling, non-Rails setup, and unique event publishing patterns.
_railseventstore.org/versioned\docs/version-2.16.0 · 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 48 → 49 (+0.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 55 → 61 (+6.1)
- Architecture 97 → 97 (+0.6)
- Maturity 68 → 68 (+0.6)
- Readiness 38 → 48 (+10.1)
- Security 51 → 64 (+12.9)
- Domain Modelling 61 → 67 (+6.0)
- Accessibility 39 (new)
Resolved (113)
- Change coupling clique: version.rb, version.rb, version.rb, version.rb, version.rb, version.rb (aggregate_root/lib/aggregate_root/version.rb)
- Coverage not included — suite not readable by the collector
- Critical CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- Critical CVE: [GHSA redacted] (contrib/dres_rails/Gemfile.lock)
- Critical CVE: [GHSA redacted] (contrib/ruby_event_store-outbox/Gemfile.lock)
- Critical CVE: [GHSA redacted] (contrib/ruby_event_store-sidekiq_scheduler/Gemfile.lock)
- Critical CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (17 lines × 2) (contrib/ruby_event_store-sequel/lib/ruby_event_store/sequel/event_repository.rb)
- Duplicated block (5 lines × 2) (contrib/ruby_event_store-cli/lib/ruby_event_store/cli/read_events.rb)
- Duplicated block (9 lines × 2) (contrib/ruby_event_store-flipper/lib/ruby_event_store/flipper.rb)
- EventRepository.read_from_global_stream (cyclomatic 16) (contrib/ruby_event_store-sequel/lib/ruby_event_store/sequel/event_repository.rb)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (contrib/dres_rails/Gemfile.lock)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (ruby_event_store-browser/elm/package-lock.json)
- …and 93 more
New (217)
- Banned license: sidekiq
- Change coupling: instrumented_dispatcher.rb ↔ instrumented_repository.rb (ruby_event_store/lib/ruby_event_store/instrumented_dispatcher.rb)
- Change coupling: outbox.rb ↔ consumer.rb (contrib/ruby_event_store-outbox/lib/ruby_event_store/outbox.rb)
- Critical CVE: [GHSA redacted] (contrib/dres_rails/Gemfile.lock)
- Critical CVE: [GHSA redacted] (contrib/ruby_event_store-outbox/Gemfile.lock)
- Critical CVE: [GHSA redacted] (contrib/ruby_event_store-sidekiq_scheduler/Gemfile.lock)
- Documentation: written for insiders
- Duplicated block (10 lines × 2) (contrib/ruby_event_store-flipper/lib/ruby_event_store/flipper.rb)
- Duplicated block (11 lines × 2) (contrib/ruby_event_store-mcp/lib/ruby_event_store/mcp/tools/event_show.rb)
- Duplicated block (19 lines × 2) (ruby_event_store-active_record/lib/ruby_event_store/active_record/generators/stream_id_index_migration_generator.rb)
- Duplicated block (29 lines × 2) (contrib/ruby_event_store-sequel/lib/ruby_event_store/sequel/index_violation_detector.rb)
- Duplicated block (30–31 lines × 2) (contrib/ruby_event_store-sequel/lib/ruby_event_store/sequel/event_repository.rb)
- Duplicated block (5 lines × 2) (contrib/ruby_event_store-cli/lib/ruby_event_store/cli/read_events.rb)
- FunctionTooLong: billetto.Billetto (railseventstore.org/src/pages/billetto.js)
- FunctionTooLong: community.Home (railseventstore.org/src/pages/community.js)
- FunctionTooLong: contributing.Contributing (railseventstore.org/src/pages/contributing.js)
- FunctionTooLong: support.Support (railseventstore.org/src/pages/support.js)
- Further sole-owners (lower concentration)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- High CVE: [GHSA redacted] (railseventstore.org/package-lock.json)
- …and 197 more
Changes since last survey
- 78 commits — 77 feature/other, 1 fixes
By area
- railseventstore.org/docs — 34 commits
- contrib/ruby_event_store-process_manager — 15 commits
- rails_event_store/lib — 9 commits
- rails_event_store/spec — 3 commits
- ruby_event_store-browser/public — 3 commits
- .github/workflows — 2 commits
- contrib/ruby_event_store-cli — 2 commits
- contrib/ruby_event_store-sequel — 2 commits
- railseventstore.org/versioned_docs — 2 commits
- contrib/Makefile — 1 commit
- railseventstore.org/Makefile — 1 commit
- railseventstore.org/src — 1 commit
- ruby_event_store-active_record/lib — 1 commit
- ruby_event_store-browser/lib — 1 commit
- ruby_event_store-browser/spec — 1 commit
Notable commits
- fix: fix public/ruby_event_store_browser.css
- change: Add "experimental feature" notices
- change: Add ActiveJobBulkScheduler to enqueue async handlers in one call
- change: Add ActiveJobIdOnlyBulkScheduler
- change: Add changelog
- change: Add missing ruby_event_store-cli to contrib gems
- change: Add process manager mutation CI
- change: Allow process managers to be instantiated without a constructor
- change: Apply syntax_tree formatting to the new spec
- change: Bump version to 0.2.0
- change: Constrain Tailwind sources to templates and controllers
- change: Cover Subscriptions.extended with tests
- change: Cover async instantiation and the missing-dependency guard
- change: Cover parse_stream_name with tests
- change: Cover register with tests
- change: Cover stream_name with tests
- change: Cover subscribes_to with tests
- change: Cover with_state with tests
- change: Document #flush as an open protocol and its Rails floor
- change: Document ActiveJobIdOnlyBulkScheduler
- …and 58 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
RailsEventStore/rails_event_store 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 d4c8c2d3a3e66c25b633d713c1fe4bc96bb093ab — 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.