Order to confirmation

Timed from order submit to the order appearing on the venue's own account feed, not to an acknowledgement of receipt: confirmation is the point the order is live in the book and can be filled.

Order → Confirmation

Updated

3-day windowLower is better

Each mark = one measured order20× slow motion

Order-to-confirmation latency by endpoint: median and number of measured orders.
EndpointMedian latencyOrders measured
Bullet (direct)8.2ms mediann=4,315
Lighter9.6ms mediann=4,317
Nado10.2ms mediann=4,320
Pacifica15.8ms mediann=4,319
Bullet (via Cloudflare)19.6ms mediann=4,315
Aster107ms mediann=2,167
Hyperliquid410ms mediann=4,086

Tail latency

Lower is better

100 MSBullet (direct)89.9 msp50p99p99.9slowestLighter200 msNado4,183 msPacifica228 msBullet (via Cloudflare)86.9 msAster349 msHyperliquid1,110 ms10ms25ms50ms100ms250ms500ms1s2s

Log scaleDashed past p99.9 = slowest order in 1,000

Tail latency by endpoint: measured orders, median, 99th percentile, 99.9th percentile, slowest measured order, and the number of orders slower than 100, 250, 500 milliseconds.
EndpointOrdersp50p99p99.9SlowestOver 100 msOver 250 msOver 500 ms
Bullet (direct)4,3158.2 ms12.6 ms31.4 ms89.9 ms000
Lighter4,3179.6 ms18.9 ms98.2 ms200 ms300
Nado4,32010.2 ms392 ms2,476 ms4,183 ms1317035
Pacifica4,31915.8 ms26.8 ms47.4 ms228 ms100
Bullet (via Cloudflare)4,31519.6 ms38.7 ms64.3 ms86.9 ms000
Aster2,167107 ms209 ms259 ms349 ms1,51750
Hyperliquid4,086410 ms781 ms991 ms1,110 ms4,0864,086567

Quoting means cancelling: every time the price moves, the order resting at the old one has to go. Cancels carry the same tail as orders, so one cancel in a hundred takes at least your p99 to land. Until it lands, your stale quote is still resting where the fastest taker on the other side can lift it. That is latency arbitrage, and it is paid out of your PnL.

The length of each exposure is set by p99, not p50. The frequency is set by your quote rate. Per $1M quoted, one basis point of adverse selection is $100. At 100 orders a second you settle that bill once a second.

What is measured

Window
72 hours to 2026-09-07 18:09 UTC · 27,839 orders · 7 endpoints
Timed
One interval per order: submit to account-feed confirmation. The cancel that follows is not in it, and neither is signing. No network-floor subtraction, no speed-bump adjustment.
Source
api.mainnet.bullet.xyz/latency
Harness
One m8gd.2xlarge in ap-northeast-1d. One client, one clock, identical for every endpoint.
Orders
One order per measurement, one measurement a minute per endpoint, submitted singly and cancelled once it confirms. Post-only, so it rests or is rejected and never trades. Batch submissions are excluded.
Transport
One WebSocket per endpoint, held open across measurements. No order opens a connection, so no figure here includes a TCP or TLS handshake. What is timed is the venue and the round trip.
Endpoints
Bullet (direct) hits our trading API load balancer with nothing in front of it. Bullet (via Cloudflare) is the same engine behind Cloudflare, which is there to absorb abuse and charges latency and a good deal of jitter for it, so market makers take the direct path.
Volleys
A display grouping on the track. Orders do not arrive synchronised across venues.
Cancels
Measured separately by the same collector and not shown here: a long order tail means a long cancel tail.
Prior art
Inspired by Check the Chain's benchmark. Ours is written from scratch in Rust, so no garbage collector can pause the harness in the middle of a measurement.