Financial data & trading feeds

High-frequency delivery for price ticks, trade events, and market data. Each publisher's sequence stays in order, and payloads are binary. There is no JSON overhead on paths where milliseconds cost money.

The problem

Financial data moves fast. For price ticks, order book changes, and trade confirmations, each millisecond of latency is a cost. JSON serialization on the delivery path adds overhead at exactly the wrong moment. Out-of-order delivery corrupts order books, and these defects are expensive to debug and dangerous to ignore.

Most WebSocket platforms use JSON as their base. Binary support, if it exists, is a footnote. Per-channel message ordering is frequently an assumption, not a documented behavior.

How Celeris solves it

Celeris is binary-first. It supports MessagePack and Protobuf natively, not as an extra. A compact encoding can make your price tick payload smaller, your parse time shorter, and your bandwidth cost lower. The results depend on your data and your format.

Messages from one publisher arrive in the sequence in which that publisher sent them. Publishers do not share one global order, and reconnect recovery can have gaps or duplicates. Your stored state lets you reconcile the data.

In a measured test, one c8g.large instance moved 96,114 messages per second with a p95 latency of 32 ms. In this test, the transport layer was not the bottleneck.

Connect and publish

const client = createClient({ credentialProvider });
const channel = client.channel("price-feed-btcusd");

const ticks = channel.segment("ticks");
ticks.onMessage((payload) => {
  updateOrderBook(decodeTick(payload)); // your own decoder
});
ticks.subscribe();

await channel.connect();

// Publish a binary-encoded price tick
await ticks.publish({
  payload: encodeTick({ price: 42318.5, volume: 1.24, ts: Date.now() }),
});

The default segment does the broadcast. Use named segments to isolate specified instruments or desks without additional infrastructure.

Relevant features

  • Binary-first messaging: native MessagePack and Protobuf, with no JSON on the delivery path
  • Per-origin ordering: each publisher's sequence inside a channel, with no total order across publishers
  • p95 32ms latency: measured round-trip on a single node, in a 25-minute sustained test
  • BYOD data export (coming soon): tick data flows to your own Kafka or S3 and does not touch your primary database

Your next connection

Make something worth a connection.

Build your next live feature with Celeris.

We use Google cookies for analytics and for advertising measurement, only if you allow them. Until you choose, Google sets no cookies. Refer to our Cookie Policy.