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.
0.3.0-rc1 - 2026-07-31
Release candidate for 0.3.0. Published to exercise the precompiled release pipeline end-to-end — tag push → 12 build-matrix artifacts → checksum file → Hex — before cutting the final release.
Hex's resolver excludes prereleases from ordinary requirements: {:libraw, "~> 0.3"} will not pick this up. Testers must pin {:libraw, "0.3.0-rc1"}.
See RELEASING.md.
Added
- Precompiled NIF binaries via
rustler_precompiled. Supported targets:aarch64-apple-darwin,x86_64-apple-darwin,x86_64-unknown-linux-gnu,aarch64-unknown-linux-gnu. Users on these platforms no longer need a Rust toolchain installed. .github/workflows/release.yml: GitHub Actions workflow that builds and uploads NIF artifacts on everyv*tag push. Runs on native macOS and Linux ARM/x86 runners;brew install libraw/apt install libraw-devinstalls the required shared library into the build environment.LIBRAW_BUILD=1env-var opt-in for forcing a local source build (useful for development or unsupported targets).
Changed
lib/lib_raw/nif.exnow usesRustlerPrecompiledinstead of plainRustler. The libraw system library is still required at runtime on every platform (dynamic linking, LGPL).- Installation docs updated: version constraint bumped to
~> 0.3, new "Supported Platforms" table, Rust prerequisite scoped to source-build cases.
Notes
- MUSL / Alpine Linux is intentionally excluded: libraw is not reliable on musl libc.
- The download URL is derived from the
mix.exsversion, so the git tag must be exactlyv+ that version or every download 404s.RELEASING.mddocuments the procedure this coupling requires.
0.2.0 - 2026-05-02
Fixed
:srgbgamma now resolves to{2.4, 12.92}(the dcraw / libraw sRGB convention). Previously{2.222, 12.92}, which produced incorrect pixel values for every caller using the default.
Changed
- Breaking (source builds): Bumped
rustlerto~> 0.37on both the Elixir and Rust sides (was~> 0.33). Consumers compiling the NIF from source need a compatible Rust toolchain; no API changes for Elixir callers. decode/2no longer makes an intermediateVec<u8>copy of the libraw pixel buffer. The data is copied once, directly into theOwnedBinaryreturned to the BEAM. Saves ~72 MB of allocation+copy per 24-megapixel 8-bit decode.
Removed
- Unused
LibRawError::UnexpectedImageTypevariant and dead helpers inerror.rs(result_to_term/2,From<LibRawError> for rustler::Error).
Internal
- Added
mix formatconfig and ran the formatter. - Added an integration test (
mix test.smoke) that exercises a real RAW file end-to-end. Excluded frommix testby default; drop any RAW attest/fixtures/sample.rawto run it.
0.1.0 - 2026-04-26
Added
- Initial release.
LibRaw.decode/2— full libraw pipeline (open → unpack → dcraw_process → in-memory bitmap), with options for white balance, auto-bright, output bits-per-sample, and gamma curve.LibRaw.metadata/1— EXIF metadata (make, model, captured_at, ISO, shutter, aperture, orientation) without the full decode pipeline.- Both NIFs scheduled on Dirty CPU schedulers.
- Thin
wrapper.cshim avoids bindgen / struct-offset breakage across libraw 0.20 / 0.21 / 0.22.