Commissioning is a relationship, not a one-time scan
Scanning a QR code feels like the whole job. It is not. Once the pairing screen closes, Matter Hub and the controller you just added still have a fabric, a session and a subscription to keep alive between them — and each of those three can break on its own, long after the code has been forgotten. This part builds the mental model for multi-fabric commissioning in general, then walks the specific case almost everyone hits first: onboarding into Apple Home, tidying it up afterward, and reading a No Response card without reaching for a reset.
Matter Hub is not a second controller. It is what the controller is about to trust
Matter Hub is a Matter bridge: it turns Home Assistant entities into one bridge and the endpoints underneath it, so a Matter controller — Apple Home, Google Home or Amazon Alexa — can onboard it into its own home. It does not replace the controller you already run, and it does not hand your Home Assistant areas, automations or Dashboard to that controller wholesale. Home Assistant stays the source of truth for the underlying entities; Matter Hub only handles the mapping and the protocol translation.
Commissioning is the step that onboards the bridge into a controller's home. It is easy to read the pairing screen closing as "done", but what actually happens is that the controller and the bridge establish a trust relationship they will keep re-verifying for as long as the pairing lasts. The fabric, the secure session and the subscription do not stop existing once the screen closes — they are the ongoing relationship, not a receipt for a completed transaction.
The goal across this part is to get you identifying which layer actually failed, then making the smallest change that fixes it — instead of resetting your way to a guess.
A mental model from bridge to state reporting
Five things have to be true, in this order, for a controller to reliably show and control a device through Matter Hub. Each one is a distinct thing that can fail on its own, and none of them proves the one after it is also working.
| Layer | What it means | How it usually fails |
|---|---|---|
| Bridge / endpoint | The bridge is the Matter node that gets commissioned; Home Assistant entities map onto the endpoints underneath it. | Every device disappears, or the device types come out wrong. |
| Commissioning window | A limited-time window that lets a new controller establish trust. Matter Hub opens the first one itself; after that, a controller already in the fabric has to open pairing mode for the next one. | The app cannot find the accessory, or the pairing data gets rejected. |
| Fabric | One administrative domain and the certificate relationships inside it. The same bridge can belong to several fabrics at once. | One ecosystem goes offline while the others stay perfectly fine. |
| Session | A recoverable secure communication session between one controller and the bridge. | Control times out for a while, and may come back on its own later. |
| Subscription | The controller subscribes to attribute and event changes so that new state gets pushed to it. | Control still works, but the app's state lags behind or sticks on an old value. |
flowchart TD A["Bridge / endpoint — is Matter Hub running, with the right entities mapped?"] --> B["Commissioning window — can a new controller discover it right now?"] B --> C["Fabric — has trust already been established with this controller?"] C --> D["Session — is there a live secure connection between them right now?"] D --> E["Subscription — is state actually being pushed to that controller?"]
A fabric is being handed a key to the building. A session is that key actually being in the lock right now, with the door open. A subscription is asking the front desk to forward your mail as it arrives instead of making you walk down and check the pigeonhole yourself. You can hold the key without the door being open at this exact second, and the door can be open while your mail still is not being forwarded — three separate things, three separate ways for one of them alone to stop working.
A fabric is not "a user account inside one home," and a session is not a fabric. Several family members sharing one Apple home are usually still a single Apple fabric; it is adding Google Home or Amazon Alexa that creates a second, independent fabric. The rooms, display names, household members and automations inside any one controller's app belong to that controller alone — multi-fabric shares the bridge's device capabilities and state, not that household data model, and none of it copies itself across to another ecosystem.
The checklist first, then the safety line around the code itself
What has to be true before you open a commissioning window
| Item | What you must confirm | What you see if it is not true |
|---|---|---|
| Controller device and account | For Apple Home: the iPhone or iPad is signed in to the account you plan to use, and the Home app opens the target home normally. | You join the wrong home, or you get no permission to add an accessory at all. |
| Home hub | Apple Home in particular needs a home hub Apple officially supports, with current software and online. | Remote control, automations and the long-term connection all become unstable. |
| Local network | The phone, the home hub (if any) and Matter Hub can all reach each other over local IPv6, and can discover each other over mDNS. | The accessory is never found, the join times out at the end, or you get intermittent No Response later. |
| Matter Hub itself | The Stable 2.0.55 bridge is running, its persisted data is backed up, and the basic endpoint mappings are already correct. | No devices appear after a successful scan, or the identity changes after a restart. |
| Change freeze | During commissioning, do not change the port, the network interface, filters, the bridge name, or the mappings in bulk. | You lose the ability to tell whether a problem came from onboarding or from a structural change you made at the same time. |
Where the safety line runs around the code itself
A QR code and a manual pairing code are the sensitive entry point that lets a new controller into the commissioning flow. Treat them as exactly that: use one only between the local Matter Hub admin screen and the official controller app you are actively pairing with. Never paste one into chat, a support ticket, a public screenshot, a log attachment or a repository — and redact it fully in any screenshot you keep for your own notes, rather than covering only part of it.
- The first QR code: scan the Matter Hub screen directly with the first controller's official app wherever you can. Do not download it, forward it, or photograph it for later — and it cannot be reused to join a second fabric anyway.
- Manual entry afterward: find the bridge you already onboarded inside the first controller, open its pairing mode to get one-time data, and type that into the second controller's numeric-code entry point. This guide does not show an example value, and neither does the source it is built from — a pairing code is never something worth typing out even as a placeholder.
- Where you do it: avoid screen sharing, screen recording, or onlookers. Keep pairing mode open only for as long as the addition actually takes, and do not retain the data afterward.
- What your troubleshooting notes should hold: the time, the bridge name, the controller type, the stage it failed at, and a redacted error — never the pairing data itself, and never an internal identifier.
flowchart TD
A["Adding a controller to this bridge"] --> B{"Is any controller already joined to it?"}
B -->|"no — this is the first one"| C["Scan the QR code on the Matter Hub pairing screen directly"]
B -->|"yes — this is an additional fabric"| D["Open pairing mode from the controller that is already joined"]
D --> E["Type the one-time manual code into the new controller's entry point"]
C --> F["Fabric established for that controller"]
E --> F
Keep the release channel, the maturity, and the controller's own support separate
| Fact | Conclusion for Stable 2.0.55 | Do not infer |
|---|---|---|
| Release channel | This part is based on the Stable code at tag v2.0.55, pinned to an exact commit, plus a pinned add-on build. | That the Alpha channel, the Testing channel, or a later version behaves the same way. |
| Product maturity | Bridge commissioning, fabric health information and the orphan cleanup workflow are all present in Stable, and the ordinary bridge flow is a mature feature. | That every device type inside Stable is equally mature just because it appears there. |
| Experimental features | Server Mode with several entities does appear in Stable, but it is documented as an experimental feature inside the Stable channel. | That you can promise production support for it, or that it behaves exactly like an ordinary bridge. |
| Controller support (general) | Whether a bridge, a device type, or a cluster is accepted is still decided by the controller and its own version. | That a successful onboarding guarantees every endpoint, attribute and event gets shown somewhere in the app. |
| Apple controller support (specific) | Apple documents that the Home app can add Matter accessories, and which categories are supported depends on the Apple platform version installed. | That every mapping Matter Hub produces is Apple-certified — the upstream manifest marks Apple support as unknown for most individual types. |
So an established fabric only proves the trust relationship exists. A session only proves a communication channel exists right now. A subscription comes closest to proving continuous reporting is happening. None of the three is a substitute for actually testing display, control and state reporting yourself, on every representative device type.
Reading Apple-specific support without over- or under-claiming it
Apple's own list of supported Matter categories gives you a ceiling for the ecosystem, but what actually shows up in the Home app also depends on the Apple platform version, the home hub's version, the device type and clusters the bridge declares, and how well that particular endpoint is mapped. "The Matter specification defines it" is not the same claim as "the Home app has a complete UI for it."
- Lights, plugs and switches: a good first baseline. Still verify on/off, brightness, color temperature and color separately — a card appearing is not the same as every attribute working.
- Covers, locks and thermostats: these carry position, direction, safety or mode semantics. Verify a small number first, and do not stop at whether the card merely appears.
- Sensors: you may see the value in the accessory details and still get no card on the home screen, no notification, and no way to trigger an automation from it.
- Vacuums and newer types: support and UI are sensitive to the Apple system version in use. If the Matter Hub side is a partial Matter 1.4 mapping, label the result experimental in your own notes as well.
- Camera and Security plugins: these are experimental plugins inside the Stable channel. Do not claim full support just because Apple Home happens to have a similar accessory category.
A safe multi-fabric join procedure, controller by controller
These eight steps apply whichever controller you are adding — Apple Home, Google Home or Amazon Alexa. The next section walks the Apple-specific screens for step 3 in more detail; the sequence itself does not change by ecosystem.
-
Step 1
Pin down the bridge's identity and contents first
Open Bridges in Matter Hub, confirm the target bridge is running and its name is one you recognize, and cross-check the endpoints you expect to expose in Devices or in the filter preview. Do not change the name, the port, the filter, or the mapping while you are commissioning.
-
Step 2
Back up and record the current working baseline
Back up the persisted data the way your deployment requires. Record only the bridge name, which controllers are already attached, the rough device count, and your test results — never pairing data or internal identifiers.
-
Step 3
Add the primary controller first
Open the commissioning window in the bridge's pairing area, then in the primary controller's app choose to add a Matter accessory and scan the local QR code — use manual entry only when the camera genuinely cannot read it. When it finishes, confirm the bridge and a few representative endpoints are visible.
-
Step 4
Verify state in both directions
Toggle one low-risk light or switch from the controller and confirm the Home Assistant state updates. Then operate the same device from Home Assistant and confirm the controller both reflects the control and receives the state change back.
-
Step 5
Open pairing mode from the primary controller
In the first controller's home settings or bridge details, find the bridge you already onboarded and open pairing mode. It produces the one-time manual data the next controller needs — do not rescan Matter Hub's first QR code, and do not save or forward what it produces.
-
Step 6
Enter that one-time data in the next controller
Add one new fabric at a time. In the second app's Add Matter device flow, choose the numeric-code or manual entry point and type in exactly what the first controller is showing at that moment. As soon as it finishes, test display, control and state reporting again.
-
Step 7
Tidy up rooms and names in each ecosystem
Sort rooms and display names out separately inside each ecosystem. Do not expect the first controller's rooms, automations, or household members to sync across to the second.
-
Step 8
Close the change window and watch
Once every addition is done, stop changing the bridge's structure, and watch each fabric's session and subscription through a restart and a stretch of ordinary use. Keep this working baseline so you have something to compare against later.
sequenceDiagram participant K as Controller participant M as Matter Hub K->>M: scan the QR code, open the commissioning window M->>K: exchange certificates, create the fabric K->>M: establish a secure session M->>K: begin the subscription to attribute and event changes
The Apple-specific screens behind step 3, and what to do right after
This walks the same territory as step 3 above, but with the actual Home app screens named. Onboard a small number of devices and let them settle first — do not bridge every entity you own on day one.
-
Step 1
Prepare a minimal bridge
Open the target bridge on the Matter Hub Bridges page and confirm it is running. Use Devices to cross-check that it holds only the entities you expect. Keep one low-risk light or switch as your verification target, and hold off on adding special device types for now.
-
Step 2
Open the commissioning window
The bridge's pairing area shows the QR code for this session. Do not download it, screenshot it, forward it, or put it in a support ticket. Only reach for the Home app's manual entry option if the camera genuinely cannot scan it.
-
Step 3
Add the accessory from the Home app
On the iPhone, open Home, choose Add Accessory, and scan the QR code on the local Matter Hub screen. If you see an Uncertified Accessory notice or a security prompt, confirm first that you are connecting to your own bridge in the right home — do not tap past it without reading it.
-
Step 4
Choose the home and wait for onboarding to finish
Follow the Home app's screens to pick the target home and room, keep the app in the foreground, and keep the phone's network connection steady. Do not restart Matter Hub, the home hub, or the router while this is running.
-
Step 5
Do the basic naming first
Give the bridge and its representative accessories names that are short, easy to say aloud, and not duplicated. Avoid a room name identical to an accessory name, and do not rename every endpoint one by one at this stage.
-
Step 6
Verify both directions
Toggle the test light from the Home app and confirm the state changes in Home Assistant. Then toggle it from Home Assistant and confirm the card updates in the Home app. Wait for the state report rather than tapping repeatedly to force it.
-
Step 7
Verify again after a restart
Restart Matter Hub during a normal maintenance window and confirm the same accessory comes back — not a second copy of it. If duplicates keep appearing, stop making further changes and check the bridge identity and the persisted data instead.
The order for tidying names, rooms and Siri phrases
After onboarding, tidy up room by room inside the Home app. An Apple display name is controller-side data — it does not have to match the Home Assistant entity_id, and editing entity_id to polish the voice experience is the wrong tool. Settle the Home Assistant entities and the Matter Hub mappings first, then adjust display names on the Apple side, which keeps structural changes to the bridge itself to a minimum.
| Layer | Recommendation | Example of the rule |
|---|---|---|
| Bridge name | Identify it by area or purpose. Keep versions, ports and secrets out of the name. | A role-based name such as "Ground floor core bridge." |
| Room | Assign the real physical space in the Home app. Tidy one room at a time and test it before moving on. | Living room, kitchen, meeting room. |
| Accessory name | Short, unique, and easy to say. Leave the location information to the room field, not the name. | "Floor lamp" beats a long, repetitive full-path name. |
| Service / sub-accessory | When one composed device produces several cards, work out what each card actually does before naming it. | Do not delete the original HA entity just because several cards appeared for it. |
After a rename, test once in the Home app and once with Siri. If Siri gets it wrong, resolve homophones, duplicate names, or room conflicts first — do not reset the bridge over a naming problem. In a multi-fabric setup, none of these Apple-side names sync to Google Home or Amazon Alexa.
Four actions that are easy to reach for by mistake, and four different blast radii
| Action | When it applies | Main impact | When not to do it |
|---|---|---|---|
| Remove the accessory from the controller | You are certain you only want to leave that one ecosystem, keeping the other fabrics intact. | That controller's room, name and automation links for the device may stop working. | When it is only a brief No Response and the session might still recover on its own. |
| Remove the fabric | You have confirmed an administrative relationship is no longer used, and you can identify exactly which one it is. | That fabric can no longer control the bridge. The other fabrics are independent in theory, but verify it anyway. | When you cannot tell which fabric it is, when there is no backup, or when household members still depend on it. |
| Reset Bridge | The persisted trust data is unrecoverable, you plan a full rebuild, and you accept re-commissioning every controller. | It can cut off every fabric at once and leave stale accessories on every controller side that you then have to remove one by one. | When only one endpoint misbehaves, one controller is offline, or a name or room is simply wrong. |
| Orphan cleanup | The dry run shows leftover entity identity or mapping data for entities already deleted from HA, past at least a seven-day protection period. | It only clears leftover entity identity and mapping data — not fabrics. A wrong deletion can still cost a re-appearing entity its original mapping identity. | When the HA registry has not fully loaded, the deployment disk is not mounted, a restore is unfinished, or you do not understand the candidate list. |
Removing an accessory is firing one employee. Removing a fabric is closing one department. Reset Bridge is bulldozing the whole building and everyone has to re-badge on the way back in. Orphan cleanup is shredding expired badges that nobody is using any more — it never touches a department or a person, only paperwork that outlived the person it was issued to, and only after that paperwork has sat unclaimed for a week.
Orphan cleanup clears the identity and mapping data left behind by entities permanently deleted from the HA registry. It does not clear Matter fabrics, and it is not a general connectivity fix. Stable 2.0.55 previews it with a dry run first, and uses a seven-day tombstone to reduce false positives caused by an entity vanishing briefly. If HA has not fully loaded, or the persistence disk is not mounted correctly, restore the normal deployment and data paths first — only then assess the candidates.
flowchart TD
A["Something about one controller or one device looks wrong"] --> B{"What have you actually confirmed?"}
B -->|"only want to leave one ecosystem"| C["Remove the accessory in that controller only"]
B -->|"one whole fabric confirmed unused"| D["Remove that fabric"]
B -->|"trust data unrecoverable, full rebuild accepted"| E["Reset Bridge — every fabric is affected"]
B -->|"entities deleted from HA, past the seven-day tombstone"| F["Run orphan cleanup — dry run first"]
Keep the blast radius inside one fabric as you grow
A small home can join two controllers to a single, lean bridge without issue. Once you have more devices, a mix of device types, or controllers whose capabilities clearly differ, splitting the bridge is usually easier to maintain than resetting often. Split by blast radius, by controller support, and by area — not by exposing the same entity again and again at random.
- Start with a "core bridge": put on it only the representative types every controller renders reliably — lights and switches are the usual choice.
- Give special types their own bridge: verify covers, vacuums, advanced sensors and experimental types in small batches, separately.
- Give every bridge a recognizable, stable name, and stop restructuring it once it is onboarded.
- Change one bridge, one fabric, and one type per test, so your troubleshooting evidence always points somewhere specific.
Do not reset a bridge a first controller is already using happily just because a second controller does not support some device type. Reduce what the second controller sees with a filter or a split first, and keep the fabric that already works.
Attack No Response by scope and timing, not by resetting
| Scope | Most likely layer | First action |
|---|---|---|
| The whole bridge is No Response | The Matter Hub process, the host network, IPv6 / mDNS, the home hub path, or the bridge identity itself. | Look at Bridges, Health and the redacted logs. Confirm the process is up and the persistence mount is correct. |
| Only one endpoint | An HA entity that is unavailable, the mapping, the device type, or the controller's own UI. | Cross-check the original state in Home Assistant against Matter Hub Devices. |
| It only fails when you are away | The Apple home hub, or the state of the home on that Apple account. | Check the home hub in the Home app. Do not touch the Matter fabric over this. |
| Control works, the card is stuck on an old value | The subscription, or the state mapping. | Compare the state in both directions, and wait for the subscription to recover on its own. |
| It appears briefly right after a restart | Session recovery, the startup order, or HA not being ready yet. | Watch how long it takes to settle, and read the startup log — do not restart again mid-recovery. |
When the controller's devices and Matter Hub sit on separate VLANs, being able to reach the internet does not mean Matter is reachable on the local network. Matter needs an IPv6 path and local service discovery — do not substitute a public network address, port forwarding, or pasting the QR code onto a remote machine. Once the network path is fixed, let the session recover on its own before you even consider removing the accessory.
flowchart TD
A["A controller shows No Response"] --> B{"What is the scope of the problem?"}
B -->|"the whole bridge"| C["Check the Matter Hub process, the network, IPv6 / mDNS, and the bridge identity"]
B -->|"only one endpoint"| D["Cross-check that entity's state in Home Assistant and in Matter Hub Devices"]
B -->|"only fails away from home"| E["Check the home hub itself — leave the fabric alone"]
B -->|"control works, card stuck on an old value"| F["Compare state both ways and wait for the subscription to recover"]
B -->|"clears itself soon after a restart"| G["Watch it settle and read the startup log — do not restart again"]
This is a household fuse box, not a single light bulb. If every light in the house is out, you check the main breaker, not each bulb. If one lamp is out and the rest of the room is fine, you check that one lamp, not the breaker. Resetting a bridge over a single dead lamp is replacing the whole fuse box because one bulb burned out — expensive, and it does nothing for the bulb.
Common pitfalls, general multi-fabric
| Symptom | Likely cause | What to do |
|---|---|---|
| The app cannot find the bridge at all | The commissioning window closed, or local discovery is blocked. | Confirm the bridge is running and the commissioning window is still valid, and make sure the phone and Matter Hub's network can do local IPv6 and mDNS discovery. Fix the network interface, the VLAN, or the multicast path first — do not reset. |
| It says commissioned, but the endpoints are incomplete | The controller does not accept every device type Matter Hub exposes. | Cross-check the filter, the Devices mappings, and the device types the controller actually supports. Use a plain light or switch as your reference point. |
| Only one controller shows offline | That one fabric's session or network path, not the bridge or HA. | Look at that fabric's session and subscription, that controller's own home hub, and the network path — avoid removing every fabric over it. |
| A grayed-out old accessory is still there after removal | A leftover room entry or a cached item on the controller side. | Remove the stale accessory in the original controller first; do not wipe all of Matter Hub's storage over it. |
| Orphan cleanup lists items you are not sure about | The HA registry, the persisted data, or a restore is not fully settled. | Cancel the operation. Confirm the HA registry has fully loaded and the persisted data is mounted. Reassess only once you can prove the entity was deleted from HA and its candidate has passed the protection period. |
Common pitfalls, Apple Home specifically
| Symptom | Likely cause | What to do |
|---|---|---|
| The Home app cannot find the accessory | The commissioning window closed, or local discovery is blocked. | Confirm the commissioning window is still open, the bridge is running, and the phone and Matter Hub can discover each other locally over IPv6 and mDNS. Turn off any VPN that changes the network path and retry — do not reset. |
| The join times out at the last step | The app left the foreground, or the home hub went offline mid-join. | Keep the Home app in the foreground, confirm the home hub is online and it is the right home, and stop restarting or changing the bridge at the same time. Check Matter Hub for whether an Apple fabric was already added, to avoid a duplicate. |
| You see the bridge, but not the accessories you expect | Either the mapping did not carry them, or Apple does not support that type yet. | Look at Devices and the filter to confirm the entities mapped successfully, then cross-check against the types Apple officially supports. Add a basic light as a reference point. |
| The name or the room reverts | The Apple display name, the Matter Hub Node Label, and the HA name are three separate fields. | Work out which one reverted. Change one layer only and verify it. Do not rename the HA entity_id and the bridge at the same time. |
| Duplicate gray cards appear after a removal | A cached leftover on the controller side, not a bridge problem. | Clean up the old accessory and any automation references in the Home app first. A Matter Hub reset affects the other fabrics too, so it is not the first tool to reach for over one app's cache. |
The questions that come up every time
Does multi-fabric sync rooms, names and automations between controllers?
Can a second controller just scan the first controller's QR code?
One fabric is offline. Do I have to reset the whole bridge?
When is it actually safe to use orphan cleanup?
Can I scan the code for Apple Home without an Apple home hub?
Does renaming an entity in Home Assistant update the Home app automatically?
Does a card appearing in the Home app mean full support?
When something is No Response, can I just delete it and add it back?
Can Apple Home fully support Matter Hub's experimental plugins?
Can I handle Server Mode in Stable 2.0.55 with the same steps?
Pinned-version and official sources
- v2.0.55 frontend workflows (including orphan cleanup and the bridge interface)
- Matter Hub v2.0.55 exact-commit packages
- The v2.0.55 orphan cleanup implementation
- v2.0.55 bridge data and feature flags
- Pinned Stable add-on configuration
- v2.0.55: Connect multiple assistants to one bridge
- Matter Handbook: Fabric
- Matter Handbook: Commissioning
- Apple: Pair and manage your Matter accessories
- Apple: Set up your HomePod, HomePod mini, or Apple TV as a home hub
These sources are pinned to the v2.0.55 commit. What a controller actually shows on your screen still has to be verified against that ecosystem's current official support and the version you are running.
Where to go from here
Apple Home is onboarded. Google Home and Amazon Alexa do not inherit any of it.
Everything in this part — the fabric, the session, the subscription, and the discipline of changing one layer at a time — carries forward unchanged. Part 9 walks the Google Home and Amazon Alexa commissioning flows specifically: their own prerequisite checklists, their own pairing screens, and the places their support for a given device type diverges from Apple's, sometimes sharply.
Open the full guidePart 8 of the Home Assistant Matter Hub Complete Guide series on the Apporo blog.
Adapted from the Home Assistant Matter Hub Complete Guide, produced by WoowTech and released under CC BY 4.0. This adaptation is published by Apporo under the same licence.
Light · Air · Water · Control · apporo