An Elixir event store with PostgreSQL persistence, supporting clustering, subscriptions, and ACID compliance.
EventStore is an event sourcing library implemented in Elixir that uses PostgreSQL for persistent storage. It provides a way to append, read, and subscribe to events in streams, enabling developers to build event-driven applications with strong data integrity guarantees. It solves the problem of reliably storing and retrieving event sequences in a scalable, ACID-compliant manner.
Elixir developers building event-driven systems, microservices, or applications following CQRS and event sourcing patterns who need a reliable, PostgreSQL-backed event store.
Developers choose EventStore for its simplicity, reliance on PostgreSQL's proven reliability, and native Elixir integration. It offers clustering support, persistent subscriptions, and comprehensive tooling for production use, making it a robust open-source alternative to commercial event stores.
Event store using PostgreSQL for persistence
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Builds on PostgreSQL's ACID compliance and transactional guarantees, ensuring data integrity and correctness for event storage, as highlighted in the production use section.
Supports both transient and persistent subscriptions with acknowledgment mechanisms, enabling real-time event processing and reliable delivery, detailed in the Subscriptions guide.
Includes performance benchmarks to measure throughput for concurrent reads, writes, and subscriptions, helping users assess the impact of changes, as shown in the benchmarking output examples.
Can run on a cluster of nodes for scalability and fault tolerance, with a dedicated guide for cluster setup, making it suitable for distributed applications.
Tightly coupled to PostgreSQL as the sole storage engine, limiting flexibility for teams using other databases or cloud-native storage solutions.
Implemented in Elixir and reliant on the BEAM VM, making it unsuitable for non-Elixir projects without complex interop or bridging layers.
Default JSON serialization can slow performance; optimal throughput requires Erlang's external term format, which ties data to the Erlang ecosystem and complicates cross-platform use.