Why Edomata?
Simple primitives for complex event-driven systems
λPurely Functional
Fully referentially transparent. No exceptions, no runtime reflection. Built on Cats Effect for polymorphic effect handling.
⦿Event Sourcing & CQRS
First-class support for event-driven state machines, enabling true event-sourced systems with built-in CQRS patterns.
⬢Cross-Platform
Run on JVM, Scala.js, or Scala Native. Your domain logic compiles everywhere, from servers to browsers to native binaries.
◇Lightweight & Simple
A few composable primitives, not a framework. Understand the entire API surface in an afternoon.
✓Type-Safe Decisions
The Decision monad captures accept/reject/indecisive outcomes at the type level. Impossible states are unrepresentable.
⛁Production-Ready Backends
PostgreSQL backends via Skunk (async, cross-platform) or Doobie (JDBC). With migration support and Flyway integration.
⚙Extensible
Swap serialization (Circe, Jsoniter, uPickle), backends, or build your own. Every component can be extended.
△Principled Design
Based on battle-tested ideas from DDD, CQRS, and event sourcing pioneers. Simple concepts, powerful composition.
Add to Your Project in Seconds
Pick a module, drop it into your build, and start building event-driven systems
SBT (JVM)
// Core library
libraryDependencies += "io.github.beyond-scale-group" %% "edomata-core" % "0.12.20"
// With Skunk + Circe PostgreSQL backend (recommended)
libraryDependencies += "io.github.beyond-scale-group" %% "edomata-skunk-circe" % "0.12.20"
Scala.js / Scala Native
libraryDependencies += "io.github.beyond-scale-group" %%% "edomata-core" % "0.12.20"
Maven
<dependency>
<groupId>io.github.beyond-scale-group</groupId>
<artifactId>edomata-core_3</artifactId>
<version>0.12.20</version>
</dependency>