Overview
The Stints widget (registry idstints, built by StintViewer) draws one column per driver, with every completed lap as a block on a shared time axis. Reach for it to read a session’s stop pattern at a glance: how long each stint ran, which compound was fitted, and exactly when a driver was in the pits.
A pit stop is never drawn as its own block. It shows up as the natural gap between two laps in a column, because the driver’s next lap started later than the previous one ended.
What It Shows

The axis is a fixed pixel scale, not a percentage of the visible span, so a lap’s height always means the same duration however far the viewer has scrolled.
Your scroll position is yours. There is no follow mode: nothing moves the viewer just because new data arrived, a compound was edited, or the playhead moved. The one exception is not following either, it is compensating when the span’s own start shifts, so the laps already on screen stay where they were rather than jumping a frame.
Flag bands are drawn in severity order (yellow, then SC, then VSC, then red last) so an overlapping red or SC period is never hidden underneath a less severe one. In qualifying, every segment’s green flag gets its own labelled line (Q1/Q2/Q3, or SQ1/SQ2/SQ3 on a sprint weekend); in a race, only the true start gets one, so safety-car restarts do not each add a line.
A Raw / Fuel corr toggle above the viewer swaps which lap-time basis sizes the blocks, the same toggle shared with Lap Times, the Laps table and Stint Lap Times.

Data Behind It
Stints is entirely client-derived: there is no insight metric ormodel_id/model_version behind it. screens/derive.ts’s buildStintColumns (blocks), buildStintFlags (overlay) and buildStintAxisLaps (lap-number ticks) are pure functions of the hydrated session state and the playhead cutoff.
- REST hydration:
GET /v1/sessions/{session_key}/lapsandGET /v1/sessions/{session_key}/stints, both offset-paged row endpoints.SessionController.enterreads both in parallel with the other row endpoints, and the same rehydrate path re-reads them on a WS reconnect or aseek. - Live updates: the
lapsWS channel. Stint rows carry no channel of their own on the wire; they are synthesised through the sametiming-channel envelope reducer as pit rows, keyed off the presence of astint_numberfield. - Compound source: the tyre for a lap comes from the
stintstable (compoundForLap), matched to the lap by lap number, not from the lap row itself. A manual override for that stint wins over the wire’s own value and is marked as edited. - Deleted laps: identified from race control’s own message text, following the same rule the server metric uses, and struck through rather than removed.
- Clocks: the time-of-day axis renders the session’s circuit-local time from its
gmt_offset, falling back to the browser’s local time only when the session carries no usable offset. - Live and replay envelopes are wire-identical; the widget never branches on envelope
source.
States
FAQ
Why is a block drawn in plain grey instead of a tyre colour?
Why is a block drawn in plain grey instead of a tyre colour?
The compound for that lap is missing at source. This happens for a minority of sessions in the stint data and is an honest “unknown”, not a rendering bug.
Why did a lap suddenly appear with a large gap before it?
Why did a lap suddenly appear with a large gap before it?
That gap is the pit stop. A pit-out lap is positioned against the next lap’s start rather than its own duration, because a pit-out lap’s recorded duration on the live feed includes the whole pit and garage sit.
Next Steps
Tyre Strategy
The same stints as compact per-driver bars on one lap axis.
Lap Times
The pace behind each stint block, driver by driver.
Stints Table
The same stints as sortable, filterable rows.
Pit Window
Judge a stop against the cars around the selected driver.
