@quirelabs/rastra
v0.1.0
Published
An image toolkit for the browser: native decoders first, wasm only where the platform cannot.
Maintainers
Readme
rastra
An image toolkit for the browser. Native decoders first, wasm only where the platform cannot.
Status: 0.1, early. The API is frozen for 0.1 but not stable across 0.x.
Install
npm install rastraUse
import { selectEncoder } from 'rastra';
import { probeCapabilities } from 'rastra/capability';
const report = await probeCapabilities();
const choice = selectEncoder('avif', report);
if (choice.available) {
const bytes = await choice.encoder.encode({ data, width, height }, { quality: 70 });
}choice.via is platform where the browser does the work and downloads
nothing, or artifact where a wasm codec is fetched. choice.downloadBytes
says what that costs before you commit to it. When it is not available you get
what is missing rather than a failure later.
Serving the artifacts
Wasm codecs are separate files, served by your app with immutable caching:
import { setArtifactBase } from 'rastra';
setArtifactBase('/rastra/');Copy node_modules/rastra/vendor/ to that path. Each artifact records its
upstream source, version, licence and a hash per file in its artifact.json,
and ARTIFACTS exposes the same records for generating a licence page.
Verifying it yourself
The capability report is built by decoding real fixtures and reading encoder output back, not by feature sniffing. Those fixtures are published, so you can re-run the same verification in your own browser:
import { FIXTURE_LOADERS, fixtureBytes } from 'rastra/fixtures';Per-browser measurements from our own runs live in measurements/ in the
repository, with the browser versions and dates they were taken.
Licence
MIT for the toolkit. Vendored codecs keep their own licences, recorded per artifact: Apache-2.0 for libavif, LGPL-3.0 for libheif. No GPL is shipped.
