Skip to main content

CHANGELOG.md

# Changelog

All notable changes to the `vastlint` Elixir/Erlang package.

This project follows [Semantic Versioning](https://semver.org/).

---

## [0.3.3] - 2026-04-24

### Breaking

- **NIF module atom changed** from `Elixir.VastlintNif` to `vastlint_nif`.
  This is a breaking change if you were calling `VastlintNif` functions directly
  (which was undocumented and unsupported). The public `Vastlint` API is unaffected.
  - `rustler::init!` in the Rust crate now registers the NIF as `vastlint_nif`
  - The Elixir NIF loader is now `defmodule :vastlint_nif` (Erlang-style atom)
  - The checksum file is now `checksum-vastlint_nif.exs`

### Added

- **Pure Erlang NIF loader** (`src/vastlint_nif.erl`): loads the shared library
  via `erlang:load_nif/2` at module init. Erlang/rebar3 apps no longer need
  the Elixir runtime to call the NIF directly.
- **`rebar.config`** for rebar3 / pure Erlang project setup.
- **`native/vastlint_nif`** symlink to `vastlint/crates/vastlint-nif` for
  `VASTLINT_BUILD=true` force-build support from the Erlang package directory.
- Added `aarch64-unknown-linux-musl` and `x86_64-unknown-linux-musl` precompiled
  targets (Alpine Linux / static builds).

### Changed

- Version bumped to `0.3.3` to match `vastlint_nif` Rust crate (`Cargo.toml`).
- `src/vastlint.erl`: now calls `vastlint_nif:validate/1` and
  `vastlint_nif:validate_with_opts/4` directly instead of the Elixir module.
- `lib/vastlint.ex`: updated to call `:vastlint_nif` (was `VastlintNif`).

---

## [0.3.0] - 2026-03-10

### Added

- Initial public release.
- `Vastlint.validate/1`, `Vastlint.validate/2`, `Vastlint.validate!/1`,
  `Vastlint.validate!/2`, `Vastlint.version/0`.
- `Vastlint.Result`, `Vastlint.Issue`, `Vastlint.Summary`,
  `Vastlint.ValidationError` structs.
- Precompiled NIFs for macOS (arm64, x86_64) and Linux (arm64, x86_64, glibc).
- DirtyCpu NIF scheduling - never blocks BEAM schedulers.
- Native Erlang map output - no JSON serialisation overhead.
- Erlang wrapper module `src/vastlint.erl` for rebar3 / plain Erlang callers.