There is no good free source of full-depth crypto order book history. Everything free is top of book, resampled to bars, or carries undocumented gaps that quietly poison a backtest. tickvault records six venues into Parquet and publishes the gap statistics on the front page.
Below is that archive, rebuilt in your tab. The engine doing the rebuilding is the same Rust the recorder runs, compiled to WebAssembly. Nothing here is a recording of a demo.
An order book is the queue of unfilled orders at each price. Buyers wait on the left, sellers on the right, and the gap between the best of each is the spread. Drag the scrubber and the book rebuilds from the archive, message by message.
Height is cumulative quantity: at any price, how much would trade if you swept the book to there. The staircase rises away from the middle because orders pile up further from the current price, so a wall on one side is a lot of size waiting. That shape is what microstructure work is usually about.
Prices are exact integers counting billionths, all the way from the venue's wire format to this canvas. Nothing is rounded until it is drawn.
Every free dataset has holes. This one says where. Each cell is one interval of one venue, coloured by what the recorder could actually prove about it, and the grid is generated by the same code path as the published gap report.
The striped row is Bitstamp, and it is the reason this project exists. Its aggregated feed carries no sequence number, no update id and no checksum, so a dropped message on it cannot be detected by any means. It reads 0% verified rather than being rounded up to look like the others. Recorded order-by-order instead, the same venue becomes the best validated of the six, because every event there names its predecessor.
The red blocks are our fault, not the venues'. Three feeds stopped sending without closing the connection, so the socket stayed open and the recorder sat at zero CPU writing nothing. On Bitstamp that lasted an hour. It is the one failure this project could not previously see: every other fault ends up in the gap report, while a silent socket produces an archive with no rows and a report with nothing to say, so a lost feed reads as a quiet market.
This grid is how it was found, which is the argument for publishing one. There is now an idle timeout that reconnects and records the silence as downtime, and two tests that fail without it. The holes stay on the chart rather than being re-recorded away, because a coverage grid that only ever shows good days is not evidence of anything.
Every behaviour on this page comes from the library, not from the page. These are the parts doing the work.