KQ-951 · LATENCY/HIST

Latency Histogram

A distribution of response times whose bars scale up from their baselines on glide in a cascade sweep, so a new window re-shapes the same bars rather than mounting a new chart. The p50, p95 and p99 marks stand on the same axis and slide to their places on snap; pressing a percentile chip pins it, washing the plot to the mark and dropping every bar past it to the hairline. The bars are a roving-tabindex list of buttons where Left and Right step, Home and End jump, and Enter or Space latches a bucket's reading.

KQ-951 · LATENCY/HIST
ledger-api · last 15 min4,180 req

p95 0 ms · 15 min · 4,180 requests

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/latency-hist

Props

buckets
LatencyBucket[]
default —
Ordered buckets of { from, to, count }; the last may leave `to` off to run open-ended.
pinned / defaultPinned
"p50" | "p95" | "p99" | null
default null
Controlled or initial pinned percentile.
onPinnedChange
(pinned: Percentile | null) => void
default —
Fires from the press or key that pinned or released a percentile.
onPercentilesChange
(marks: PercentileMarks) => void
default —
The computed p50, p95 and p99 — a reading, so it also fires on the first commit.
onBucketChange
(bucket: BucketReading | null) => void
default —
The bucket under pointer or focus; also fires on the first commit.
unit
string
default "ms"
Printed after every latency figure.
unitLong
string
default "milliseconds"
The same unit spoken in full, so every accessible name is a sentence.
windowLabel
string
default —
The window these buckets cover, printed in the header.
label
string
default "Latency"
Names the chart and its bar list.
height
number
default 96
Plot height in px; the width is fluid.