Skip to content

Comparable SDKs

Integrators arriving from peer real-time market-data SDKs find the same concepts under different names. This page is the one place in the documentation where peer products are named explicitly — the rest of the site describes the Kairos API on its own terms.

Client + session vocabulary

Kairosdatabento-rsBloomberg BLPAPIRefinitiv RTSDK
Client::connect((email, password))historical::Client::builder() / live::Client::builder()Session::openOmmConsumer::create
client.live() (live namespace)live::ClientSession::subscribe(...)OmmConsumer::registerClient
client.historical(start, end) (preview)historical::ClientSession::sendRequest(...)OmmConsumer::sendRequest
client.replay() (preview)— (no first-class replay)recorded-feed playbackrecorded-feed playback

databento-rs splits the client; Kairos keeps a single Client and namespaces the bounded historical / replay paths via the historical(start, end) and replay() accessors with one shared engine link behind them. See the historical surface for the rationale.

Subscribe / query vocabulary

Kairosdatabento-rsBLPAPIRTSDK
client.live().<analytic>([...]).on_event(cb)live::Client::subscribe(...)Session::subscribe(SubscriptionList)OmmConsumer::registerClient(ReqMsg)
client.historical(start, end).<analytic>([...]).on_event(cb)historical::timeseries::get_range(...)Session::sendRequest(HistoricalDataRequest)OmmConsumer::sendRequest(HistoricalRequest)
client.replay().<analytic>([...]).on_event(cb)recorded-feed playbackrecorded-feed playback

.on_event is the terminal verb in every mode — it registers a typed callback that fires per emission and returns an EventSubscription handle. The distinction between the modes is lifetime, not the verb: a live subscription runs until unsubscribe(); a bounded historical / replay subscription ends after the last row. See the bounded-termination contract.

Output channel vocabulary

Kairosdatabento-rsBLPAPIRTSDK
.on_event(cb) typed callbackdbn::Stream<dbn::RecordRef>EventQueue / Event::Iterator<Message>OmmConsumerClient::onRefreshMsg / onUpdateMsg callbacks
Live overflow ends the subscription; the handle goes inactivedbn::LagSubscriptionFailureOmmState::Suspect

Every analytic delivers its output through .on_event. Where the peer frameworks split between a poll queue and a callback interface, Kairos surfaces one path — the typed callback fires per emission, closest in shape to the RTSDK onUpdateMsg consumer callback.

Backpressure semantics

FrameworkLiveHistorical / Replay
KairosDrop-oldest on the live feed; a consumer that overflows the buffer ends its subscription.Block the producer.
databento-rsDrop with dbn::Lag notification.Stream-paced; no producer blocking exposed.
BLPAPISubscriptionFailure event on slow consumer.Request / response — no streaming backpressure.
RTSDKOmmState::Suspect on slow consumer.Snapshot mode is non-streaming.

See the backpressure contract.

Recorded-replay vocabulary

Kairosdatabento-rsBLPAPIRTSDK
Engine-staged dataset, driven through client.replay() (preview)dbn::Decoder::from_path(...)recorded-feed playbackrecorded-feed playback
Parquet schema documented under tick parquet schemadbn::Decoder::from_file(...) (compressed)proprietary recording formatproprietary recording format

The Kairos Parquet schema is defined in the tick parquet schema — Apache Arrow / Parquet (the canonical institutional file format), with the upstream-supported Rust implementations.

Concepts that have no direct peer

  • Replay parity. Every analytic emits bit-identical output across live, historical, and replay modes. databento-rs records and replays raw wire data; the typed-analytic equivalent does not exist in the peer products.
  • Deterministic ordering across live, historical, and replay modes. Every analytic sees ticks in source-data event-time order on every mode; replay over a captured dataset reproduces live-mode output byte-for-byte. BLPAPI's library-managed I/O thread is the institutional precedent for the single-ownership runtime that enables this guarantee.

Proprietary. All rights reserved.