[0.5.0] - 2026-07-09
Added
- musl support.
native/noise/.cargo/config.tomldisablescrt-staticfor musl targets, which otherwise cannot produce thecdyliba NIF must be. Fixescannot produce cdylib for 'noise' as the target 'x86_64-unknown-linux-musl' does not support these crate types. - Golden-vector regression suite (
cargo testinnative/noise) pinning noise output bit-for-bit, so the vendoring below cannot silently change results.
Changed
- Cellular 2D
:cell_valueoutput has changed. It previously hashed the sample coordinates rather than the winning cell's, making it independent ofjitteranddistance_function— it was not cellular noise. It now matches the reference implementation and the existing 3D behaviour. Worlds generated withnoise_type: :cellularandreturn_type: :cell_valuewill differ. All other noise types are bit-for-bit identical; this is enforced by 3,888 golden vectors captured before the change. - Vendored
bracket-noiseintonative/noise/src/fastnoise.rs(MIT, seeTHIRD_PARTY_LICENSES). It was unmaintained since 2022, and reached us only throughbracket-random, which pulledrand,getrandom,libc,lazy_staticand a fullregexstack — 13 transitive crates — to shuffle one 512-entry permutation table. The RNG it used is reimplemented bit-exactly infastnoise::xorshift. Dependencies are nowrustlerandrayononly. - Bumped
rustlerto 0.38. This raises the minimum Rust to 1.91 (rustlerrequires 1.91,libloading1.88). Distro toolchains lag: Debian stable, Ubuntu LTS and Alpine <= 3.23 all ship olderrustc. Userustupif your package manager's Rust is too old. - Package metadata now points at this fork rather than upstream
isotope.@source_url, the Hex links and the ex_doc source-link pattern targetedgithub.com/viniciusmuller/isotope, so "view source" and issue links led to a repository that does not contain this code. README now carries a fork notice crediting the original authors.
Fixed
- The Hex package shipped a compiled NIF (
priv/native/noise.so) built on the maintainer's machine — a 640KB Mach-O arm64 binary, useless to everyone else.exclude_patternslistedpriv/native/libnoise.so, but rustler copies the artifact topriv/native/noise.so, so the pattern never matched. Also present in 0.3.0 and 0.4.0. Rustler always rebuilds the NIF from source, so this was dead weight rather than something that could be loaded. - README installed the wrong package (
{:isotope, "~> 0.3.0"}) and linked docs athexdocs.pm/isotopeinstead ofhexdocs.pm/isotope_118. - README described the backing crate as a port of FastNoise Lite and listed
:simplexas OpenSimplex2. Both describe a different algorithm family; the vendored code is a port of the original FastNoise. - Cellular
:distance2,:distance2add,:distance2sub,:distance2muland:distance2divraisedErlangError: :nif_panickedfor every input. The distance-insertion loop started at index 0 and readdistance[i - 1], underflowingusize. Affected both 2D and 3D. - Cellular 2D
:distancealways returned0.0; the computed distance was discarded. 3D was unaffected. - Cellular 2D
:distance2returned the nearest distance instead of thedistance_index_1-th nearest.
[0.3.0] - 2026-02-18
Added
Isotope.NoiseMapstruct — compact binary representation of noise maps (~4 bytes/value instead of ~32).NoiseMap.get/3— access a single noise value by column and row.NoiseMap.row/2— extract a row as a list of floats.NoiseMap.to_list/1— convert to the legacy[[float()]]nested list format.NoiseMap.size/1— returns{width, height}.Enumerableprotocol forNoiseMap— iterate rows withEnumfunctions.- Dirty CPU scheduler for
noise_map/2andchunk/4— prevents blocking BEAM schedulers on large maps.
Changed
noise_map/2andchunk/4now return%Isotope.NoiseMap{}instead of[[float()]]. UseNoiseMap.to_list/1to migrate existing code.get_noise/2andget_noise3d/3no longer apply hardcoded coordinate divisors (/160.0,/100.0). Coordinates are passed directly to the noise algorithm. Use thefrequencyoption to control noise scale.show_noisemap/1now accepts%Isotope.NoiseMap{}instead of a nested list.- Rust edition bumped from 2018 to 2021.
Fixed
- Swapped
width/heightin internalVec::with_capacitypre-allocation (replaced with flat binary).
[0.2.0] - 2023-05-20
Changed
- Removed the dependency on the
ex_pnglibrary, meaning thatIsotope.Utils.write_to_file/2is not available anymore. - Dependencies were bumped to their current stable version
[0.1.3-rc] - 2021-06-21
Changed
- Replace the rust
imagecrate with the pure elixirex_pnglibrary. Resulting in cleaner dependencies and faster compilation times but slower performance on theIsotope.Utils.write_to_file/2function.
[0.1.2-rc] - 2021-06-20
Changed
- Improve aliases used in the code.
Fixed
- Add rust source code to hex repository.
[0.1.1-rc] - 2021-06-20
Changed
- Add project to
hex.pm.