Deployment shape

What you actually have to run

If you have Kafka and a job that fits on one machine, these are your real alternatives. The table is deployment shape only, because that is what you can verify yourself. Delivery guarantees are each vendor's to state, and ours is the harness that proves it.

UbikKafka StreamsProtonFlink
What you runone process, or a library inside yoursa library inside your JVM appa servera JobManager and TaskManagers
Query languageSQLJava or KotlinSQLSQL or Java
Where window state livesone local fileRocksDB, plus a changelog topic in your brokerserver-localRocksDB, plus a checkpoint store
Embed in your own processyes, C ABI, any languageJVM onlynono
Runtime dependencieslibc and libstdc++a JVMa servera JVM and a cluster
Limits, up front

What Ubik is not

Not a Flink replacement at hyperscale

Above a few million events/s sustained, state beyond one machine’s NVMe, or hot-state sub-second failover, that is Flink territory, and the docs say so plainly.

Not a message broker

It reads and writes logs, it never becomes the log of record. You bring the durable Kafka-shaped thing upstream. Rebuilding one is out of scope.

Not append-and-correct

Windows close on the watermark and emit once. No retractions, no stream-stream joins, no Protobuf yet. Those are year-two scope, and they will disqualify some workloads.

Not a distributed system

No distributed code path will ever land in the core. A second machine would make it the thing it replaces.