Skip to main content

About FactStore

FactStore is an open-source event store for building event-sourced applications. It gives you a small set of well-defined primitives — append, query, stream — and leaves the modelling decisions to you.

The project is free software, published under the Apache License 2.0. There is no hosted service, no paid tier and no sign-up. You run FactStore yourself, on your own infrastructure.

What the project produces​

FactStore is a collection of libraries and tools rather than a single binary:

ComponentWhat it is
factstore-specificationThe implementation-agnostic contracts and behavioral rules: the APIs for appending facts, reading streams, subscribing, and the ordering and consistency guarantees. Written in Kotlin.
factstore-foundationdbAn implementation of that specification using FoundationDB as the storage engine, with strong consistency, ordered writes and efficient range reads.
HTTP & gRPC ServerA lightweight, cloud-native server exposing the full FactStore API. Deployable on-premise or in the cloud.
Kotlin Client SDKAn idiomatic, coroutine-native client for JVM applications.
Command-Line InterfaceA native binary for scripting, exploration and local development.
FactExplorerA browser-based UI for browsing stores, querying facts by subject or tag, and watching live fact streams.

The idea behind it​

Every meaningful thing that happens in a system is a fact. An order was placed. A payment was confirmed. A customer was onboarded. Those things happened, and they do not un-happen. FactStore keeps a reliable, ordered record of them and never throws that history away.

Two design decisions distinguish it from a plain append-only log:

  • Facts are retrievable along two independent axes. By subject, which gives you the classic per-entity event stream, and by tag, which cuts across subjects entirely. In most event stores the second kind of question requires building a separate read model first. Here both are first-class queries over the same facts.
  • Consistency boundaries are chosen per operation. Traditional aggregate-based streams and Dynamic Consistency Boundaries can be used in the same store, and mixed. FactStore does not decide for you when you design your schema.

Project status​

FactStore is pre-release. The APIs are usable and documented, and the 5-Minute Tutorial works today, but the project is not yet recommended for production workloads. Interfaces may still change.

Who maintains it​

FactStore is maintained by Domenic Cassisi together with contributors from the community. Development happens in the open on GitHub.

Get in touch​

Contributions are welcome, from typo fixes upwards.