A Manifesto for Data Integrity
Software systems are built on decisions, but they are sustained by facts. Traditional databases force you to structure your world before you understand it. FactStore comes from a different angle and is designed with event sourcing and flexibility in mind.
Event sourcing should be easy and accessible to everyone, with the least amount of patterns needed! FactStore is an attempt to provide this flexibility and freedom so that you can design your applications in a way that closely reflects how your business operates, without the additional technical overhead.
Core Capabilities
FactStore provides the backbone for your event sourcing infrastructure.
Event Sourcing and Streaming
FactStore supports traditional aggregate or stream-based event sourcing as well as more flexible approaches to enforce consistency, such as dynamic consistency boundaries (DCB). FactStore gives you the flexibility to use both.
Scalable and Performant
Adapt FactStore to the workload you need. Whether you need a FactStore for local development and experimentation, or a production-ready, redundant storage, FactStore's flexible architecture lets you choose.
Open Source
The core of FactStore is fully open source and licensed under Apache 2.0. Deploy FactStore wherever you like, on-premise or in the cloud. There is no vendor lock-in. Enterprise features and support are available for advanced use cases.
Why choose FactStore?
Event sourcing should not be a rigid architectural trap. FactStore provides the tools to build systems that are both mathematically sound and operationally flexible.
- Open Source Transparency: Audit every line of code.
- Clear and simple APIs: FactStore is well-documented and tested.
- Flexible event sourcing: Support for stream-based and dynamic consistency.
- Atomic Operations: Profit from strong consistency and idempotent operations.
- CloudEvent support: Use common transport protocols to share your facts.
const factStore = new FactStore(config);
// Append a business fact
await factStore.append({
type: "OrderPlaced",
stream: "order-123",
data: {
customer: "alice",
total: 49.99
}
})
// Read the stream
const events = await factStore.read(
"order-123"
);