Custom Silabs Zigbee firmware manifests for dense meshes, built via the Nerivec/silabs-firmware-builder toolchain. Not a fork. The upstream repository is cloned at CI runtime; this repository contains only the delta: our manifest YAMLs, a workflow, and docs.
- Open the Releases page.
- Pick the latest
build-YYYYMMDD-HHMMSSrelease. - Download the
.gblfile matching your device (filename includes manifest name, e.g.smlight_slzb06mu_dense_zigbee_router_*.gbl). - Flash using your vendor's tool. For SMLIGHT SLZB-06 series via the
device's web UI:
- Open
http://<device-ip>/and upload via the Firmware page, or - Scripted:
curl -F "update=@firmware.gbl" "http://<device-ip>/fileUpload?customName=/fw.bin" curl "http://<device-ip>/api2?action=6&zbChipIdx=0&local=1&fwVer=-1&fwType=0&baud=0&fwCh=1"
- Open
- Drop
manifests/<vendor>/<name>.yaml— see the existing dense-router manifest as a template. Thebase_projectfield must reference a directory that exists in the upstream branch pinned byupstream.conf(e.g.src/zigbee_router). All customization goes throughslcp_defines,configuration,c_defines, andadd_components— nosrc/patches in this repo. - PR, review, merge.
- Actions → Build firmwares → Run workflow.
Requires Docker and about 15 GB of free disk for the toolchain image on the first run. Subsequent runs pull the cached image from our ghcr.
./scripts/build-local.sh manifests/smlight/smlight_slzb06mu_dense_zigbee_router.yamlOutput lands in ./tmp-out/. The script clones upstream, computes the same
Docker image tag CI uses, pulls it from ghcr.io/alexmkx/zigbee-dense, and
invokes tools/build_project.py in the container. If the image is not yet
in ghcr (e.g. after bumping upstream.conf before any CI run), the script
builds it locally from the upstream Dockerfile.
upstream.conf pins the Nerivec branch:
UPSTREAM_REPO=https://github.com/Nerivec/silabs-firmware-builder
UPSTREAM_BRANCH=sisdk-2025.12.x
Bump = one-line PR. The first CI run after a bump rebuilds the Docker image (~15-20 min); subsequent runs reuse it (~5 min).
If a fix requires changing src/ in upstream (app.c, zap files, SDK
patches) — open a PR against upstream first. This repository does not
carry src/ patches.
MIT. Upstream toolchain and Silabs SDK are licensed by their respective vendors.
Each release publishes two GBLs for the SLZB-06MU router:
| GBL suffix | Debug print |
|---|---|
smlight_slzb06mu_dense_zigbee_router_*.gbl |
off |
smlight_slzb06mu_dense_zigbee_router_debug_*.gbl |
on |
The debug build enables compile-time debug print groups STACK, CORE, APP and ZCL, so the EFR32 emits diagnostic lines on USART0 (PB1 TX, PB0 RX).
SLZB-OS only exposes the EFR32 UART on TCP 6638 when the device is in
Zigbee2MQTT-TCP coordinator mode (coord_mode=1). To capture logs:
- In SLZB-OS UI → Zigbee → Working mode → switch to "Zigbee2MQTT / TCP socket". Reboot when prompted.
nc <device-ip> 6638 | strings— text lines will stream as the firmware emits them.- When done, switch the device back to "Zigbee Router" mode so it rejoins the mesh as a router.
Important: while in TCP coordinator mode the device is not acting as a router. Switch back as soon as the capture session is done.