Interactive demos
Everything below runs entirely in your browser — no server. The forecasting code is a faithful JavaScript port of the Python package, verified to agree to 1e-6 by the parity suite.
Live JavaScript forecasting race →
Race the actual skaters JS port against the npm forecasting
ecosystem — arima and @bsull/augurs (ETS), plus
classical baselines — on 150 real FRED series, live in your browser. A
whole-universe win-rate sweep, a single-series drill-down, and a
run-forever tournament that keeps drawing random series and charts each
method's win-rate against its compute cost relative to laplace.
Forecasting playground →
Pick a policy and a data regime; watch the one-step-ahead forecast and its uncertainty band update live, with rolling log-likelihood and coverage. Native JavaScript — instant and offline.
Running normalization →
One ugly stream, two normalizers. A rolling z-score smears, fattens, and
scars; laplace's calibration state turns the same points into
the same N(0,1) bell every time — and anything with |z| > 4 earned it.
The Rosenblatt bijection →
The commutative diagram, computed live: upstairs the raw series trends, cycles and bursts; downstairs its image under z = Φ−1(Ft(y)) stays in the same ±1.96 band. The forecast fan upstairs is the image of a flat band downstairs — the map does the work.
Running in Pyodide →
The actual Python package, compiled to WebAssembly, running unmodified in
the browser. Proof that what you pip install runs client-side.
Robustness explorer →
Slice the non-price benchmark any way you like — at random, by category,
frequency, stickiness, or martingality — and watch laplace's
per-series win-rate hold, with a live bootstrap band.
Use the port yourself
The JavaScript port is a zero-dependency ES module. Drop it into any page:
<script type="module">
import { laplace } from "https://skaters.microprediction.org/js/skaters/index.mjs";
const f = laplace(1);
let state = null;
for (const y of observations) {
const [dists, st] = f(y, state); state = st;
dists[0].mean; // point forecast
dists[0].std; // uncertainty
dists[0].quantile(0.975); // 97.5th percentile
}
</script>