High-throughput, hierarchical event streaming for Go. Organize data in stores, spaces, and segments; consume with strict per-segment ordering or timestamp-merged space views; plug in PebbleDB or Azure Table Storage and in-process or WebSocket transport.
Production-ready — used in live services. See docs/production.md for deployment guidance and docs/limitations.md for operational contracts (delivery semantics, cursors, subscriptions).
Full documentation: docs/
| Topic | Guide |
|---|---|
| Production | docs/production.md |
| Concepts (store / space / segment) | docs/concepts.md |
| Architecture and packages | docs/architecture.md |
| Getting started | docs/getting-started.md |
| Client SDK | docs/client-guide.md |
| Server embedding | docs/server-guide.md |
| Storage backends | docs/storage.md |
| Transport (in-proc / WebSocket) | docs/transport.md |
Event sourcing (eskit) |
docs/event-sourcing.md |
| Operations | docs/operations.md |
import (
"context"
"github.com/fgrzl/enumerators"
"github.com/fgrzl/streamkit/pkg/client"
"github.com/fgrzl/streamkit/pkg/server"
"github.com/fgrzl/streamkit/pkg/storage/pebblekit"
"github.com/fgrzl/streamkit/pkg/transport/inprockit"
"github.com/google/uuid"
)
func main() {
ctx := context.Background()
factory, _ := pebblekit.NewStoreFactory(&pebblekit.PebbleStoreOptions{Path: "./data"})
nm := server.NewNodeManager(server.WithStoreFactory(factory))
provider := inprockit.NewInProcBidiStreamProvider(ctx, nm)
c := client.NewClient(provider)
defer c.Close()
storeID := uuid.New()
records := enumerators.Slice([]*client.Record{{Sequence: 1, Payload: []byte("hello")}})
_, _ = enumerators.ToSlice(c.Produce(ctx, storeID, "demo", "events", records))
}See Getting started for a complete produce/consume walkthrough. For WebSocket + JWT production wiring, see Transport.
See CONTRIBUTING.md and docs/test_guidelines.md. Changelog: CHANGELOG.md.
See LICENSE.