lgoyal6 / tickvault · book viewer

tickvault.

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.

venues
6 five validation schemes
tests
310 plus 3 live gates
exactness
1e-9 integers, never floats
verified
5 of 6 the sixth says so
Figure 1

The book at an instant

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.

Loading the engine
mid
-
spread
-
levels held
-
messages applied
-
received at
-
book digest
-

What the chart is showing

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.

height
What a sweep would cost.Everything resting up to that price.
the gap in the middle
The spread.Best bid to best ask, nothing resting between.
solid against dashed
Bids against asks.Separable without seeing colour.
Figure 2

Where the data is good, and where it is not

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.

Loading coverage
clean: checked and passed suspect: the recorder could not vouch for it unverifiable: the venue publishes nothing to check against absent: nothing recorded

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.

worst row
Bitstamp, 0% verifiedIts aggregated feed publishes nothing to check against.
what the red means
A socket that went quiet.Our bug, up to an hour, found by this grid.
fixed, not hidden
An idle timeout, and two tests.The holes stay on the chart.
Figure 3

What you just saw

Every behaviour on this page comes from the library, not from the page. These are the parts doing the work.