Skip to main content
v1.0.0 — Production Ready

Event Sourcing
for Go

Built for developers who demand simplicity without sacrificing power. Production-ready event sourcing & CQRS toolkit.

main.go
store, _ := mink.NewEventStore(
postgres.NewAdapter("postgres://localhost/orders"),
)

order := NewOrder("order-123")
order.Create("customer-456")
order.AddItem("SKU-001", 2, 29.99)

store.SaveAggregate(ctx, order)
0+
Features
0%+
Test Coverage
2.5M
Events/sec

Everything you need to build event-driven systems

A comprehensive toolkit that covers the entire lifecycle — from event storage to projections, sagas, encryption, and beyond.

Event Store

Core

Append-only storage with optimistic concurrency and global ordering.

Aggregates

Core

Domain-driven aggregate roots with automatic event application.

Projections

Core

Inline, async, and live read models that update automatically.

Command Bus

Core

Full CQRS with middleware pipeline, validation, and idempotency.

Adapters

Core

PostgreSQL for production, in-memory for testing. Swap anytime.

Encryption

Enterprise

AES-256-GCM field-level encryption with envelope encryption pattern.

GDPR Compliance

Enterprise

Crypto-shredding, data export, and right-to-erasure built in.

Sagas

Enterprise

Orchestrate long-running workflows with automatic compensation.

Outbox Pattern

Enterprise

Reliable event publishing to Kafka, webhooks, and SNS.

Testing

Developer Experience

BDD fixtures, assertion helpers, and test containers included.

Observability

Developer Experience

Prometheus metrics and OpenTelemetry tracing out of the box.

CLI Tool

Developer Experience

Generate code, run migrations, diagnose issues from the terminal.

Clean, idiomatic Go

No magic. No ceremony. Just the patterns Go developers expect.

package main

import (
"context"
"go-mink.dev"
"go-mink.dev/adapters/postgres"
)

func main() {
ctx := context.Background()

// Connect to your database
store, _ := mink.NewEventStore(
postgres.NewAdapter("postgres://localhost/orders"),
)

// Create and save an aggregate
order := NewOrder("order-123")
order.Create("customer-456")
order.AddItem("SKU-001", 2, 29.99)

store.SaveAggregate(ctx, order)
}

Architecture that scales

A clean, layered architecture from commands to read models.

CommandsCommand BusHandlerAggregateEventsEvent StoreProjectionsSagasRead ModelsOutbox

Blazing fast performance

Benchmarked with real workloads. Optimized for production scale.

2.5M
Events/sec
In-memory throughput
0M
Batch write
Events in a single batch
0K
PostgreSQL ops/sec
Concurrent event writes
0
Workers
Concurrent worker support

Why choose go-mink?

See how go-mink compares to building event sourcing from scratch.

AspectTraditionalgo-mink
Event StorageCustom implementationBuilt-in, optimized
ProjectionsManual, error-proneAutomatic, reliable
Database SupportLocked to one DBSwap adapters anytime
TestingComplex setupBDD fixtures included
Learning CurveSteepGentle, familiar API
EncryptionDIY per-field logicAES-256-GCM built in
GDPRManual implementationCrypto-shredding + export

Ready to get started?

Add go-mink to your project and start building event-driven systems in minutes.

$go get go-mink.dev