All notable changes to this project are documented in this file. The format is based on Keep a Changelog, and the project follows Semantic Versioning.
0.1.0 - 2026-07-07
Initial release: a from-scratch, pure-Elixir Zigbee coordinator stack for Silicon
Labs EmberZNet dongles. No NIFs and no C daemons, just circuits_uart and binary
pattern matching.
Added
Zigbeefacade: the backend-agnostic public API (start_link/2,form_network/2,reestablish_network/2,reestablish_or_form_network/2,reset_network/1,permit_joining/2,add_endpoint/6,send_aps/7,identifier/1,subscribe/2,info/1).Zigbee.Adapter: the behaviour that separates the application layer from the radio. Backends emit normalized{:zigbee, :device_joined, _}and{:zigbee, :message, %Zigbee.Message{}}events.Zigbee.EZSP.Adapter: the Silicon Labs EmberZNet backend (EZSP over ASH), including the ASH framing, the EZSP protocol client, and NCP diagnostics. Verified live against a Home Assistant Connect ZBT-2 on EmberZNet 7.5.1.0.Zigbee.ZCLandZigbee.ZDO: chip-agnostic Zigbee-spec codecs for cluster-library and device-object frames.Zigbee.Interview: the join, interview, bind, and configure-reporting flow, pluscollect/2to decode incoming reports into engineering units.Zigbee.Message: the normalized inbound APS message.Zigbee.MockAdapter: an in-memory backend for testing without hardware.- Examples:
pair_and_read.exs(a runnable end-to-end demo) andsensor_hub.exs(a supervised GenServer that owns the radio and reacts to events).
Known limitations
- The pairing flow (
Interview.run/4and report decoding) is written to the spec and tested againstZigbee.MockAdapter, but has not yet been exercised against live Zigbee end-devices. Expect to tune the incoming-message layout and per-device quirks. reestablish_network/2is implemented but not yet confirmed against real paired devices across a restart. See "Persistence & restart" in the README.- Only the Silicon Labs EmberZNet (EZSP) family is supported. TI Z-Stack and deCONZ
radios need their own
Zigbee.Adapterbackend.