What Chronacta provides

An event-sourced application needs more than a place to write JSON. It needs ordered streams, concurrency checks, reliable reads, and a way for consumers to track their progress.

Chronacta provides these event-store mechanisms through a network API. The application decides which events to produce; Chronacta stores them and makes them available for subsequent processing.

Streams, versions, and schemas

Each stream has an ordered sequence of events and a version. An expected-version check rejects an append based on an outdated stream version. An idempotency key allows the same append request to be retried without adding a duplicate under the API's idempotency contract.

Global positions support reads across streams. Subscriptions deliver events to consumers, and projections derive read models. The schema registry validates event payloads against registered JSON Schema definitions.

In a DDD application using Event Sourcing, a stream commonly stores the events of one aggregate instance. The aggregate enforces invariants; the stream version helps prevent concurrent decisions from being committed against stale state.

Command
Domain decision
Domain event
Event store
Projection
A command reaches the application → the application applies domain rules and produces events → Chronacta appends them to a stream → projections build read models for queries.

Command handling and queries

A command handler loads an aggregate through a repository, invokes domain behavior, and persists the resulting events. The repository can reconstruct the aggregate from its stream and append new events with the version that was read.

In a CQRS design, query handlers read models prepared for their queries. Projections populate those models by processing events. Read models can reside in application memory, a relational database, or another appropriate store.

A projection is the transformation; a read model is its result. Changing projection logic may require rebuilding the read model. It does not change previously recorded events or automatically correct mistakes in command handling.

Product boundaries

Chronacta is not a relational query engine. Use an appropriate database for joins, search, and analytical queries over derived data.

Chronacta is not a drop-in replacement for Kafka or NATS. An event store and a message broker can serve complementary roles in the same architecture.

Chronacta does not implement your aggregates, command handlers, or domain invariants. It is infrastructure, not an application framework.

You deploy and operate the server. Chronacta provides a single-node edition; Enterprise adds capabilities for high availability and broader operational requirements.

Application
Chronacta
Postgres
NATS / Kafka
Chronacta stores the event history the application designates as authoritative. Postgres and message brokers may remain external read-model stores or transport.

Integration across boundaries

Keep ownership of streams and event contracts explicit. A bounded context owns its domain model; other contexts should not depend on every internal event representation.

A subscriber can translate domain events into integration events for another bounded context. Postgres may store read models, while NATS or Kafka may distribute integration events where external transport is required.

Coordinate long-running processes in application components such as process managers. Chronacta stores and delivers events; it does not determine the business process.

From development to operation

Start with one aggregate, one command handler, and one projection. Test successful writes, version conflicts, retries, and read-model rebuilds.

Before production, define backup and restore procedures, consumer recovery, data access, monitoring, and event-schema evolution.

Choose Chronacta or Enterprise according to measured capacity and requirements for availability, identity integration, recovery, and administration.