Changelog

View Source

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.

1.1.0 - 2026-05-09

Added

  • iommap:region_binary/3 returns a refcounted resource binary that points directly into the mapped region, with no data copy. Intended for hot zero-copy hand-off paths.

Changed

  • The NIF resource layout was split into a mapping resource (owns the mmap region and fd) and a handle resource (owns the BEAM handle term and one reference to the mapping). close/1 releases the handle's reference to the mapping; munmap and close(fd) are deferred until any outstanding region binaries derived from that mapping are also garbage collected. Existing API behaviour is unchanged.
  • truncate/2 now allocates a fresh mapping (with a duplicated fd) and atomically swaps it into the handle. The previous mapping remains alive for outstanding region binaries.

Notes

  • region_binary/3 is unsafe against external truncation that shrinks past a binary's range. Use pread/3 when safety against external mutation is required.

1.0.0 - 2026-01-26

Added

  • Initial release of iommap
  • Dirty NIF I/O schedulers for all I/O operations
  • Cross-platform memory-mapped file I/O for Erlang/OTP
  • Support for Linux, macOS, FreeBSD, and OpenBSD
  • Core operations: open/2,3, close/1, pread/3, pwrite/3
  • Synchronization: sync/1,2 with sync/async modes
  • File management: truncate/2, position/1
  • Memory advice: advise/4 with madvise hints
  • Thread-safe implementation using pthread rwlocks
  • SIGBUS protection for external file truncation
  • Platform-specific optimizations:
    • MAP_POPULATE support on Linux
    • MAP_NOCACHE support on macOS
    • fallocate on Linux, posix_fallocate on BSD
  • Comprehensive test suite with 20 tests
  • CI pipeline for all supported platforms