Skip to content

Versioning and support

distillate follows Semantic Versioning.

  • Pre-1.0 (0.x): the public API may change in a minor release. Breaking changes bump the minor (0.1.x -> 0.2.0); patches stay backward compatible. Pin a version if you depend on it.
  • Post-1.0: breaking changes bump the major, additive changes the minor, fixes the patch.

The public API is exactly what the committed API reports in etc/ describe (one per entry point, generated by API Extractor). Any change to an exported signature changes those reports, and CI fails until they are regenerated (pnpm api:report), so no breaking change ships unreviewed. Anything not in a report (internal modules, the shared chunk) is not part of the contract and can change at any time.

toBytes / fromBytes use a versioned binary format. A filter serialized by one release must deserialize in later releases of the same major; a format change that breaks this is treated as a breaking change. See serialization.

distillate targets ES2022, ships zero runtime dependencies, and uses no eval or required WASM, so it runs on every modern JavaScript runtime:

  • Node.js 22, 24 (active LTS and current)
  • Bun and Deno
  • Browsers and Cloudflare / Vercel edge

Every push runs a CI smoke matrix that imports the built package on Node 22/24, Bun, and Deno, so this support is verified, not assumed.

The supported Node range tracks active and current LTS lines. Dropping an end-of-life Node major is not considered a breaking change and may happen in a minor release; it will be called out in the changelog.