Backtest on the archive. Deploy on the wire.
Low-latency order flow and book microstructure live, with a matching-schema archive deep enough to backtest against.
The parts you keep working around.
Backtests built on candles or sampled trades diverge from production the moment queue position matters.
Most feeds stop at L2: no order-level book, no way to reconstruct state at a given block.
Maintaining one pipeline for history and another for live doubles the schema-drift surface.
How the platform answers, point by point.
Candle-grade backtests
Full L4 order-by-order book plus every book delta, live and archived
No state reconstruction
Raw book diffs in strict block order, so you can rebuild the exact book at any height
Two pipelines, two schemas
The archive shares the stream schema: backtest on history, deploy on live, zero remapping
Delivery you can measure, a schema that doesn't fork.
Stream delivery percentiles are published unedited. Degraded windows stay on the chart. Below them, the same fill shown twice: an archive row and a live message, byte for byte.
Stream delivery overheadp50 / p95 / p99 · ms · log scale
Worst window in range: p99 114.09 ms (16:00). Percentiles are published unedited, and degraded windows stay on the chart. Illustrative series in the published-benchmark format.
Archive row · trades dataset
query API · Parquet / CSV / JSONL exports
Live message · StreamSwaps
stream.hyperliquidrpc.com:443 · gRPC
Hover a field. It is the same field, byte for byte, on both sides. Backtest on the archive, deploy on the stream, change nothing.
The L4 book, subscribed.
Snapshot first, then per-block diffs in strict block order. Prices and sizes arrive as exact decimal strings, so the parser you backtest with is the parser you ship.
Read the docsimport grpc channel = grpc.secure_channel( "stream.hyperliquidrpc.com:443", grpc.ssl_channel_credentials(),)metadata = (("x-api-key", "YOUR_KEY"),) # Full order-by-order book: snapshot, then per-block diffsstub = orderbook_pb2_grpc.OrderBookStreamingStub(channel)for msg in stub.StreamL4Book( orderbook_pb2.L4BookRequest(coin="BTC"), metadata=metadata): handle(msg) # exact decimal strings, no float roundingThe plan that fits.
Ultra
$199/moRecommendedFull archive, replay, and maximum throughput.
Ultra adds replay from any block height and full historical query access: the backtest loop. Desks needing private throughput go Enterprise.
Compare both plansPut the archive under your backtest.
A free key covers evaluation. Pro adds replay from any block height and full historical query access: the backtest loop.