Skip to content

Version compatibility matrix

Copy page

This handbook uses Go/govips as the reference implementation and locks it to a fixed version. The four bindings do not bundle or link the same libvips, so result comparison must not assume byte-for-byte identity.

This page is a snapshot of the current test baseline. For significant releases and feature history across the projects, open the VIPS ecosystem timeline.

Role Component Version Notes
Reference govips v2.19.0 Binds to system libvips 8.17.3
Reference libvips 8.17.3 System install, shared with pyvips and the CLI
Comparison sharp 0.35.5 Bundles its own libvips 8.18.7
Comparison pyvips 3.2.0 Links the system libvips 8.17.3
Comparison vips CLI 8.17.3 Shares the system libvips with the reference

Runtimes checked on Fedora Linux 43 on 2026-10-12: Node.js 24.14.1, Go 1.27.0, and Python 3.14.5. The thumbnail example executed the same day produced the binding and libvips pairs in the table.

sharp ships a prebuilt libvips together with the package. Therefore sharp’s libvips (8.18.7) differs from the system libvips (8.17.3): for the same input and equivalent intent, sharp can legitimately differ from govips/pyvips/CLI in encoding output. Comparison must not assume byte-for-byte identity.

pyvips and the vips CLI link the system libvips 8.17.3, sharing the same library as the reference, so their output is expected to match very closely.

  • The current check covers dimensions, format, bands, and file size. Pixel equality is not a completed claim.
  • In the thumbnail run, all four outputs were 640 × 427 WebP. govips wrote 36,172 bytes, sharp wrote 35,924 bytes, and pyvips and the CLI both wrote 39,228 bytes.
  • That gap stays pending a pixel comparison. A version-sensitive sentence must name libvips, the binding, and the review date. Do not generalise it to every version.
  • When an operation requires a newer libvips (see install-failures / missing-codec under troubleshooting).
  • When the gap between sharp’s bundled libvips and the system libvips causes a behavioural difference, trust the locked reference baseline.
  • After upgrading any binding or libvips, update this matrix and re-verify the affected recipes.

This page is the 2026-10-12 snapshot. Re-run the examples and rewrite the table after upgrading any component.