Skip to content

v0.6.4

Latest

Choose a tag to compare

@haubie haubie released this 17 Jul 10:51

0.6.4 (2026-06-09) - includes breaking changes

This release:

  • [Breaking change] Modifies the Rust code to return MIDI data in binary format (e.g. <<153, 60, 70>>), rather than a list (e.g. [153, 60, 70]). See issue #10 for more information. Thank you to @Rashidwi and @nseaSeb for raising it. If you'd prefer the old behavior, you can use :binary.bin_to_list/1 to convert the binary data back to a list, e.g.:
binary = <<153, 60, 70>>
list = :binary.bin_to_list(binary)
#=> [153, 60, 70]
  • [Breaking change] Unifies the subscription API for virtual inputs. Subscribing to a %Midiex.VirtualMidiPort{} now returns a %Midiex.MidiMessage{} struct rather than a raw byte list.
  • Polymorphic port structs: the port field inside %Midiex.MidiMessage{} is now polymorphic and type-safe. It will contain either a %Midiex.MidiPort{} (for physical/OS device ports) or a %Midiex.VirtualMidiPort{} (for custom virtual inputs). This allows for clean, idiomatic pattern matching in your Elixir handlers:
# Handle messages from physical keyboard
def handle_msg(%MidiMessage{port: %Midiex.MidiPort{name: "KeyStep Pro"}, data: data}) do
  ...
end

# Handle messages from your custom virtual synth
def handle_msg(%MidiMessage{port: %Midiex.VirtualMidiPort{name: "MyInstrument"}, data: data}) do
  ...
end
  • Fixes message construction bugs when using Midiex.Message, such as functions with the channel: option.
  • Upgrades to Rustler v0.38.
  • Removes lazy_static dependency in favor of Rust's built-in std::sync::LazyLock.
  • Updates Rust dependencies to latest versions:
Library Old Version New Version Scope
midir "0.9.1" "0.11.0" Cross-platform MIDI I/O
core-foundation "0.9.3" "0.10.1" macOS Foundation wrapper (sys)
coremidi "0.7.0" "0.9.1" macOS CoreMIDI API wrapper

Additionally:

  • Windows ARM based precompiled binary aarch64-pc-windows-msvc has been added.
  • Mix test suite has been expanded, including OS/platform specific tests.
  • Local cross-platform build support is available via a Justfile. See BUILDING.md for details.
  • The Live Book has been updated with new examples and documentation.

SHA256 of artifacts

b05f3b8aedfc754824b30158044d0b9e732a1ffbce641a006c38d207477063d7  libmidiex-v0.6.4-nif-2.15-aarch64-apple-darwin.so.tar.gz
cee8ddb8ad369ebd1d5c648b2e549603e8547e439d2a86894d3a8949aea6ccba  libmidiex-v0.6.4-nif-2.15-aarch64-unknown-linux-gnu.so.tar.gz
8f4400b1d97cea9e75723dc816f30a68a71328392ca25a9c4fdf139d8e3a8cc2  libmidiex-v0.6.4-nif-2.15-aarch64-unknown-linux-musl.so.tar.gz
a777a15e964a8b891ca20036bf9325bb2e9e2977682fad660100bab50d7811ce  libmidiex-v0.6.4-nif-2.15-riscv64gc-unknown-linux-gnu.so.tar.gz
0ca1d76921f944d4df9664810c9e036248899322b5f0faaf643dde9557a75aae  libmidiex-v0.6.4-nif-2.15-x86_64-apple-darwin.so.tar.gz
341d577fa4d265bfd9add7d958793f616eb9768e09fb88455701b198800b6a67  libmidiex-v0.6.4-nif-2.15-x86_64-unknown-linux-gnu.so.tar.gz
63e1d5519545702b66a7fb0768c1285646b99cbbc5be893cc43a6d4593414e8e  libmidiex-v0.6.4-nif-2.15-x86_64-unknown-linux-musl.so.tar.gz
c3fc1aae056e9f4bfad597ad4d184e5546416021dcdbd15d6ddba35525337c75  midiex-v0.6.4-nif-2.15-aarch64-pc-windows-msvc.dll.tar.gz
4942f95b5718defc94006df8e9b4613b3e49a99a3f1958c748f42b47e05f3192  midiex-v0.6.4-nif-2.15-x86_64-pc-windows-gnu.dll.tar.gz
f08956b8977e0016db6fc2242b61696286433d7973376173d1e829c50d0decff  midiex-v0.6.4-nif-2.15-x86_64-pc-windows-msvc.dll.tar.gz