All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning as implemented by Cargo.
Native Windows CI installs libvips:x64-windows and executes linked helper tests.
helpers::is_initialized and shared process-wide initialization state.v8_18 for a libvips 8.18+ probe; register version cfgs including vips_8_18.docs/upstream-review-2026-10-22.md.*_get_type
functions (1,156 libvips declarations total), preserving all prior functions.scripts/refresh-prebuilt.py checks the header version and rejects accidental
API removal when maintaining pregenerated bindings.
Release workflow supports manual workflow_dispatch with a tag input (in addition to tag push).cargo publish --dry-run in verify, --locked on the real publish.Correct the pregenerated libtool ABI version constants from the release headers.
softprops/action-gh-release@v3; changelog extract uses shell: bash.cc from 1.4.5 to 1.9.0 (feature stub), retaining the existing dependency refresh.cargo fmt to build.rs (import order and line wrapping).Point package.documentation and README docs links at https://docs.rs/vips-sys/ (drop GitHub Pages URLs).
libvips port rather than vips
(#11); correct installation
commands and document dynamic-library opt-in and DLL lookup.VCPKGRS_TRIPLET before VCPKG_DEFAULT_TRIPLET. Static defaults now
match the target architecture and CRT instead of always forcing x64/static CRT.Include GLib headers from the selected triplet and export include metadata with the host’s path separator, preserving Windows drive-letter paths.
helpers::init only caches success, permitting retries after errors.gsize/gssize aliases in prebuilt and generated
bindings; C long is only 32 bits on 64-bit Windows. Compile-time ABI assertions
cover those aliases and GType on every target.helpers::shutdown is unsafe; callers must prove all native users
are finished and that no later libvips calls can occur.LIBVIPS_NO_BINDGEN now copies pregenerated bindings into OUT_DIR instead of
leaving a missing binding.rs on a clean build.Honor LIBVIPS_STATIC over Cargo’s dynamic feature as documented.
MESON_PATH / NINJA_PATH, fix the vendor libdir, and reject a dylib when
a system static archive was requested.src/bindings/prebuilt.rs) are used by default: no
clang/bindgen required for normal cargo build. Enable feature bindgen only
when refreshing bindings against local headers.bindgen) allowlists vips_* / Vips* / VIPS_* plus a few
GObject helpers, uses use_core() + core::ffi, and fingerprint-caches output
in OUT_DIR.resolver = "3" (edition 2024).helpers::init / version / version_string use OnceLock; init returns a
cached result before allocating CString.bindgen is an optional build-dependency (default-features = false).merge_includes dedups with a HashSet.pkg-config probes when the bindgen feature is off.PKG_CONFIG_PATH / LIBVIPS_* env for correct rebuilds.vendor/libvips (pinned to v8.18.6).pkg-config --static / vcpkg static triplet; optional meson+ninja
build from vendored sources (static feature or LIBVIPS_STATIC=1).VCPKG_ROOT, VCPKG_DEFAULT_TRIPLET; document
vcpkg install libvips:x64-windows[-static].LIBVIPS_LIB_DIR, LIBVIPS_INCLUDE_DIR, LIBVIPS_NO_VENDOR,
LIBVIPS_STATIC (0/false/off disable).cargo:include for dependent sys crates.cfg(vips_8_16) and cfg(vips_8_17).helpers::version_string().bindgen to regenerate FFI from local headers.stub: link stub/vips_stub.c when no system libvips is found so
cargo test --features helpers,stub works in sandboxes/CI. Real libraries
are always preferred.helpers::init / version / version_string.src/bindings/prebuilt.rs is
include!d unless feature bindgen is enabled.bindgen if you need
a wider local set.find_libvips no longer treats vendored headers alone as a linkable library.actions/checkout@v7 with submodules: recursive and
dtolnay/rust-toolchain@stable.helpers only (not bindgen).generate.sh — use cargo build --features bindgen instead.
wrapper.h is kept as the bindgen entry header.cargo publish, GitHub Release.prefer_static() matches env::var as Ok (was incorrectly Some).helpers::version_string: remove explicit * on OnceLock::get_or_init
(clippy::explicit_auto_deref, CodeQL alert #3353).cargo publish verify no longer fails when the machine has no libvips:
pregenerated bindings compile without headers/library; the build script only
panics under feature bindgen if headers are missing.vcpkg::Config::target_triplet is called in place (was assigned back
and failed to type-check).-D warnings / dead_code passes.clippy::type-complexity.README.md in English and add README_CN.md with language switch.