GenesisDB 2.0 is open source

Every change.
Forever.

GenesisDB is the open source and GDPR-ready event sourcing database for building event-driven apps.

POST /api/v2/subscribesubject: /
shipment-sent#86dad692
/order/1337/shipment
payment-received#93cfd856
/order/1337
order-placed#5006d7e0
/order/1337
address-changed#6835c01c
/customer/42/address
customer-registered#8acb841f
/customer/42
CloudEvents 1.0MIT licensedSingle static binaryServer-Sent EventsSHA-256 hash chainGDPR erasureBuilt-in MCP serverPrometheusOpenTelemetryDockerKuberneteslinux/amd64linux/arm64macOSEmbeddable in Go
HTTP all the way down

Five requests. That is the whole mental model.

Commit events, fetch streams, query, subscribe and erase. Plain JSON in, NDJSON out, no driver required. Use curl, any HTTP client or one of the SDKs.

  1. 1
    Commit
    Write a batch of CloudEvents atomically, optionally guarded by preconditions.
  2. 2
    Fetch
    Read a subject and all its descendants in commit order, bounded by event IDs.
  3. 3
    Query
    Ask questions across the store with GDBQL, from filters to grouped aggregates.
  4. 4
    Subscribe
    Keep projections and read models up to date with Server-Sent Events.
  5. 5
    Erase
    Remove personal data from reference payloads and keep the audit trail.
curl localhost:8080/api/v2/commit \
  -H "Authorization: Bearer $GENESISDB_AUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "events": [{
      "source": "io.example.shop",
      "subject": "/customer/42",
      "type": "io.example.shop.customer-registered",
      "data": { "name": "Bruce Wayne" }
    }],
    "preconditions": [
      { "type": "isSubjectNew", "payload": { "subject": "/customer/42" } }
    ]
  }'
Built in, not bolted on

Everything event sourcing needs, in one binary.

Hash chain
Tamper-evident by design.

Every event is SHA-256 chained to its predecessor. One request verifies the integrity of the whole store.

GET /api/v2/admin/audit 200 OK
Subjects
Streams as a tree.

Fetch one stream or a whole branch, in commit order.

GDPR
Forget, keep history.

Erase personal data from reference payloads. Chain and audit trail stay intact.

GDBQL
Ask your history anything.

Filters, ordering, grouping, aggregates, projections and subqueries. Also usable as a commit precondition.

STREAM e FROM events
  WHERE e.type == 'order.placed'
  GROUP BY e.data.category
  MAP { orders: COUNT(), total: SUM(e.data.amount) }
Preconditions
Atomic batch commits guarded by isSubjectNew, isSubjectExisting or any GDBQL query. Business rules, enforced at write time.
Live subscriptions
Subscribe to a subject over Server-Sent Events and get history plus every new event as it is committed.
CloudEvents native
Every event is a CloudEvents 1.0 record. Standard tooling understands your data from day one.
Observable
Prometheus and OpenTelemetry metrics, structured logs and a status endpoint with engine, storage and event details.
Schemas
Register an optional JSON schema per event type. Commits are validated against it, malformed events never get in.
Embeddable
One Go module, every engine its own package. store.Open(dir) runs the database inside your own program.
Works with your stack

Official SDKs for eight languages.

Typed clients with the same API everywhere: commit, fetch, query, subscribe, schemas and erasure. All MIT licensed.

Running 1.x? Back up, then swap the binary.

GenesisDB 2 is a drop-in replacement. Existing data directories migrate on first start, every 1.x backup restores and every 1.x route still answers. Your clients keep working. The migration is one-way, so as with every migration a backup of the data directory is mandatory before upgrading.

Upgrade guide
Open source, MIT licensed.

No editions, no license keys, no event limits. Read the code, run it anywhere, open issues and send pull requests. GenesisDB belongs to everyone who builds with it.

Your first event is one command away.

Start the container, commit an event, fetch it back. Five minutes, no signup.

docker run --rm --name genesisdb \
  -e GENESISDB_AUTH_TOKEN="$(openssl rand -hex 32)" \
  -p 127.0.0.1:8080:8080 \
  -v genesisdb-data:/app/data \
  genesisdb/genesisdb:latest