Biomarker charts objective · safety.viz v1.9.0 · 3 October 2026

The safety.viz kit: what changed, and what did not

safety.viz's bundle gained one thing: a frozen list, called kit, of 36 parts its own thirteen charts are already built from. It exists so a second chart library on the same page can build its charts from the same parts instead of copying them. Nothing in safety.viz moved, was renamed or behaves differently.

What was added1 export
Parts in it36
Charts changed0 of 13
Screenshots changed0
On dev3 Oct, 00:56 UTC
Ships inv1.9.0
Decisions for you

Why it exists

How the two libraries meet on a page

One web page

safety.viz bundle

  • The thirteen safety charts, unchanged
  • Its own copy of Chart.js
SafetyViz.kit: 36 parts, the same functions the thirteen charts use, read-only

bio.viz bundle

  • Four biomarker charts (group comparison, scatter, correlation matrix, and the screen in progress)
  • The variable-and-frame core, and the connection to R
  • No Chart.js and nothing of safety.viz inside it

bio.viz's charts look for SafetyViz.kit on the page and build their sidebar, filters, listing, profile rail and canvases from it

What changed in safety.viz, and what did not

Changed

  • A new file, src/kit.js, that gathers the 36 parts and freezes the list.
  • One export line in src/main.js, so the bundle carries kit. The committed bundle differs by that object and nothing else.
  • A kit page in the API reference, listing every part, where it comes from and how to call it.
  • A requirement matrix for the kit, tests named to it, and a line in the v1.9.0 release notes saying the parts are public surface from now on.

Not changed

  • No function moved, was renamed or got a new signature.
  • No chart, settings schema or default changed; all thirteen charts behave as they did.
  • No screenshot in any chart's evidence differs, and every existing evidence record is identical; only kit records were added.
  • Nothing for a safety.viz user to do or notice.

The 36 parts

Grouped by where they live in safety.viz. Each is the very function object safety.viz's charts use; a test fails if any is not.

GroupWhat it is forParts
Drawing engineChart.js 4.5.1, the copy safety.viz already carries, so a page loads one. Bar, line and scatter are registered; anything else is a plugin on it.Chart
The page frameThe sidebar of controls, the chart area, the view switcher and the shared styles every chart sits in.renderShell, controlBuilders, renderViewSelector, applyShellStyles, createElement, option, multiSelect
FiltersThe filter controls and the rules for what a filter lets through, including the reconciling step every chart now calls.reconcileFilters, renderFilterControl, normalizeFilterSpec, initFilterState, filterMatches, ALL_VALUE
Axis limitsThe minimum and maximum inputs for an axis.syncAxisLimits, seedLimitInput, applyLimitEdit, clearAxisLimits, formatLimit, limitDigits
Record listingThe table of participants under a chart: search, sort, pages and a CSV download.renderListing, searchRows, sortRows, paginate, buildCsv, exportCsv
Participant profileThe side panel that opens one participant's results when a row or point is clicked.mountProfileRail, unmountProfileRail, syncProfileRail, resetProfileRail, buildProfileRows
Box drawingHow a box and its whiskers are drawn.drawBoxWhisker, boxWhiskerPlugin
Measure listWhich measures a chart offers, and in what order.resolveMeasureList, presentMeasures
Survival curveThe Kaplan–Meier estimate behind safety.viz's time-to-event curve, for bio.viz's stratified survival chart to draw from rather than reimplement.kmEstimate

Left out on purpose: the two status banners, prototypeBanner and experimentalBanner, because their wording is about safety.viz's own release status.

How it was proven

Two things worth knowing

Rough edges, not blockers

How it got here

  1. 2 October, morningYou agreed that bio.viz borrows safety.viz's parts rather than copying them, and approved the task.
  2. 2 October, afternoonBuilt and verified as a draft, then held unmerged while the v1.8.0 release candidate was open, at your decision ("Build now, merge after v1.8.0 is cut"). bio.viz's first chart was built against the draft meanwhile ("Start now against the draft").
  3. 2 October, 21:41 UTCv1.8.0 shipped. The kit was brought up to dev; reconcileFilters joined; the milestone moved to v1.9.0.
  4. 3 October, 00:45 UTCYou ran the evidence workflow on the branch.
  5. 3 October, 00:56 UTCMerged to dev. It reaches main with v1.9.0, through your review of that release candidate.

Who uses it, and what comes next