Zigbee SDK Version 8.2 (June 16, 2025) - Release Notes#
Simplicity SDK Version 2025.6.0
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 | Chip Enablement
Key Features#
Updated filtering of InterPAN messages
GCC Link Time Optimization (LTO)
Added support for Tunneling functionality in Zigbee Direct.
Improved status notification for packet sent
Application Initialization Utilizing sl_main.
API Changes#
sl_zigbee_af_incoming_packet_filter_cb
sl_zigbee_af_outgoing_packet_filter_cb
sl_zigbee_send_raw_message_with_tag
sl_zigbee_af_zll_unset_factory_new
sl_zigbee_gp_clear_proxy_table
sl_zigbee_gp_proxy_table_remove_entry
sl_zigbee_af_green_power_cluster_gp_sink_close_commissioning_window
sl_zigbee_set_join_uses_install_code
sl_zigbee_get_join_uses_install_code
sl_zigbee_af_tc_link_key_update_now
sl_zigbee_af_gpep_incoming_message_cb
sl_zigbee_af_ncp_gpep_incoming_message_handler
sl_zigbee_gpep_incoming_message_handler
sl_zigbee_af_set_t_c_link_key_update_timer_milli_seconds
Bug Fixes#
See Bug Fixes.
Chip Enablement#
xGM260P PCB Module
xGM270S SiP Module
xG29 EFR32MG29B140F1024IM40
Key Features#
New Features | Enhancements | Removed Features | Deprecated Features
New Features#
Updated filtering of InterPAN Messages
Updated the message filtering mechanism to allow the inter-pan messages to be available to the application. This required the following updates:Added new packet type SL_ZIGBEE_PACKET_TYPE_INTERPAN macro for general inter-pan message identification.
The existing packet SL_ZIGBEE_ZIGBEE_PACKET_TYPE_INTERPAN has been renamed to SL_ZIGBEE_PACKET_TYPE_INTERPAN_ZLL, based on the usage in the code.
The following callback names have been changed to better reflect their role in the processing pipeline:
sl_zigbee_af_incoming_packet_filter_cb → sl_zigbee_pre_incoming_packet_filter_cb (privileged)
sl_zigbee_af_outgoing_packet_filter_cb → sl_zigbee_pre_outgoing_packet_filter_cb (privileged)
Two new callback functions have been introduced to provide a more comprehensive filtering framework:
sl_zigbee_post_incoming_packet_filter_cb()
sl_zigbee_post_outgoing_packet_filter_cb()
These functions are called over IPC after the packet has been received / sent and processed by the privileged pre-filter callback. It is meant to be informative for the application task and doesn't affect the packet handling, which has already occurred.
GCC Link Time Optimization (LTO)
Overview
Link Time Optimization (LTO) is now enabled for Zigbee applications in this release for GCC. LTO is a powerful compiler optimization technique that allows the compiler to perform whole-program analysis and optimization at link time, resulting in improved code performance and, in some cases, reduced binary size.
Usage
Installing the toolchain component toolchain_gcc_lto brings in the desired compiler and linker flags in a project.
In 2025.6.0, the zigbee gcc SOC libraries are built with desired compiler flags (-flto, -ffat-lto-objects) to be compatible with the linker to perform LTO at the final linking stage. The gcc linker flag -flto gets added to the linker options when toolchain_gcc_lto is installed in a project and when it is not installed the -fno-lto flags will be required to be added. The SLC CLI or Simplicity Studio generation automatically updates the generated or updated gcc makefile. User maintained makefile must consider these flags to be forward compatible.
Key Benefits
Improved Performance: LTO enables more aggressive inlining and cross-module optimizations, which can lead to faster execution of Zigbee stack and application code.
Potential Code Size Reduction: By eliminating redundant code and optimizing across module boundaries, LTO may reduce the overall firmware size in some scenarios.
Better Optimization Opportunities: The compiler can optimize function calls and data usage across all source files, not just within individual files.
Considerations
Increased Stack and Heap Usage: Due to more aggressive inlining and function merging, LTO may increase stack and heap requirements. Stack sizes have been reviewed and updated in .slcp configuration files to ensure reliable operation under LTO.
Build Time: Enabling LTO may increase build times, as the linker performs more complex analysis and optimization.
Debugging: Debugging LTO-optimized binaries can be more challenging, as function boundaries and variable locations may change due to optimization.
Configuration Changes
The toolchain_gcc_lto component is now included in Zigbee NCP and related projects. Stack size (SL_STACK_SIZE) configuration entries in .slcp files have been updated to ensure sufficient memory allocation for all combinations of LTO and RTOS usage.
Recommended Actions
Review and test your application for stack overflows or memory issues, especially if you have custom code or third-party libraries.
If you encounter issues related to stack or heap usage, consider adjusting the SL_STACK_SIZE and heap configuration values as needed.
Summary
LTO is now part of the default build configuration for Zigbee applications, providing enhanced optimization and performance. Please review the updated stack size settings and test your applications accordingly to ensure a smooth transition.
Application Initialization Utilizing sl_main.
sl_system is deprecated in 2025.6.0 and is being replaced with sl_main. This means the existing apps main.c is not compatible with the new sl_main component. Therefore, it is recommended that if you have your own version of main.c, make it compatible with the new main.c provided by the sl_main component.
Added support for Tunneling functionality in Zigbee Direct.
New Green Power application framework APIs for commissioning window and GP Proxy Table entries Networking:
To allow the management of green power proxy table directly by advanced users, two new public APIs are introduced:
void sl_zigbee_gp_clear_proxy_table(void);
void sl_zigbee_gp_proxy_table_remove_entry(uint8_t index);
Added following new Application framework API in green power server to close a commissioning session:
bool sl_zigbee_af_green_power_cluster_gp_sink_close_commissioning_window(void);
Improved packet failure status
Updated the message sent by handler callback to report the status in case of error with more granularity.
Following new status codes are introduced:
#define SL_STATUS_ZIGBEE_ID_DISCOVERY_FAILED ((sl_status_t)0x0C1F) ///< Node ID discovery failed.
#define SL_STATUS_ZIGBEE_NO_APS_ACK ((sl_status_t)0x0C20) ///< Message was sent but no APS ACK received.
#define SL_STATUS_ZIGBEE_APS_MESSAGE_CANCELED ((sl_status_t)0x0C21) ///< APS message was canceled.
#define SL_STATUS_ZIGBEE_ID_DISCOVERY_NOT_ENABLED ((sl_status_t)0x0C22) ///< Node ID discovery not enabled.
#define SL_STATUS_ZIGBEE_ID_DISCOVERY_UNDERWAY ((sl_status_t)0x0C23) ///< Message was not sent, Node ID discovery is underway.
#define SL_STATUS_ZIGBEE_SEND_UNICAST_ROUTE_DISCOVERY_UNDERWAY ((sl_status_t)0x0C24) ///< The message was not sent because a route discovery is currently underway. There is no route to the target until the route discovery completes.
#define SL_STATUS_ZIGBEE_SEND_UNICAST_FAILURE ((sl_status_t)0x0C25) ///< Radius is 0 or message has been dropped because route request failed or failed to submit message to tx queue.
#define SL_STATUS_ZIGBEE_SEND_UNICAST_NO_ROUTE ((sl_status_t)0x0C26) ///< No active route to the destination.
#define SL_STATUS_ZIGBEE_BROADCAST_TO_SLEEPY_CHILDREN_TIMEOUT ((sl_status_t)0x0C27) ///< Broadcast message timeout while waiting for sleepy children to poll.
#define SL_STATUS_ZIGBEE_BROADCAST_RELAY_FAILED ((sl_status_t)0x0C28) ///< Expected a neighbor to relay the message, but none did.The existing status codes that already get reported by the sent handler are listed here:
#define SL_STATUS_OK
#define SL_STATUS_FAIL
#define SL_STATUS_MAC_NO_DATA
#define SL_STATUS_CCA_FAILURE
#define SL_STATUS_MAC_NO_ACK_RECEIVED
#define SL_STATUS_TRANSMIT_INCOMPLETE
#define SL_STATUS_ZIGBEE_DELIVERY_FAILED
#define SL_STATUS_ZIGBEE_APS_ENCRYPTION_ERROR
#define SL_STATUS_ALLOCATION_FAILED
#define SL_STATUS_ZIGBEE_IEEE_ADDRESS_DISCOVERY_IN_PROGRESS
#define SL_STATUS_ZIGBEE_KEY_NOT_AUTHORIZED
#define SL_STATUS_NOT_FOUNDAdded new plugin feature: zigbee_memory_usage and zigbee_memory_usage_cli
This component provides APIs and CLI commands for monitoring heap memory usage in Zigbee and Multiprotocol SoC and NCP applications. It allows applications to query the total heap size, current used heap size, and high watermark values both at runtime and immediately after initialization. This enables developers to track memory usage trends and optimize resource allocation. The CLI prints current and initialization-time heap statistics, while the API exposes functions for programmatic access to these metrics.
Enhancements#
Enhanced Multi Rail Demo Component initialization
The initialization of the Multirail Demo component initialization is enhanced to check presence of BLE component in the application project and allocate the third RAIL state buffer, if available, to be used by the multi rail demo plugin. That way it always leaves the second RAIL state buffer for BLE and as the 1st state buffer is always consumed by Zigbee stack in a Zigbee-BLE DMP application.
Added CLI commands in zigbee_network_creator_security.slcc to toggle Allow TC Rejoin With Wellknown Key
Added commands to control allowing of Trust Center rejoin with well-known key, along with a timeout.
Added command to toggle RequireInstallCodesOrPresetPassphrase
Added command to toggle TC require install code policy and introduced new stack APIs sl_zigbee_set_join_uses_install_code and sl_zigbee_get_join_uses_install_code.
Two new applications have been added
Zigbee - NCP CPC over UART link (zigbee_ncp_cpc_uart.slcp) and Zigbee - NCP CPC over SPI link (zigbee_ncp_cpc_spi.slcp).
These are single protocol zigbee applications that connect to the NCP over a CPC connection.
Enhancements to ZLL initialization for Zigbee Matter Light joining matter fabric
ZLL initialization causes long delays in Zigbee Matter Light reconnecting to Matter Fabric. The sl_zigbee_af_zll_unset_factory_new() API has been added to allow applications to unset a Zigbee node from the default factory new state when necessary. A callback, sl_rail_mux_invalid_rx_channel_detected_cb(), has been added to Zigbee+OT applications. This callback notifies the application when there has been an attempted RX on two different channels while concurrent listening is not enabled. The application can then implement its own logic to handle this situation.
Enhancements to Zigbee packages structure
SLC "package" field values for components related to Zigbee and OpenThread have been adjusted in preparation for an upcoming SDK release format change in future.
Enhancements to Network creator
The Network Creator component has been updated to perform an energy scan followed by an active scan when determining a channel and PAN ID on which to form a network.
Enhancements to network steering
The VERIFY_TCLK state has been removed from the Network Steering plugin. This state was made obsolete, since the entire Trust Center Link Key update procedure as described in Zigbee 3.0, which comprises of the Node Descriptor, Request Key, and Verify Key exchanges, is handled by the stack. The end result of the TCLK exchange is handled by Network Steering via additional sl_zigbee_af_update_tc_link_key_status_cb invocations.
Zigbee Direct enhancements
Re-enabled the support for Curve 25519 in Zigbee Direct Device Light application.
Legacy Network functionality for Zigbee Direct Device is now supported.
Increased zigbee AF task stack and BT event handler stack size to fix device crash issue.Implement decryption of Tunnel command frame contents using the well-known global key for centralized security networks. An underlying bug, where the entire contents of input to sl_zigbee_sec_man_aes_ccm_extended was not copied over IPC was fixed. The API expects length+mic_length bytes of input to be copied over in the case of decryption. The doxygen for the API reflects to show this change.
Zigbee Throughput component enhancements
An optional uint8_t argument is added to the start command of the Zigbee Throughput component to configure its behavior regarding clearing counters. Calling "plugin throughput start 0" will leave counters uncleared, so testing that involves checking these values will work as intended in cases where counting may begin before the test starts.
Removed Features#
None.
Deprecated Features#
Deprecated Feature | Planned Removal Date |
---|---|
The Zigbee Classic Key Storage component will be removed in a future release. This component handles storing encryption keys in plaintext NVM3 tokens. Future versions of software will instead use the Zigbee Secure Key Storage component, where keys are stored in PSA storage. See AN1311 for more information on PSA storage. Users will note that there already exists a Zigbee Secure Key Storage Upgrade component to move keys from classic key storage (NVM3 tokens) to secure key storage (PSA). | June 16, 2026 |
API Changes#
New APIs | Modified APIs | Removed APIs | Deprecated APIs
New APIs#
New API Signature | Deprecated API replaced by this (if any) |
---|---|
sl_status_t sl_zigbee_send_raw_message_with_tag(const uint8_t *message, uint8_t message_length, sl_zigbee_transmit_priority_t priority, bool useCca, uint8_t messageTag); This is similar to sl_zigbee_send_raw_message, but accepts a messageTag for outgoing message and the same tag referred in the message sent callback. | |
sl_zigbee_af_zll_unset_factory_new() API has been added to allow applications to unset a Zigbee node from the default factory new state when necessary. | |
sl_zigbee_gp_clear_proxy_table(void); void sl_zigbee_gp_proxy_table_remove_entry(uint8_t index); To allow the management of green power proxy table directly by an advanced users two new public APIs are introduced void | |
bool sl_zigbee_af_green_power_cluster_gp_sink_close_commissioning_window(void); Added following new Application framework API in green power server to close a commissioning session. | |
void sl_zigbee_set_join_uses_install_code(bool enable); Enables/Disables TC to allow joining of a device through install code only. | |
bool sl_zigbee_get_join_uses_install_code(void); Return true if the TC only allows joining of a device through install code. | |
sl_status_t sl_zigbee_af_tc_link_key_update_now(void); |
Modified APIs#
Old API | Modified |
---|---|
sl_zigbee_af_gpep_incoming_message_cb(GP_PARAMS) | sl_zigbee_af_gpep_incoming_message_cb(sl_zigbee_gp_params_t *param) |
sl_zigbee_af_ncp_gpep_incoming_message_handler(GP_PARAMS) | sl_zigbee_af_ncp_gpep_incoming_message_handler(sl_zigbee_gp_params_t *param) |
sl_zigbee_gpep_incoming_message_handler(GP_PARAMS) | sl_zigbee_gpep_incoming_message_handler(sl_zigbee_gp_params_t *param) |
sl_zigbee_af_set_t_c_link_key_update_timer_milli_seconds | sl_zigbee_af_set_tc_link_key_update_timer_ms |
Removed APIs#
None.
Deprecated APIs#
None.
Bug Fixes#
ID | Issue Description | GitHub / Salesforce Reference (if any) | Affected Software Variants, Hardware, Modes, Host Interfaces |
---|---|---|---|
1312098 | Fixed an issue where certain packets with invalid data regarding the APS frame size could cause the Zigbee stack to assert if received. | None |
|
1369186 | Allow users to configure Address Table Size (macro SL_ZIGBEE_ADDRESS_TABLE_SIZE) via zigbee_pro_stack component inside Simplicity Studio. | None |
|
1376690 | An issue was fixed where uninitialized values in Zigbee IPC commands carry garbage values. | None |
|
1377518 | Fixed a CPC EZSP buffer TX/RX memory leak issue on NCP when running using zigbee_ncp_cpc component. | None |
|
1377754 | Fixed a race condition issue where Zigbee IPC commands returned before the Zigbee task woke up and executed the current IPC command. This led to unexpected behavior due to using incorrect IPC command results. | None |
|
1379738 | Fixed a memory alignment issue for CSL Tx Buffer. | None |
|
1381092 | Fixed the gateway prompt string gets truncated when executing a command on the host. Fixed intermittent failure on command input truncation. | None |
|
1383925 | Fixed an issue to remove the children immediately from the source route table of its parent after it left the network. | None |
|
1385096 | Fixed an assertion issue on CPC NCP when the Host tried to connect to it multiple times. | None |
|
1385689 | Fixed an issue that caused the network steering to call network_found infinitely when too many beacons are present. This was achieved by clearing the scan state appropriately. | None |
|
1385996 | Fixed a compiler warnings in throughput.c. | None |
|
1390107 | Fixed Multi network didn't work when using Zigbee IPC component. | None |
|
1393842 | By increasing SL_BT_RTOS_EVENT_HANDLER_STACK_SIZE the Zigbee BLE - DirectDeviceLight doesn't crash anymore. So the config option SL_MBEDTLS_PSA_ASSUME_EXCLUSIVE_BUFFERS was disabled. | None |
|
1407954 | Fixed an issue that caused the watchdog reset while rebooting applications that are configured with a large proxy table size. | None |
|
1408816 | Fixed the missing restriction issue in Time Server cluster implementation. | None |
|
1409453 | Removed Simple LED component from dependency list of Zigbee Identify Feedback. | None |
|
1409871 | Fixed an issue that caused an assert during execution of level control cluster Step command. The issue was caused mainly because the updated temporary value for each step was not stored and read back correctly during step iteration and the minimum level should 0 instead of 1. | None |
|
1410670 | An issue has been fixed where the Slot Manager component failed to compile if the application did not include CLI. | None |
|
1412141 | Fixed some warnings showing up when enabling lto flag. | None |
|
1412866 | An issue has been fixed where a Zigbee 3.0 joining device would fail to successfully update its Trust Center Link Key with the trust center. | None |
|
1413451 | Fixed an issue that caused wrong format in GP Pairing Configuration packet. | None |
|
1415014 | Fixed an issue that caused redundant bytes after Status field in Routing table Response packet when it's not supported. | None |
|
1420830 | An issue exposed when using the Multi-Network feature in conjunction with the Sleepy-to-sleepy feature has been fixed. The issue resulted in s2s target not responding after joining successfully on secondary network. | None |
|
1421368 | Fixed an issue that caused incorrect behavior in copying message payload in sli_zigbee_stack_raw_transmit_complete_handler when RTOS is used. | None |
|
1424260 | Added brd4194a to backlist for SleepyToSleepyShades app. | None |
|
1424600 | Fixed an issue where OTA client fetched the same image again and again when Delete Failed Downloads option set to false. | None |
|
1426766 | Fixed an issue by increasing the waiting time to 5000 msec to allow receiving RSTACK frame after NCP resets. | None |
|
1426899 | An issue exposed when using the Multi-Network feature in conjunction with the Sleepy-to-sleepy feature has been fixed. The issue resulted in network decryption failures on one of the networks when attempting to bring up the second network. | None |
|
1430460 | Fixed issue where S2S shades was not able to receive data from target on primary network if the secondary network on the shades failed to join another network. | None |
|
1431513 | Fixed null terminated string when using info command. | None |
|
1434650 | This fixed the issue of sink's handling the pairing configuration command with action remove pairing - groupcast receiving from a proxy. | None |
|
1435112 | Fixed an issue where sl_zigbee_gp_proxy_table_process_gp_pairing did not appear to be IPC-safe. | None |
|
1442296 | Fixed duplicate APIs declaration when enabling green power adapter. | None |
|
1442317 | Fixed an issue where the host app crashed when trying to leave network. The Green Power NCP was configurated with a large number of GP table size. | None |
|
1442467 | Added upgrade rule to replace zigbee_pro_stack_rail_mux by zigbee_pro_stack. | None |
|
1446979 | SL_ZIGBEE_ZIGBEE_PACKET_TYPE_INTERPAN has been renamed to SL_ZIGBEE_PACKET_TYPE_INTERPAN_ZLL. Added new SL_ZIGBEE_PACKET_TYPE_INTERPAN macro for general interpan message identification. | None |
|
1446980 | The following callback names have been changed: sl_zigbee_af_incoming_packet_filter_cb → sl_zigbee_pre_incoming_packet_filter_cb (privileged); sl_zigbee_af_outgoing_packet_filter_cb → sl_zigbee_pre_outgoing_packet_filter_cb (privileged) | None |
|
1446981 | Two new callback functions have been introduced: sl_zigbee_post_incoming_packet_filter_cb() and sl_zigbee_post_outgoing_packet_filter_cb(). These are called over IPC after the packet has been processed. | None |
|
1453733 | Fixed an issue where builds using the zigbee_force_sleep_and_wakeup component would fail to compile with RTOS enabled. | None |
|
Chip Enablement#
Chip Family | OPNs / Boards / OPN Combinations | Supported Software Variants (if applicable) | Supported Modes | Supported Host Interfaces |
---|---|---|---|---|
xGM26 |
|
NA |
|
UART |
xGM27 |
|
NA |
|
UART |
xG29 |
|
NA |
|
|
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 - NCP CPC over UART link (zigbee_ncp_cpc_uart.slcp). See readme (with link) |
These are single protocol Zigbee applications that connect to the NCP over a CPC connection. | All NCP Variants. |
|
|
UART |
Zigbee - NCP CPC over SPI link (zigbee_ncp_cpc_spi.slcp). See readme (with link) |
These are single protocol Zigbee applications that connect to the NCP over a CPC connection. | All NCP Variants. |
|
|
SPI |
Modified Examples#
None.
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 |
---|---|---|---|---|
1391252 | Sub-GHz duty cycle calculations didn't properly account for 32-bit system timer rollover in timing bucket comparisons, which could result in a duty-cycle.c assert violation. | None | None |
|
1393428 | The Zigbee BLE - DirectDeviceLight sample project requires the config option SL_MBEDTLS_PSA_ASSUME_EXCLUSIVE_BUFFERS to be enabled. | None | None |
|
1429960 | 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 |
|
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 |
|
1064370 | The Z3Switch sample application has one button(btn1 instance) that leads to button description does not match the operation out of box. Workaround: Install the btn0 instance manually during Z3Switch project creation. | None | Install btn0 instance manually during Z3Switch project creation. |
|
1273486 | Fixed a build issue with duplicate definition of RAILCb_AssertFailed. | None | None |
|
1439479 | Added the ability for a CSL receiver to register commands from multiple CSL initiators. | None | None |
|