BETA — Open to testers. Tell us what to fix on @vomehome or via a tester code.

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:

  1. Thread is its own radio network. It is not your Wi-Fi, even though it also uses 2.4 GHz.
  2. Pairing uses Bluetooth Low Energy. The Thread radio is not involved until credentials have already been handed over.
  3. 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".

Matter the language the bulb speaks Thread IEEE 802.15.4 mesh IPv6, ~250 kbps, not Wi-Fi Wi-Fi your access point also Matter, different radio
Same Matter, two radios. A Thread bulb will never appear on your Wi-Fi client list. A Wi-Fi Matter bulb never joins the Thread mesh.

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.

Wi-Fi — a star AP every device talks to the router Thread — a mesh BR devices forward for each other
The border router (BR) is the one node that also speaks Ethernet. Without it the mesh is a private island: lights can still talk to each other, and nothing in Home Assistant can reach them.

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.

1. Scan 2. BLE 3. Dataset 4. Join mesh 5. Done QR / setup code phone or proxy Thread credentials 802.15.4 BLE unused Bluetooth is only step 2. Everything after that is Thread over IPv6. Failing at the QR scan never reached the mesh. Hanging on "checking connectivity" already joined it.
This is why "needs a border router" at scan time is usually a Bluetooth or credentials problem, and why the same words later — "checking connectivity to Thread network" — mean the mesh is up and IPv6 is not being forwarded.

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.

Phone Wi-Fi Bluetooth LE no Thread radio Bulb Bluetooth LE 802.15.4 no Wi-Fi Border router 802.15.4 Ethernet no Bluetooth needed BLE Thread Pairing: phone ↔ bulb over Bluetooth. After that: bulb ↔ border router over Thread. The phone stays on Wi-Fi so it can reach Home Assistant, not so the bulb can.
Guest Wi-Fi and mobile data both fail here: the phone has to reach Home Assistant and the border router on the house LAN. The bulb never uses that path.

Other things the box never says

Zigbee is also 802.15.4. Same radio family, different protocol, different network. They do not mesh together.

Zigbee IEEE 802.15.4 not IP coordinator stick a Thread bulb is invisible Thread IEEE 802.15.4 IPv6 only border router a Zigbee stick is useless Wi-Fi IEEE 802.11 IPv4 and IPv6 access point no Thread SSID exists
Same 2.4 GHz band. Three networks. Flashing a dongle for Thread means it stops being a Zigbee stick. A Thread bulb will never appear on your Wi-Fi client list.

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

  1. Put a radio on the LAN — build a Thread border router.
  2. 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.
  3. If the hosted instance cannot even see the border router, the tunnel is not carrying IPv6 — HomeLink L2.
Rather not do this alone?
The Vome assistant will walk you through this guide a step at a time, and can do some of it for you.
Sign in for AI help

Something wrong or missing here? Tell us — these pages are written from real work, so corrections are welcome.