maif / thoth   1.1.6

Apache License 2.0 Website GitHub

Event sourcing in java with vavr, akka stream and vertx reactive PG driver

Scala versions: 2.13 2.12

Event sourcing github-action-badge jar-badge


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


  • commons-event: POJOs that represent the stored events. Can be used by consumers to parse events.
  • thoth-core: APIs for event-sourcing
  • thoth-jooq: A jooq simple implementation of the thoth-core APIs
  • thoth-jooq-async: A jooq implementation of the thoth-core APIs using the jooq-async-apiinterface


See our documentation.


  • A single command can't currently modify multiple entities see this issue


Compile / Test

./gradlew compileJava
docker-compose -f docker-compose.test.yml up 
./gradlew test

Generate the documentation

cd thoth-documentation
sbt generateDoc