SQL stream processing
The test suite includes 66 end-to-end scripts, including checks against a real broker. See limits and unsupported workloads.
DuckDB SQL
DuckDB parsing, binding, types and scalar functions. Group by TUMBLE, HOP or SESSION for event-time windows.
Three window kinds
TUMBLE fixed, HOP sliding, SESSION gap-based and merging. Event-time, watermark-closed, emitted mid-stream. Late events are counted and reported before they are dropped.
late_dropped and reported, never dropped in silence. --watermark-delay buys the grace before that line.Aggregates that survive a crash
count, sum, avg, min, max, first, last, arg_min, arg_max, string_agg, list, exact quantile and median, approx_count_distinct, approx_quantile. Each one checkpointable and bounded in memory, or refused at plan time rather than mis-saved.
Lookup joins, including ASOF
Enrich a stream against a bounded file, a host Arrow or pandas table, or a live Kafka changelog, with the versioned ASOF pick. Checkpoint-safe and parallel-safe, proven against a DuckDB JOIN oracle across SIGKILL cycles.
Stream-stream joins
INNER and LEFT joins on an equality key and bounded time interval. Join state spills to disk and shares a checkpoint with downstream aggregates and lookups. Unbounded stream-stream joins are rejected.
Idle partitions
A configurable timeout excludes idle partitions from the watermark minimum, allowing windows to close. Exclusions are checkpointed and reported.
Disk spill
Aggregate state spills to NVMe past a memory budget, so state larger than memory does not OOM. Even a single group larger than RAM sorts, through a bounded external merge, for an exact quantile.
Kafka native, no migration
Source and sink over the Kafka protocol, against the Kafka, Redpanda, WarpStream or MSK you already run. Avro and JSON Schema read from a Confluent Schema Registry, or a local .avsc.
Credentials stay in the environment
TLS and SASL (SCRAM, PLAIN, OAUTHBEARER, mTLS) configured from env vars, proven against a real broker. Nothing sensitive reaches pipeline.json, logs, state or checkpoints. Broker settings the engine owns for correctness are refused, so config cannot silently break exactly-once.
Pipeline supervision
ubik pipeline create, start, stop, list, logs. One detached process per pipeline, resumed from its last checkpoint across a restart. The OS is the supervisor. Every error carries a code, a message and what to do next.