Generated performance evidence

Web codec and scientific reader benchmarks.

Results stay separated by workload class. A timing is admitted only after dimensions, selection, sample or pixel hashes, output validation, and any required quality oracle pass. Unsupported and invalid rows never count as fast.

Isolated processesAbsolute peak RSSPinned fixturesGenerated claims

Speed, quality, and peak memory.

The 2026-08-24 profile recorded 122 validated passes and 25 explicit unsupported rows across TypeScript, explicitly registered PureJsImage WASM, other pure JavaScript libraries, jSquash WebAssembly, and Sharp/libvips.

84.7%less peak RSS than Jimp
181.8 MiBPureJsImage northstar RSS
122validated result rows
0invalid outputs or errors

The memory headline is the same 24-megapixel northstar photo workflow within one result and one environment fingerprint: 181.8 MiBfor the TypeScript path versus 1189.1 MiB for Jimp. It is not a cross-date comparison.

JPEGPNGWebPTIFFAVIF

This suite measures JPEG, PNG, WebP, TIFF, and AVIF. It does not represent every stable PureJsImage codec.

Recorded web codec engines

EngineVersionClass
purejsimage0.16.0 (workspace)pure-javascript
purejsimage-wasm0.16.0 (workspace WASM)webassembly
jimp1.6.0pure-javascript
sharp0.35.3native
sharp-single-thread0.35.3native-single-thread
image-js1.7.0pure-javascript
jsquashavif 2.1.1; jpeg 1.6.0; png 3.1.1; webp 1.5.0; resize 2.1.1webassembly

Current web codec benchmark report →

First usable data, selected operations, source I/O, and footprint.

The 2026-08-16 PureJsImage baseline validated 43/43 workloads across 33 explicit readers. The competitor charts use only shared workloads with validated output; every published workload includes a PureJsImage row plus at least one external engine. The 2026-08-17 scaling profile admitted 6/13 PureJsImage medium/large rows under the 10% CV threshold. Unsupported semantics remain visible in chart notes and report status counts.

Environment boundary. Ordinary and scientific reports use separately fingerprinted harnesses. No cross-section speed or memory ratio is claimed.
Measured noise remains visible. Rows at or above 10% coefficient of variation are labeled directly in the timing charts and are not used as documentation headlines. See the generated JSON for the exact engine, workload, metric, and CV.

Scientific metric contract

MetricInterpretation
Time to first usable blockLatency until validated selected data becomes available after open and initialization.
Selected-operation wall timeComplete public operation path for the pinned selection; validation remains outside timing.
Absolute peak RSSWhole isolated process, including runtime, native allocations, and WASM memory.
Source requests and bytesInstrumented request count, returned bytes, unique bytes, and overfetch for the selected operation.
Import and initializationModule import, registry construction, and WASM initialization remain separate from steady-state work.
Bundle and WASM footprintgzip/Brotli JavaScript, external or embedded WASM, installed bytes, and package count.
CorrectnessExpected shape, native sample type, selected-sample hash, calibration assertions, and output bytes.

Scientific JS/WASM engine versions

EngineVersionClass
purejsimage0.10.0pure-javascript
geotiff3.0.5pure-javascript
tiff7.1.3pure-javascript
utif24.1.0pure-javascript
image-js1.7.0pure-javascript
nifti-reader-js0.8.0pure-javascript
npyjs1.2.0pure-javascript
jsfive0.4.0pure-javascript
h5wasm0.10.3webassembly
itk-wasm-image-io1.6.1webassembly

PureJsImage scientific baseline → · PureJsImage medium/large scaling report → · Scientific JS/WASM report → · Scientific reader tables → · Scientific format reference →

Entry points, installed packages, and WASM assets.

Minified JavaScript uses one deterministic esbuild configuration. npm package values are extracted installed bytes, not compressed tarball downloads. Native and WASM payloads are labeled separately from JavaScript wrappers.

PureJsImage major entries

EntryImportMinifiedgzipBrotliInstalled
Core API initial chunkpurejsimage19.5 KiB6.6 KiB5.9 KiB7.9 MiB
Core + scientific platformpurejsimage/scientific197.5 KiB56.3 KiB47.4 KiB7.9 MiB
Scientific readers: allpurejsimage/scientific/readers/all1242.8 KiB359.4 KiB286.7 KiB7.9 MiB
Core + common web codecspurejsimage/codecs/web651.5 KiB238.7 KiB198.2 KiB7.9 MiB
Core + all stable codecspurejsimage/codecs/all1198.2 KiB414.4 KiB334.0 KiB7.9 MiB

Package footprint context

The PureJsImage common-web entry is measured above. The competitor table preserves the historical JPEG/PNG-matched package targets so adding AVIF does not silently redefine the older footprint comparison; each common-web benchmark report records the exact installed engine package set it used.

Engine importImplementationMinified JSInstalledProduction packages
PureJsImage (matched)pure-javascript204.3 KiB7.9 MiB1
PureJsImage (all stable codecs)pure-javascript1198.2 KiB7.9 MiB1
Jimppure-javascript577.4 KiB29.3 MiB70
image-jspure-javascript361.5 KiB17.0 MiB46
jSquashwebassembly52.4 KiB1.0 MiB3
Sharp JS wrappernative-wrapper128.4 KiB18.9 MiB6

Optional PureJsImage WASM assets

AssetRawgzipBrotli
JPEG decoder WASM31.0 KiB7.7 KiB6.5 KiB
JPEG decoder SIMD WASM30.8 KiB7.8 KiB6.6 KiB
JPEG encoder WASM37.1 KiB6.5 KiB5.3 KiB
JPEG encoder SIMD WASM45.2 KiB8.8 KiB7.1 KiB
PNG codec WASM3.8 KiB1.6 KiB1.4 KiB
PNG codec SIMD WASM7.1 KiB2.9 KiB2.5 KiB
WebP codec WASM9.1 KiB3.7 KiB3.2 KiB
WebP codec SIMD WASM11.6 KiB4.6 KiB3.9 KiB

AWS Lambda measurements remain separately dated.

The August 9, 2026 Lambda reports remain useful for x86_64/ARM64, cold/warm, memory-tier, and explicit JPEG WASM context. They are historical deployment snapshots, not merged into the current local headline or scientific-reader charts.

ARM and explicit WASM report →· Memory-tier report →

Reproduce and interpret the evidence.

  • Input bytes and fixture hashes are pinned before measurement.
  • Measured samples run in isolated processes after configured untimed warmups.
  • Output validation and independent quality measurement remain outside timed regions.
  • Web codec resize charts use engine-default kernels and are default-experience comparisons.
  • Scientific charts compare only shared operations; they do not create an all-format winner score.
  • Different environment fingerprints are not compared without an explicit disclaimer.
npm run fixtures:prepare
npm run fixtures:verify
npm run bench:web-codecs
npm run bench:web-codecs:charts
npm run bench:scientific:baseline
npm run bench:scientific:range
npm run bench:scientific:scaling
npm run bench:scientific:competitors:js
npm run bench:scientific:competitors:baseline
npm run bench:viewers:smoke
npm run documentation:write
npm run documentation:check

Complete benchmark methodology →· Generated result index →