MA
MAIF/thoth
Event sourcing in java with vavr, akka stream and vertx reactive PG driver
Event sourcing

This repository provides tools to implement event sourcing in your application.
It guaranties that:
- Events will be written in the database before being published in Kafka
- Publication in Kafka will be reattempted until it succeeds
It provides capabilities of defining two types of projections:
- "Transactional" projections, that are updated in the same transaction as the events
- "Eventually consistent" projections, updated asynchronously by consuming Kafka
It also allows storing snapshots of the application state, for scenarios that implies lot of events.
These libs are based on :
- Vavr for functional stuff (immutable
List,Either,Future) - Akka stream for reactive streams
- jackson for json
- jooq to build query
- vertx for reactive postgresql database access
- Postgresql and kafka are the in production tested data stores
Modules
commons-event: POJOs that represent the stored events. Can be used by consumers to parse events.thoth-core: APIs for event-sourcingthoth-jooq: A jooq simple implementation of thethoth-coreAPIsthoth-jooq-async: A jooq implementation of thethoth-coreAPIs using thejooq-async-apiinterface
Documentation
See our documentation.
Limits
- A single command can't currently modify multiple entities see this issue
Development
Compile / Test
./gradlew compileJavadocker-compose -f docker-compose.test.yml up
./gradlew testGenerate the documentation
cd thoth-documentation
sbt generateDocOn this page
Languages
Java97.4%CSS1.8%StringTemplate0.5%Scala0.3%Shell0.0%
Apache License 2.0
Created September 24, 2020
Updated November 5, 2025

