demo

This is sci-core.

Scientific charts on the same engine. The tell is the axis: 10ⁿ ticks and the 2–9× grid scientists look for. Log math alone still looks linear.

The furniture10ⁿ ticks
Inputraw values
Proofbytes + math
LicenseAGPL-3.0

sci-core is the scientific module. Scatter, error bars, growth curves, survival, volcano — drawn as SVG, byte for byte, from a JSON spec. No headless browser. It is not matplotlib parity. The named types exist. Boxplot and histogram do not, yet.

What a scientist checks first is the furniture: decade labels in power notation, and minor gridlines bunching toward the top of each decade. That is the product.

Raw values in

Event times and censoring. Fold-changes and p-values. CFU counts. You do not precompute the curve, the −log₁₀, or the fit. Raw numbers go in the spec. The engine computes at render. A missing or non-numeric point fails loud. Nothing is dropped in silence.

Same experiment, same data — the axis is the difference

E. coli growth, 120 → 71,000 CFU/mL over 3 hours. On a linear axis the first hour vanishes. On a log axis every decade is readable.

0 20,000 40,000 60,000 80,000 0 50 100 150 200 Time (min) CFU/mL Linear axis — early growth unreadable SlickFast
10² 10³ 10⁴ 10⁵ 0 50 100 150 200 Time (min) CFU/mL Log axis — every decade readable SlickFast

Error bars on a real log–log

Dose–response. Two compounds. Whiskers are in the spec; the engine draws them on the same 10ⁿ furniture.

10⁻¹ 10⁰ 10¹ 10² 10³ 10⁻¹ 10⁰ 10¹ 10² Dose (µg) Response Compound A Compound B Dose–response (log-log) with error bars SlickFast

Kaplan–Meier in the engine

Raw event times and censoring go in. The estimator, censor ticks, and median annotation are computed at render. The curve is never stored.

0% 25% 50% 75% 100% 0 10 20 30 Control: median = 14 Treated: median not reached Days Survival Control Treated Kaplan–Meier — two arms SlickFast

Volcano — classify in-engine

Fold-changes and raw p-values in. The engine computes −log₁₀(p), draws the thresholds, and colors up / down / not significant.

0 2 4 6 8 -3 -2 -1 0 1 2 3 4 p = 0.05 log₂ fold change −log₁₀ p Not significant (3) Down (2) Up (2) Differential expression (demo set) SlickFast

Reproducible

No clock. No random. Same spec, same SVG bytes, forever. A golden net guards the picture. A statistical harness guards the numbers — Kaplan–Meier, Bland–Altman, probit, Q-Q, −log₁₀(p), the 10ⁿ ticks — against hand-computed references and published constants.

You are reading a Page. Add `.json` to this URL. That file is the recipe. The fingerprint at the bottom must match.

Open source

AGPL-3.0, same as the engine. The license. Closed commercial products buy a commercial license. Local MCP is free.

What exists, what does not

Here: scatter, errorbar, lineplot, barplot, survival, blandaltman, qq, volcano. Trend fits, error bands, residual panels, reference lines, and base-2 axes exist too.

Not here: boxplot and histogram. This is not an open-ended scientific visualization library. Named types, real log axes, raw in, stats in-engine, same spec → same bytes.

fingerprint sha256:a114c4b7479fd945434835f03318c9ccf2792a3e21ed82fad5ff0de25de5647f · verify: add .json to this page's URL