Zigbee SDK Version 9.1.0 - Release Notes (Jun 23, 2026)#
Silicon Labs is the vendor of choice for OEMs developing Zigbee networking into their products. The Silicon Labs Zigbee platform is the most integrated, complete, and feature-rich Zigbee solution available.
Silicon Labs EmberZNet SDK contains Silicon Labs’ implementation of the Zigbee stack specification.
Click here for earlier releases.
Release Summary#
Key Features | API Changes | Bug Fixes | Changes | Chip Enablement
Key Features#
Configurable next RX channel for Green Power Device (GPD) bi-directional commissioning
Secure inter-PAN message fragmentation with APS link encryption after key establishment
Packet handoff post-incoming filter with per-packet link quality (RSSI, LQI, channel)
Zigbee 4.0 gateway sample application
GCC and IAR toolchain upgrades (GCC 14.2.rel1 and IAR 9.70.4)
Antenna calibration APIs for networking products
Configurable route table size in Zigbee Pro Stack Config
API Changes#
GPD channel request : New API
sl_zigbee_gpd_af_plugin_set_next_channel()to set the next and second next RX channels used in GPD Channel Request commissioning frames.Inter-PAN : The Inter-PAN plugin supports secure fragmented messages after CBKE,
plugin interpan fragment-testCLI adds an optional encryption option for testing purpose.Packet handoff : New stack callback
sl_zigbee_post_incoming_packet_filter_with_lqi_and_rssi_cb()and typesl_zigbee_packet_link_quality_tfor packet handoff.
Bug Fixes#
See Bug Fixes.
Changes#
See Changes.
Chip Enablement#
None
Key Features#
New Features | Enhancements | Removed Features | Deprecated Features
New Features#
Added in 9.1.0#
Zigbee 4.0 gateway sample application#
A new Zigbee 4.0 gateway host sample application is available. It extends the Zigbee 3.0 gateway with support for Zigbee 4.0-style joining and works with the Zigbee 4.0 light and switch sample applications.
Enhancements#
Added in 9.1.0#
Configurable next RX channel for GPD commissioning#
Green Power Device (GPD) applications can set the next RX channel and second next RX channel at runtime before bi-directional commissioning Channel Request GPDFs (previously build-time only; both default to channel 11 if unset). Use node set-next-channel <nextRxChannel> [<secondNextRxChannel>] with the Zigbee GPD CLI component (channels 11–26, before commissioning), or sl_zigbee_gpd_af_plugin_set_next_channel(). See API Changes.
Secure inter-PAN fragmentation#
The Inter-PAN plugin now supports sending and receiving large, APS link-encrypted inter-PAN messages using Inter-PAN Message Fragmentation (IPMF) after Certificate-Based Key Establishment (CBKE) has completed.
Secure fragmented traffic: Applications can exchange encrypted inter-PAN payloads that exceed a single frame by using fragmentation that follows the extended APS frame control format used for Smart Energy inter-PAN (first fragment and subsequent fragments are identified separately; fragment responses use a distinct format).
CLI: The
plugin interpan fragment-testcommand accepts an optional options argument. Set bit 0 to enable stub APS link encryption on the test message (requires an established inter-PAN link key and the project option that allows APS-encrypted inter-PAN messages, same asplugin interpan long).
Packet handoff link quality#
Applications that use packet handoff (the Packet Handoff component, zigbee_packet_handoff) can implement a new stack callback that runs after each intercepted incoming packet is processed, in addition to the existing post-incoming filter callback.
The new callback provides radio link quality for the received packet:
RSSI (received signal strength)
LQI (link quality indicator)
Channel (radio channel on which the packet was received)
GCC and IAR toolchain upgrade#
Zigbee SDK 9.1.0 is validated with GCC 14.2.rel1 and IAR Embedded Workbench 9.70.4—the compiler versions delivered with Simplicity SDK 2026.6. IAR 9.70.4 supports Zigbee SoC and NCP applications on Series 3, in addition to Series 2 targets. After you upgrade, rebuild your Zigbee projects in Simplicity Studio so your applications and the included sample apps build with these toolchains.
Configurable route table size#
SL_ZIGBEE_ROUTE_TABLE_SIZE is exposed in the Zigbee Pro Stack Config component configuration header so you can size the route table from Simplicity Studio without editing stack sources manually.
Antenna calibration APIs#
Zigbee stack APIs support antenna calibration workflows for networking products, including follow-up calibration updates in this release.
Removed Features#
None
Deprecated Features#
None
API Changes#
New APIs | Modified APIs | Removed APIs | Deprecated APIs
New APIs#
Added in 9.1.0#
New API Signature | Deprecated API replaced by this (if any) |
|---|---|
void sl_zigbee_gpd_af_plugin_set_next_channel(uint8_t nextChannel, uint8_t secondNextChannel) | Replaces build-time next RX channel configuration |
void sl_zigbee_post_incoming_packet_filter_with_lqi_and_rssi_cb(sl_zigbee_zigbee_packet_type_t packetType, sl_zigbee_packet_link_quality_t *linkQuality, uint8_t *packetData, uint8_t size_p, uint8_t *data, uint8_t size_d, sl_zigbee_packet_action_t action) | Extends |
New type sl_zigbee_packet_link_quality_t contains rssi, lqi, and channel fields for use with the callback above.
Modified APIs#
None
Removed APIs#
Removed in 9.1.0#
Build-time GPD next RX channel configuration was removed in favor of sl_zigbee_gpd_af_plugin_set_next_channel() or the node set-next-channel CLI.
Deprecated APIs#
None
Bug Fixes#
The following issues were resolved in Zigbee SDK 9.1.0.
| ID | Issue Description | GitHub Reference (if any) | Affected Software Variants, Hardware, Modes, Host Interfaces |
|---|---|---|---|
| 1483599 | Exposed route table sizing through the Zigbee Pro Stack Config component (see Enhancements). | None |
|
| 1353562 | Fixed Zigbee Virtual Device handling so messages are delivered to the application only after the device is fully authenticated. | None |
|
| 1435303 | Fixed an issue where broadcast messages to address 0xFFFF were incorrectly dropped in Zigbee Direct Device applications. | None |
|
| 1410206 | Added periodic checks in Zigbee Direct Device samples to detect when the trust center becomes Zigbee Direct aware. | None |
|
| 1507499 | Fixed SPI NCP application build and operation on Series 3 devices. | None |
|
| 1575333 | Fixed Green Power sink commissioning mode status handling required for conformance testing. | None |
|
| 1597771 | Fixed gateway startup failures by enforcing sufficient RAM for coordinator and router roles on SoC and NCP builds. | None |
|
| 1599783 | Fixed build failures caused by references to removed legacy manufacturing security tokens. | None |
|
| 1605517 | Fixed Secure Key Storage upgrade so legacy keys migrate correctly when FreeRTOS is used. | None |
|
| 1607880 | Enabled APS ACK by default for APS command frames, except for tunnel commands and initial transport key exchanges. | None |
|
| 1608133 | Fixed incorrect status code handling in Zigbee Direct sample applications. | None |
|
| 1609550 | Fixed message decryption failures in the Zigbee Direct light sample after reading the Identify characteristic. | None |
|
| 1611739 | Fixed a touchlink regression where the target device failed to join the initiator network on Series 3 boards. | None |
|
| 1616192 | Extended packet handoff link quality reporting to include receive channel (see Enhancements). | None |
|
| 1629729 | Fixed network steering so a pre-configured link key is not used incorrectly when joining, improving join success on large networks. | None |
|
| 1630376 | Fixed Simplicity Studio configuration so Zigbee 4.0 security can be selected for gateway projects. | None |
|
| 1632829 | Fixed an issue where the Green Power sink table could be cleared in non-volatile memory on reset when using the token manager. | None |
|
| 1639563 | Added missing EZSP support for clearing the binding table using sl_zigbee_clear_binding_table_on_leave when a device leaves the network. | None |
|
| 1647138 | Fixed the Green Power CLI command `node set-addr` so it correctly updates the local IEEE address. | None |
|
| 1657335 | Fixed an issue where Green Power communications would fail after flashing an image with the Zigbee Secure Key Storage Upgrade component to migrate keys into Secure Key Storage. The keys themselves were not corrupted, but the GP Sink and Proxy table entries were incorrectly zeroed out in NVM post-upgrade, causing GP communications to fail. | None |
|
| 1675558 | Fixed an issue where the Zigbee - Host Z4 Gateway (zigbee_z4_gateway) application would fail to connect to an NCP image, showing EZSP failures upon connection followed by immediate program exit. |
None |
|
Changes#
The following general changes are included in Zigbee SDK 9.1.0.
| ID | Change Description | GitHub Reference (if any) | Affected Software Variants, Hardware, Modes, Host Interfaces |
|---|---|---|---|
| 1630265 |
Standardized display labels and project names for certain Zigbee example applications in Simplicity Studio have been updated. Example apps now use a consistent title format that identifies the stack (Zigbee, Zigbee SE, Zigbee GP, or Zigbee BLE DMP), the target role (SoC, Host, or NCP), and the application name with readable spacing (for example, "Zigbee - SoC Z3 Light" instead of "Zigbee - Z3Light"). The NCP SPI example was renamed from This change affects how example applications appear when browsing or creating projects in Simplicity Studio. Application functionality is unchanged. |
None |
|
| 1650585 |
Updated board and project compatibility for 32 KB RAM parts (EFR32MG22 and derivatives). Zigbee NCP projects and SoC router/coordinator device types (including coordinator-or-router) are not supported; end device and sleepy end device SoC roles remain supported. Use a part with at least 64 KB RAM (for example EFR32MG24) for FFD or NCP designs. In Simplicity Studio, MG22-class targets are omitted from Zigbee NCP example flows. If you retarget a project or select router/coordinator roles in Zigbee Pro Stack Config, stack validation reports that at least 64 KB RAM is required and blocks generation until you change the target or device type (including for NCP firmware and secondary networks). |
None |
|
Chip Enablement#
None
Application Example Changes#
New Examples | Modified Examples | Removed Examples | Deprecated Examples
New Examples#
| Example Name | Description | Supported Software Variants (if applicable) | Supported Modes | Supported OPNs / Boards / OPN Combinations | Supported Host Interfaces |
|---|---|---|---|---|---|
|
Zigbee - SoC Z4 Light See README |
Zigbee 4.0 light SoC sample using NVM3 storage. Demonstrates BDB 3.1 and R23 features (including Zigbee 4.0 security, network commissioning, and dynamic link keys) as a coordinator/router that can form or join a Zigbee 4.0 network. Pairs with the Zigbee 4.0 gateway and switch sample applications. | Pro stack, Zigbee 4.0 security | >SoC |
|
N/A |
Modified Examples#
Standardized display labels and project names for certain Zigbee example applications in Simplicity Studio were updated. Example apps now use a consistent title format that identifies the stack (Zigbee, Zigbee SE, Zigbee GP, or Zigbee BLE DMP), the target role (SoC, Host, or NCP), and the application name with readable spacing. The NCP SPI example was renamed from ncp-spi to zigbee_ncp_spi; NCP example labels were normalized; and GPD single-button/LED variant examples use distinct project names and labels. This affects how examples appear when browsing or creating projects in Studio only. Full details are in Changes (1630265). Application functionality is unchanged.
| Example Name | Changes | Supported Software Variants if applicable | Supported Modes | Supported OPNs / Boards / OPN Combinations | Supported Host Interfaces |
|---|---|---|---|---|---|
|
Zigbee sample applications (Simplicity Studio display labels and project names) |
See Changes (1630265).
|
All applicable |
|
All supported boards and OPNs for affected examples | All applicable (UART, SPI, CPC, and others per example) |
Removed Examples#
None
Deprecated Examples#
None
Known Issues and Limitations#
| ID | Issue or Limitation Description | GitHub / Salesforce Reference (if any) | Workaround (if any) | Affected Software Variants, Hardware, Modes, Host Interfaces |
|---|---|---|---|---|
| 1503910 | For Series 3 parts, the boot time is inconsistent because of the NVM3 repack invoked during initialization. To optimize application performance, it is recommended for users to implement user NVM3 repacks periodically during application downtime. | None | Refer to the NVM3 documentation regarding implementing the user triggered repack function. A code example to call the user repack is provided below this table. | Series 3 |
| 1650585 |
32 KB RAM targets (EFR32MG22 and derivatives): Zigbee NCP projects and SoC router or coordinator network device types are not supported on parts with 32 KB of primary RAM. End device and sleepy end device SoC roles remain supported on MG22-class hardware; use a part with at least 64 KB RAM (for example EFR32MG24) for router, coordinator, or NCP designs that require a full-function device role. Simplicity Studio omits MG22-class targets from Zigbee NCP example flows. If you retarget an existing project or select an unsupported network device type in Zigbee Pro Stack Config, Zigbee stack project validation reports an error that coordinator or router types require at least 64 KB of primary RAM and blocks project generation until you change the target or device type. The same validation applies to NCP firmware configured as router or coordinator on these parts. See Changes (1650585) for a full description. |
None | Choose an end device or sleepy end device type on MG22, select a 64 KB-or-larger part for router/coordinator SoC or NCP, or create a new project from a supported example and target. |
|
| 1446942 | sl_zigbee_af_get_command_aps_frame() is currently not thread safe. Users may notice that subsequent calls to any of the sl_zigbee_af_send_command_* APIs result in incorrect APS frames being transmitted. This issue will be fixed in a future release. | None | None | All variants |
| 1477680 |
The following two issues are present for the Sleepy to Sleepy applications
|
None |
|
Zigbee BLE Sleepy To Sleepy Apps |
| 1479979 | The zigbee daemon (zigbeed) has an issue where it exits spontaneously when installed using 32-bit Debian packages. | None | Users may use the Docker-based zigbeed to circumvent the issue until a fix is provided in a future SDK release | Zigbeed CMP |
| 1571691 | An issue is present where a device can fail to join a large network (>30 devices) if the coordinator is using the Zigbee Secure Key Storage component, which is enabled by default. The problem is seen when the joining device associates successfully, but the update of the trust center link key fails, which results in the joining device leaving the network. When this issue occurs, all APS link keys on the trust center are seemingly wiped, including those found in the link key table and transient key table, as can be seen in the output to the command "keys print." With all APS keys temporarily wiped, encrypted APS communications with the trust center fail. | None | Set the SL_PSA_KEY_USER_SLOT_COUNT configuration item to the maximum number of devices in the network when configuring the coordinator image (SoC or NCP). If using Simplicity Studio, the configuration is found under the PSA Configuration component. Note: trust centers using the Zigbee Classic Key Storage component are unaffected by this issue and thus require no workaround, which includes zigbeed, or the Zigbee Daemon. | SoC and NCP trust centers using the Zigbee Secure Key Storage component |
| 1571186 | An issue is present whereby an event that is armed in interrupt context does not fire when expected | None | As a workaround, users may issue a call to sl_zigbee_wakeup_common_task() after arming the event to get the event to fire on time | All variants |
| 1617908 | ZAP-generated cluster command parsers may perform out-of-bounds reads when handling truncated conditional or string fields. Regenerate application clusters from an updated ZAP template when a fix is available. | None | Validate untrusted cluster command payloads at the application layer until updated templates ship. | All variants using ZAP-generated command parsers |
| 1679642 |
When upgrading a project that uses the Green Power Combo Zap Config component (zigbee_green_power_combo_zap_config) from Simplicity SDK 2025.12 or earlier to Simplicity SDK 2026.6.0 or later, custom edits to the Green Power ZAP configuration may be lost. The component supplies zcl_config_gp_combo.zap, which defines Green Power endpoint and cluster configuration for NCP applications such as zigbee_ncp_ot_rcp_uart_gp_multi_rail.
During SDK upgrade, the upgrader removes the file at the former path. Any user modifications stored there are discarded. The new file at config/zcl/zcl_config_gp_combo.zap is installed with default component content and does not automatically incorporate prior customizations. |
None |
After upgrading, manually merge customizations from the backed-up file in the project's trashed_modified_files folder (look for the previous config/zcl_config_gp_combo.zap) into config/zcl/zcl_config_gp_combo.zap. |
|
| 1682899 |
An issue is present on a host application where invoking the bootloader to boot an image in storage on the NCP results in error, with the host encountering an EZSP failure. The host subsequently disconnects from the NCP.
This will be addressed in a future release. |
None | None | Host applications with NCP |
Code example for Known Issue 1503910:
// Set the user repack threshold
static uint32_t user_repack_threshold = 1024;
/***************************************************************************//**
* Perform a user-triggered repack with a configurable threshold.
*
* This function sets the number of bytes (threshold) that must remain free
* before a forced repack is triggered. It performs repack operations until
* the threshold is satisfied or no further memory can be freed.
******************************************************************************/
void nvm3_repack_with_threshold(void)
{
sl_status_t sta;
nvm3_MemInfo_t memInfo;
size_t initMemInfo; // Get available memory
if (nvm3_getMemInfo(nvm3_defaultHandle, &memInfo) != SL_STATUS_OK) {
printf("Get memory info failed at startup\r\n");
return;
} // Set the repack headroom to user threshold
nvm3_defaultInit->repackHeadroom = user_repack_threshold;
sta = nvm3_open(nvm3_defaultHandle, nvm3_defaultInit);
if (sta != SL_STATUS_OK) {
printf("NVM3 re-open with increased headroom failed: %lu\r\n", sta);
return;
}
initMemInfo = memInfo.availableMemory;
int repack =0;
while (user_repack_threshold > memInfo.availableMemory) {
repack++;
sta = nvm3_repack(nvm3_defaultHandle);
if (sta != SL_STATUS_OK) {
printf("ERROR: NVM3 repack failed! Status: %lu\r\n", sta);
EFM_ASSERT(sta == SL_STATUS_OK);
break;
}
nvm3_getMemInfo(nvm3_defaultHandle, &memInfo);
}
return;
}