Release v0.5.0
Orisun v0.5.0
Highlights
Orisun 0.5.0 applies data-oriented design across event writes, reads, latest-by-criteria queries, and publishing. Hot paths now use compact Go batches and scalar fields below the transport boundary, while the public gRPC/protobuf wire contract remains unchanged.
Data-oriented write and read paths
SaveEventsnormalizes incoming events once into a canonicalPreparedEventBatch; PostgreSQL, SQLite, and FoundationDB consume that prepared representation without repeating JSON decoding.- Storage reads return a contiguous
ReadEventBatchwith scalar positions andtime.Timetimestamps instead of constructing protobuf object graphs. - Embedded reads, catch-up subscriptions, and publisher drains retain the packed representation until data reaches the gRPC boundary.
- Latest-by-criteria requests now use
LatestByCriteriaQuery, and results use a positionally alignedLatestByCriteriaBatchwith an explicitFoundflag. PostgreSQL, SQLite, and FoundationDB all execute this path without protobuf objects.
Publisher and read behavior
- Publisher batches are validated as completely advancing before any event is published, preventing partial publication of an invalid prefix.
- A publisher checkpoint is persisted once after the complete acknowledged batch instead of after every event. Per-boundary
(transaction_id, global_id)ordering and at-least-once delivery semantics are preserved. - Packed event JSON encoding is allocation-bounded.
- Read pages are capped at 10,000 rows at the gRPC boundary; internal drainers continue paging by position.
Breaking Go API changes
EventsSaverimplementations must provideSavePreparedand acceptPreparedEventBatch.EventsRetrieverimplementations must provideGetBatchand use the packed latest-by-criteria query/result types.- Embedded
OrisunServer.GetEventscallers now receiveReadEventBatch. - Embedded
OrisunServer.GetLatestByCriteriacallers now passLatestByCriteriaQueryand receiveLatestByCriteriaBatch. - The former protobuf-shaped backend methods and compatibility fallback are removed.
Compatibility and migration
- The public gRPC/protobuf wire contract is unchanged, so remote Go, Node.js, Java, and other gRPC clients require no protocol migration.
- Existing database data and on-disk formats require no migration for this release.
- Third-party Go storage backends and embedded Go callers must update for the new interfaces and packed value types.
Performance
- SQLite packed reads measured about 12.9 KB and 142 allocations per operation, compared with about 13.1 KB and 203 allocations previously.
- Packed publisher JSON encoding measured about 300-318 ns, 320 B, and one allocation per event, at parity with the protobuf encoder while avoiding protobuf use on internal paths.
Documentation
- Internal architecture documentation now describes the packed representations and transport boundary.
- The documentation site design, navigation, branding, CCC/DCB explanations, backend guidance, and OrisunLabs project links were refreshed.
Full changelog: v0.4.10...v0.5.0
Installation
Linux
# PostgreSQL-only binary
curl -L https://github.com/OrisunLabs/Orisun/releases/download/v0.5.0/orisun-pg-linux-amd64 -o orisun-pg
chmod +x orisun-pg
# SQLite-only binary
curl -L https://github.com/OrisunLabs/Orisun/releases/download/v0.5.0/orisun-sqlite-linux-amd64 -o orisun-sqlite
chmod +x orisun-sqlite
# FoundationDB-only binary (Linux only; requires the FoundationDB
# client library installed: foundationdb-clients 7.3.x)
curl -L https://github.com/OrisunLabs/Orisun/releases/download/v0.5.0/orisun-fdb-linux-amd64 -o orisun-fdb
chmod +x orisun-fdbmacOS
# PostgreSQL-only binary for Apple Silicon
curl -L https://github.com/OrisunLabs/Orisun/releases/download/v0.5.0/orisun-pg-darwin-arm64 -o orisun-pg
chmod +x orisun-pg
# SQLite-only binary for Apple Silicon
curl -L https://github.com/OrisunLabs/Orisun/releases/download/v0.5.0/orisun-sqlite-darwin-arm64 -o orisun-sqlite
chmod +x orisun-sqliteWindows
Download the PostgreSQL-only or SQLite-only binary from the assets below.
Docker
docker pull orexza/orisun:0.5.0-pg
docker pull orexza/orisun:0.5.0-sqlite
docker pull orexza/orisun:0.5.0-fdbChannel tags are also available: pg, sqlite, and fdb.