Build1 distinct publisher3 min readPublished
At one million points the Rust build tied its JavaScript fallback, so the author went looking for the measurement behind "WASM adds another 5-10x on top" before shipping, and found there was none.
The Engineer · Build desk
build
A default that is not a guard: tinycolor2's palette functions never return on analogous(-1)1 distinct publisher
build
A Tauri plugin puts the backend in JavaScript, and moves where Rust becomes unavoidable1 distinct publisher
build
Eleven agent sessions on one machine settled CPU contention by writing to each other1 distinct publisher
build
Claude Code walks the whole process table to inherit one shell's environment1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
The null result has a mundane mechanism, and the author names it. LTTB's inner loop is an argmax: it compares an area against a running maximum on every candidate point, and the stats kernel skips non-finite values while tracking min and max, also per element [13]. Neither loop autovectorized in these builds, and there are no hand-written SIMD intrinsics in the Rust to force the issue [14]. The flag granted a permission the code could not use. That is also why the doc comment in `stats.rs` describing a "SIMD pre-scan" was removed rather than reworded: it described code that does not exist [15].
Note the instrument order. Identical bytes cannot run at different speeds, so hashing two builds answers "is this flag doing anything" more cleanly than a stopwatch does, and it answers it before anyone argues about variance. The timings came second and agreed at every size [10].
Then the copy. The surviving comparison is 1.72ms against 55.52ms [3], which divides out to 32.3x [1] and backs the advertised 32x [1]. Compound that with the claimed extra 5-10x from WASM and the launch page was promising 160x to 320x over the npm package [2].
The parity figure transfers only under conditions the harness states. You would have to be calling raw WASM exports directly, since marshalling was deliberately kept out of the comparison, on an engine like Node v24.14.1 on darwin/arm64, with absolutes read as approximate and only the ratios trusted [11]. You would also have to be running one of these kernels. The author is explicit that which backend wins is algorithm- and engine-dependent, and that the finding covers these specific kernels rather than settling WASM versus JS for the library as a whole [19].
The subplot belongs in a postmortem template. The shipped binaries had never been through `wasm-opt`, because the build script invoked it only when binaryen happened to be installed, and it wasn't, for the project's entire life [16]. A step gated on a missing tool never runs at all. Fixing it so that it now fails loudly bought a 10-12% smaller binary and no speed: LTTB measured 1.05-1.10x, marginally slower, and stats 1.00x [17]. The fix itself was minor; disclosing plainly that it changed nothing at runtime is the more useful piece of craft here.
ADR 0002 keeps `+simd128` anyway, on the grounds that it is harmless and occasionally shrinks a binary [18]. That is the correct disposition for a flag whose cost is zero and whose benefit is unproven. Softening the claim was equally available: "up to 5-10x on some workloads" would have survived contact with this control run and stayed unfalsifiable indefinitely. Deleting it instead leaves the repo's claim set mapping one-to-one onto its result files, which is the only property that makes a vendor's benchmark table worth opening. For a library whose backend is explicitly selectable [6], I think that is the right trade, because the person choosing a backend is the person who needs the number, and dispatch is still availability-based pending further investigation [20].
Ranked by verification strength, evidence, and original report placement.
vizcrush's pre-launch copy claimed the JS core beats the most popular npm downsampling package by 32x, "and WASM adds another 5-10x on top."
The repo's own benchmark control run showed wasm/js at approximately 1.00x on one million points, same algorithm, same machine: parity.
The 32x JS comparison has a result file behind it: 1.72ms against 55.52ms.
The claimed additional 5-10x from WASM had nothing behind it, and the repo's own control run contradicted it.
The author set the policy that before anything shipped, every performance claim would either get a measurement behind it or get deleted; three beliefs did not survive, and each got a public retraction written up as an ADR in the repo.
vizcrush is a set of data primitives for browser visualization (downsampling, binning, spatial indexing, streaming sketches) written in Rust and compiled to WebAssembly, with a pure-JS core behind the same API as a fallback and an explicitly selectable backend.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific, falsifiable, entirely self-reported
The tests this story rests on are unusually cheap for a reader to repeat — two builds, one SHA-256 comparison, a result file holding 1.72ms against 55.52ms — and the method is spelled out down to the Node build and codegen settings. What is missing is anyone else. Every artefact lives in the author's own repo, nobody outside has rebuilt or re-timed a thing, and that sits on top of the gaps he names himself: one machine, no power-state control, no p10/p90 bands, no allocation counts.
Publication day, no users yet
Eleven packages on npm and a public repo is the whole of the footprint. No dependents, download counts, integrations or third-party benchmarks appear anywhere in this reporting, and the benchmark activity that does exist is the author measuring his own kernels. The cross-engine run is a genuine external-facing data point about real browsers, not about anyone using the library.
Copy trimmed below the evidence
The arrow points the unusual way. Marketing that would have implied a 160x to 320x advantage was cut to the single factor with a file behind it, the SIMD story was retracted rather than softened, and the scope note refuses the library-wide WASM-versus-JS verdict the numbers could easily have been spun into. Residual overstatement is small but real: 32x still rests on one case against one unnamed npm package, and "three beliefs died" is a narrative no reader can audit.
Launch post that sells by confessing
This is promotional writing with an install command in it, and the confession is part of the product: publishing your own retractions is the most persuasive move available to an unknown solo library. That does not make the numbers wrong, it makes them uncontested — the author chose which beliefs to kill, which timings to show and how to frame a Firefox result that argues against his own default backend, and no adversarial reader has been through the repo yet.
Coherent single account, nothing corroborated
Internal consistency is high and the mechanisms hang together — identical binaries, identical timings, branchy loops, memory-bandwidth-bound kernels all tell one story. But a single self-published source, one machine and one Node build cap how far this can be trusted, and the parts that matter most commercially, whether the library helps anyone in production, are not addressed at all.