How Thread and Matter actually work
Thread is not Wi-Fi. Pairing is not Thread. A border router is not Home Assistant. The bits the box never tells you, with pictures.
Updated 26 August 2026 matterthreadhow-to
Three facts that are true and almost never written down first:
- Thread is its own radio network. It is not your Wi-Fi, even though it also uses 2.4 GHz.
- Pairing uses Bluetooth Low Energy. The Thread radio is not involved until credentials have already been handed over.
- Matter is the language; Thread is one of the roads it can travel. A Matter bulb on Wi-Fi and a Matter bulb on Thread speak the same app protocol over completely different radios.
If those three are in place, the rest of the setup is configuration. If any one of them is missing, every error message will blame a "border router".
What network Thread uses
IEEE 802.15.4 at 2.4 GHz. That is the same band as Wi-Fi, and a different protocol: short range, low power, about 250 kilobits per second. Fine for a bulb or a sensor. Not a camera.
Devices form a mesh. Each one that is mains-powered can forward for its neighbours, so the network grows as you add lights rather than depending on line of sight to one dongle. The traffic is IPv6 (6LoWPAN). There is no IPv4 on Thread at all.
What the border router is for
The radio has to sit in the house, next to the devices. A hosted virtual machine cannot grow an antenna. Home Assistant holds the dataset — the credentials for that mesh — and talks to the border router over ordinary IP. The border router is the translation: 802.15.4 on one side, Ethernet on the other. Ours is a Sonoff MG24 on an Orange Pi.
Pairing is Bluetooth. Day-to-day is Thread.
A factory-fresh bulb has no Thread credentials. It cannot join the mesh because it does not know the network key, PAN ID or anything else. Those are handed over out of band, over Bluetooth Low Energy, after you scan the QR code.
Once the dataset is on the device it joins Thread, and Bluetooth is finished with it. Turning the light on and off later never uses BLE.
The companion app on either platform can do this part with the phone's own Bluetooth, and then hands Home Assistant a device already on the network. We had it written here that Android instead routes commissioning through the server's Bluetooth stack; a commissioning we logged in August 2026 did not, so treat that as unsettled.
A hosted VM has no radio of its own, so the intended answer is
an ESPHome Bluetooth proxy
(ble_proxy on the Matter Server add-on, Home Assistant 2026.06 or later).
In practice the web interface currently sends you to the companion app, and
the phone does the Bluetooth hop.
IPv6 is not optional
Thread is IPv6-native. Matter discovery is IPv6 multicast. A border router that cannot forward IPv6 between the LAN and the mesh will let a device join (you will see a new neighbour in the radio table) and then hang the phone on checking connectivity to Thread network.
IPv4 working — Chromecast, ordinary mDNS, ping — proves nothing about this path. See when devices are not discovered.
Three radios, and they do not share a network
A phone has Wi-Fi and Bluetooth. A Thread bulb has Bluetooth (for pairing) and 802.15.4 (for everything after). The border router has 802.15.4 and Ethernet. There is no step where the bulb joins your Wi-Fi, and there is no step where the phone talks Thread.
Other things the box never says
Zigbee is also 802.15.4. Same radio family, different protocol, different network. They do not mesh together.
Battery devices do not grow the mesh. Only mains-powered nodes typically forward for their neighbours. A battery sensor is a child: it speaks to a parent and sleeps. Put the first bulbs near the border router; the sensors can come later.
Joining Thread is not joining Matter. Thread is the radio network. Matter is a fabric on top — Home Assistant's, Apple's, Google's. A device can be on the mesh and still unknown to Home Assistant until commissioning finishes. "I can see it in the border-router table" is not the same as "it is a light entity".
Home Assistant finds the border router by mDNS, service _meshcop._udp,
over IPv6. That is why a routed VPN is not enough, and why a sixty-second
packet capture can lie: the service is announced, then quiet. See
HomeLink L2.
What sits where
| In the house | In Home Assistant |
|---|---|
| 802.15.4 radio (the border router) | Thread dataset (the credentials) |
| Bluetooth for pairing (phone or BLE proxy) | Matter Server (the commissioner) |
| The mesh itself, including every bulb that has joined | The entities, automations, UI |
A hosted Home Assistant can hold the right-hand column. It cannot hold the left. That is the whole of Thread and Matter with a hosted Home Assistant.
Do the thing
- Put a radio on the LAN — build a Thread border router.
- Give Home Assistant a Bluetooth path and pair — commission Matter with a Bluetooth proxy if you have ESPHome proxies, otherwise adding a Matter-over-Thread device.
- If the hosted instance cannot even see the border router, the tunnel is not carrying IPv6 — HomeLink L2.