Skip to Content

The dashboard shell, and building your first bridge

where things live, and how the first one gets built
Matter Hub Guide · Part 3

The dashboard shell, and building your first bridge

Part 2 got Matter Hub Stable 2.0.55 installed and running. This part is the tour you take before you touch anything Matter-specific: the fixed shell and the thirteen routes behind it, the dashboard that only appears once a bridge exists, the two refresh cadences that can briefly disagree with each other, and the global warnings that look alarming and mostly are not. Then it walks the one decision that actually matters this early — creating your first bridge — through the Wizard, Area Setup and Manual Setup, and the guardrails Stable puts around an empty filter, a clashing port and the port Amazon Alexa insists on.

13 routes
Registered in Stable 2.0.55's app shell, from the dashboard root / to /settings. Reachable is not the same as feature-complete
10 templates
Starting points for a new bridge, from All Lights to Automations & Scripts. None of them is a controller support guarantee
5540
The one port Amazon Alexa completes a first commissioning on. Any other port rolls the pairing back
The interface shell

A top bar, a footer, and thirteen places it can send you

The React interface in Stable 2.0.55 is built from a fixed shell: a top app bar, the main content area, a footer, and a language switcher pinned to the bottom right. At desktop width the navigation icons sit directly in the top bar; on a narrower screen the same items move into a drawer on the right. Clicking the logo, or Dashboard, always returns you to the root route /. The top bar also carries the Status Indicator, the light/dark toggle, and the entry point for System Logs — three things this part comes back to below.

Thirteen routes are registered behind that shell. An address that matches none of them lands on Not Found.

RoutePageMain purpose
/DashboardOverview, onboarding, widgets and everyday actions
/bridgesBridgesThe full bridge list, creation, import and export, and per-bridge actions
/bridges/createCreate BridgeCreate from a template, plus the full form or JSON
/bridges/area-setupArea SetupCreate bridges in bulk by HA area
/devicesDevicesSearch entities, review mappings and failed items
/standalone-devicesStandalone DevicesReview Server Mode devices, which still carry experimental limits in Stable
/network-mapNetwork MapBridge, fabric and topology views
/healthHealthDetailed service, controller, network and device health diagnostics
/startupStartup OrderBridge startup precedence
/labelsFilter ReferenceHA label and area reference
/lock-credentialsLock CredentialsLock credential management — the contents are sensitive, so never screenshot or share this page
/pluginsPluginsExperimental plugin management and status
/settingsSettingsSystem settings, updates and other operations entry points
In plain terms

Registered and mature are different claims. It is a museum wing that is unlocked and lit, where you can walk into every room, but a couple of the display cases are still empty behind the glass. /plugins and /standalone-devices both load fine in Stable 2.0.55 — that only tells you the room exists. What is standing in it, Server Mode with several entities among them, is still explicitly labeled experimental-in-Stable, and that label does not go away just because the door opens.

Onboarding, widgets and bulk actions

From an empty welcome card to three widgets you can rearrange

The dashboard starts by calling the detailed health API. With no bridge yet, it does not show the customizable widgets at all — it shows a welcome card instead, with three ways to create your first one: Bridge Wizard, Setup by Area and Manual Setup, plus an external Documentation link. These three are not maturity levels sitting one above another; they are different setup workflows for different starting points.

Entry pointWhen it fitsKnow this before you create
Bridge WizardYou want a template, a controller profile and a six-stage guideYou still have to cross-check the filter, the port and the network preflight at the end
Setup by AreaYour HA areas are already tidy and you want one bridge per areaIt creates several bridges at once and increments the port for each — confirm your resources and controller scale first
Manual SetupYou need the full schema, a fine-grained filter or JSONThere are more fields, and you have to understand identity, session and the advanced flags yourself

Once at least one bridge exists, the dashboard switches to the widget layout. When at least one fabric appears, a first-success message shows once; after you dismiss it, the browser remembers that under the local storage key hamh-first-success-dismissed. That is only a message in the interface — not a commissioning check, and not a guarantee of controller compatibility.

flowchart TD
  A["Dashboard loads, calls the health API"] --> B{"Does at least one
bridge exist?"} B -->|"no"| C["Welcome card: Bridge Wizard,
Setup by Area, Manual Setup"] B -->|"yes"| D["Widget layout: Status Overview,
Bridges, Quick Navigation"] C --> E["You create a bridge
through one of the three paths"] E --> D D --> F{"Has at least one
fabric appeared yet?"} F -->|"yes"| G["A first-success message shows once,
then is remembered in this browser"] F -->|"no"| H["No message.
This is the expected
pre-commissioning state"]
Two ways the tour can endOnly one diamond decides whether you see the welcome card or the widgets, and a second diamond, reached afterward, decides whether the first-success message shows. The chain ends in one of two boxes at the bottom, and neither one is an error state — the right-hand box is simply what you see before a fabric exists.
  1. Step 1

    Read the status at the top first

    Expand the indicator and check the version, uptime, HA connection and WebSocket. With no bridge yet, No Bridges is the expected state, not a fault.

  2. Step 2

    Choose a workflow

    For a first bridge, Bridge Wizard is usually the one to press. Choose Setup by Area only once your HA areas are fully planned, and Manual Setup only when you need the fine-grained schema.

  3. Step 3

    Go back to the dashboard after creating

    Confirm the welcome card has been replaced by Status Overview, Bridges and Quick Navigation, and that the bridge count matches what you just created.

  4. Step 4

    Verify with status only; do not rush into commissioning

    Confirm HA is Online, the bridge is running, and the device count is plausible before you move on to commissioning. Do not expose any pairing data while you are still touring the interface.

Three widgets you can show, reorder and reset

Once a bridge exists, a Customize Dashboard button appears to the right of the dashboard title. The dialog manages exactly three widgets. The eye button toggles visibility, the up and down buttons swap the order, Reset restores the default order and shows everything, and Done closes the dialog.

Widget IDUI nameContents
statsStatus OverviewFour stat cards: bridges, devices, fabrics and the HA connection
bridgesBridgesCreation entry points, bulk start, stop and restart, and mini cards ordered by priority
quickNavQuick NavigationShortcut cards for the pages you use most

The setting lives in the current browser under the local storage key hamh-dashboard-widgets. It is not backend bridge configuration, it does not travel with a Matter Hub backup, and it does not sync to every browser you use. On load the code ignores unknown widgets and adds newly known widgets back into the order; corrupted local storage falls back to the default.

In plain terms

It is rearranging the furniture in your own living room, not renovating the house. Move the couch, come back tomorrow, and it is still where you left it — but a guest looking into your neighbor's living room, a different browser or a different machine, sees the couch exactly where the builder originally put it. Nothing about the house itself, the bridges running underneath, changed either way.

  1. Step 1

    Open Customize Dashboard

    Go to the dashboard root page and press the customize icon to the right of the title. If the icon is not there, first confirm that at least one bridge exists.

  2. Step 2

    Hide the blocks you do not need

    Press the eye to the left of a widget. An operations screen, for instance, can keep only Status Overview and Bridges. Hiding a widget does not stop the health refresh or a bridge.

  3. Step 3

    Set the reading order

    Use Move up and Move down on the right to bring the block you read most often to the front; the first item cannot move up and the last cannot move down.

  4. Step 4

    Test Reset

    If the layout is not what you expected, press Reset to restore stats → bridges → quickNav with everything visible, then press Done. This changes nothing in the backend.

Stats, the status indicator, and two refresh cadences

The four cards in Status Overview come from api/health/detailed: the total number of bridges (with a running/failed summary), the device count summed across all bridges, the summed fabric count, and the HA connection plus uptime. Once you are on the dashboard it refreshes every 15 seconds; the Status Indicator at the top calls api/health separately and refreshes every 30 seconds. The two can therefore disagree for a short while, and that on its own is not a reason to suspect corrupted data.

In plain terms

It is two people counting the same queue from two different windows — one checking every 15 seconds, the other every 30. For a few seconds they will call out different numbers, and neither of them is wrong; they just have not looked at the same instant. Give it one more cycle before you assume something broke.

Card / indicatorWhat clicking doesHow to read it
BridgesGoes to the Bridges pageThe total, plus running/failed — not a controller count
DevicesGoes to Devices; the failed chip goes straight to ?showFailed=trueThe device count after mapping, summed — look further into the reason behind a failure
FabricsGoes to Network MapThe fabrics of each bridge, summed — it does not mean the controllers support the same features
HA ConnectionNoneOnline or Offline plus the application uptime; it covers only the HA service connection layer
The status at the topHover or tap for a tooltipVersion, uptime, bridges running, and the combined HA and WebSocket status
flowchart TD
  A["Health check runs"] --> B{"Is health error
or unhealthy?"} B -->|"yes"| Z1["Status: Error"] B -->|"no"| C{"Is any bridge
stopped or failed?"} C -->|"yes"| Z1 C -->|"no"| D{"Has the WebSocket
dropped?"} D -->|"yes"| Z2["Status: Warning"] D -->|"no"| E{"No bridge yet, or not
every bridge running?"} E -->|"yes"| Z2 E -->|"no"| Z3["Status: Success"]
Three end states, two of them sharedThere are three terminal boxes, but only three — Error and Warning are each reached from two different diamonds converging on the same box, which is why "health is fine but the WebSocket dropped" and "no bridge yet" both read as Warning rather than as two separate signals.

With no bridge at all, the icon shows the matching state instead of pretending everything is running.

Read it in this order. Wait one refresh cycle, then compare the dashboard against the Status tooltip. If they still disagree, go to Health rather than reloading over and over or restarting every bridge.

Bridge mini cards, ordering and bulk actions

The top of the Bridges widget holds Bridge Wizard, Create Bridge and Area Setup, along with Start All, Stop All and Restart All. While a bulk action runs, the buttons are disabled and the code also guards against double clicks; health is fetched again as soon as it finishes. These are real backend actions, not just a change to what the dashboard shows.

Mini cards are ordered by priority, smallest first, with a missing value treated as 100; the #1 and #2 you see are the current display order. Each card shows an icon, the name, running/stopped/failed, the device count and a non-zero fabric count, plus a warning count when there are failed entities. Click a card to open that bridge's details.

ActionImpactSafe use
Start AllTries to start every bridgeUse it after maintenance, and watch for failures instead of clicking repeatedly
Stop AllStops every bridge, and the controllers lose serviceOnly during an announced maintenance window
Restart AllEvery bridge is briefly interrupted and its service rebuiltShould not be your first step for a single device fault
Clicking a mini cardOnly navigates to that bridge's detailsRead the individual status reason, the failed entities and controller health first
Bulk actions are not a troubleshooting shortcut. When one bridge has failed, open its card and read the reason first. Restart All widens the outage, and it can rebuild controller sessions that were healthy.

Nine Quick Navigation shortcuts

Quick Navigation does not replace the full top navigation. It turns the nine destinations you use most in day-to-day operations into cards: Bridges, Area Setup, Devices, Network Map, Health, Startup Order, Lock Credentials, Filter Reference and Settings. Standalone Devices and Plugins stay reachable from the top navigation, but they are not part of this set of nine.

ShortcutWhen you normally use it
BridgesChecking the full list, importing or exporting, or adding a bridge
Area SetupCreating in bulk once your HA areas are tidy
DevicesSearching mappings and reviewing failed devices
Network MapUnderstanding the bridge and fabric topology
HealthReviewing HA, bridge, controller, session and network diagnostics
Startup OrderManaging priority across several bridges
Lock CredentialsManaging sensitive lock features — read the security chapter before you touch it
Filter ReferenceCross-checking area and label identifiers and filter rules
SettingsSystem, updates, restore and other global settings

If you hide the Quick Navigation widget, the top navigation still works; on a phone, open the drawer on the right first. A narrower interface does not mean a feature has been removed.

Language, logs and global warnings

Interface preferences, the log dialog, and two banners that look worse than they are

The fixed Language button in the bottom right opens a list of 14 languages: English, Deutsch, Français, Español, Italiano, Magyar, Simplified Chinese, Traditional Chinese, Japanese, ไทย, Svenska, Türkçe, Русский and Português (Brasil). Selecting Traditional Chinese maps to zh-TW. Switching affects the interface translation only — it does not change the HA language, a bridge identity, or a display name inside a controller.

The moon/sun icon at the top switches between dark and light. On the desktop layout the icon shows directly; on the mobile layout the drawer shows "Dark Mode" or "Light Mode" as text. The theme is a browser UI preference; it does not change a bridge, a device or the contents of a log.

  1. Step 1

    Switch language

    Press the Language button in the bottom right and pick your language from the list. If some strings are still untranslated, the translation for that pinned version may simply not cover them yet — that is not evidence the backend version is wrong.

  2. Step 2

    Choose a theme

    On the desktop layout press the theme icon at the top; on the mobile layout open the menu on the right and pick Dark or Light Mode. Check the contrast and the readability.

  3. Step 3

    Tell browser preferences apart from backend data

    Checking from a different browser, the language, the widgets or the theme may differ. Do not read that difference as a lost backup.

  4. Step 4

    Redact sensitive content when you report a translation issue

    Give only the pinned version, where the string appears, and the wording you expect. Do not attach full System Logs, live URLs or commissioning screens.

System Logs: filter, search, refresh and clear

The Bug Report icon at the top opens the System Logs dialog. By default error, warn and info are selected, and it asks api/logs for at most 500 entries; you can select several of error/warn/info/debug, type a search string, and refresh by hand. With Auto on it refreshes every 5 seconds; the Auto/Manual chip switches between the two.

Each entry shows a timestamp, a level, a message and optional context. Delete sends a DELETE request to the log API and empties the current log — a real, irreversible action, so do not press it before you have preserved the evidence of the fault. Close only closes the dialog; it clears nothing.

ControlWhat it is forWatch out
LevelSelect several of error/warn/info/debugdebug can produce a lot of output — use it only for short troubleshooting sessions
SearchPasses the search string to the log APIAvoid typing or screenshotting sensitive identifiers
RefreshImmediately fetches the logs for the current criteria againIt is not the same as restarting the service
Auto/ManualControls the automatic 5-second refreshSwitch to Manual to hold the view during a long analysis
DeleteClears the server logsSave the redacted diagnostics you need, and check your operations policy, before you do it
Redact before you share. Log context can contain URLs, entity identifiers and other details from your live site. Do not copy the full JSON. Quote only the error type and the pinned version, and remove every secret, private address and piece of Matter identity data.

Version mismatch and Connection lost

When the frontend and backend versions differ, the app layout shows a yellow Version mismatch banner with a Reload button. That usually means the browser is still holding old frontend assets; press Reload first to get the latest UI. Do not rebuild a bridge or change storage because of it. If it is still there after a reload, check the proxy cache, Ingress and the actual backend version.

When the global WebSocket is not connected, a red banner reads "Connection lost, data may be outdated. Reconnecting…" The WebSocket picks ws/wss from the protocol of the current page, builds api/ws from the document base, and retries about 3 seconds after a drop. The data on screen may be stale while that lasts, so pause bulk actions and configuration changes.

flowchart TD
  A["Something looks wrong
in the interface"] --> B{"Is the banner
Version mismatch?"} B -->|"yes"| B1["Press Reload first.
Still there? Check the proxy
cache and the backend version"] B -->|"no"| C{"Is the banner
Connection lost?"} C -->|"yes"| C1["Wait for the automatic
reconnect. Pause bulk actions
and configuration changes"] C -->|"no"| D{"Does Status show
HA Offline?"} D -->|"yes"| D1["Go to Health and check the
Home Assistant service connection"] D -->|"no"| E["UI Online, HA Online, but a
controller says No Response:
check the bridge, fabric,
session and mDNS layer"]
Four end boxes, one per question answeredThree diamonds are asked in order, and each "yes" branch ends the search in its own box; the fourth box is simply what is left once none of the first three banners apply. No box here is a dead end you cannot act on — each one names the next page to open.
MessageFirst stepDo not
Version mismatchPress Reload; confirm frontend and backend show the same pinned versionDo not reset, delete a bridge or commission again
Connection lostWait for the automatic reconnect, and check the Status tooltip and HTTP healthDo not run bulk actions one after another on a screen showing stale data
HA Offline but the WebSocket connectedGo to Health and check the Home Assistant service connectionDo not mistake the UI WebSocket for the HA WebSocket
UI Online but the controller says No ResponseCheck the bridge, the fabric, the session and the mDNS network layerDo not just refresh the browser
Plan before you create

Decide the bridge's boundaries before you press Create

A standard Matter bridge is one Matter node holding an aggregator and several device endpoints. Decide first which set of HA entities it serves and which external controllers matter to you. Stable 2.0.55 supports several bridges, and multi-fabric on a single bridge — but controller device-type support, product maturity, and the Stable release channel itself are three separate facts, and none of them proves the other two.

For your first bridge, pick a small number of devices that are not safety-critical and are easy to watch. A large bridge can be unstable on some controllers, and the interface will suggest splitting it when that becomes necessary. You can split by area, by domain, or around a controller-specific workaround; no single approach suits every home.

DecisionConservative starting pointWhat you can tune later
Device scopeA few devices from one area, or one domain you use oftenWiden the filter only after confirming how the controller shows them
ControllerPick your main controller profile, or leave it unselectedSplit off a controller-specific bridge when compatibility clashes
PortAccept the next free port; keep 5540 for an Alexa targetUnique per bridge — pick another free port if it clashes
Server ModeLeave it off for ordinary devicesTurn it on only for a standalone need; several entities is still experimental in Stable
FilterAn explicit include, and an exclude where you need oneRead the preview first, so an empty include does not pull in everything
Commissioning is not this chapter's finish line. A successful create only means the configuration is saved and can start. Verify the device count, the failed entities and the network preflight first, then handle controllers in the commissioning chapters — and do not screenshot or share any pairing data along the way.
The Bridge Wizard

Ten templates, six stages, and four profiles that recommend rather than guarantee

A template is a starting point with the filter, icon and some feature flags prefilled — not a guarantee of controller support. After picking one in the Wizard you still go through the controller profile and the review; the full Create Bridge page can also start from a template, which you then edit in the form or in JSON.

TemplateIncludeDefault flags / limits
All Lightsdomain lightautoBatteryMapping
All Switches & Plugsdomain switchNo extra flags; actual power/energy still depends on the mapping
All Sensorssensor, binary_sensorAuto battery/humidity/pressure mapping
Climate & Coversclimate, fan, cover, humidifierautoBatteryMapping
Security & Lockslock, alarm_control_panel, or the motion/door/window device classesincludeMode: any, auto battery — not the same as the experimental Security Plugin
Robot Vacuum (Server Mode)domain vacuumserverMode; narrow it to exactly one entity. Several entities is experimental-in-Stable
Media Players & Speakersdomain media_playerNo extra flags; how it appears depends on the controller
Google Home Optimizedpattern *Auto force sync, battery/humidity/pressure; a very wide scope — narrow it first
Alexa-Optimized Coversdomain coverHA percentage and auto battery; a first Alexa commissioning also needs port 5540
Automations & Scriptsautomation, script, sceneNo extra flags; how it appears externally and its momentary behavior both need separate verification

Security & Locks is only a standard entity-filter template, not the Security Plugin, which Stable still marks experimental — similar names do not mean the same feature. The Google Home Optimized wildcard covers "all devices" by default, which may be wider than you expect; narrow it in the full editor after choosing the template, or switch to an area or a label instead.

The six Wizard stages

Template and Controller can be skipped; Bridge name is required; the filter must not be left as an empty include; Review shows a configuration summary and the network preflight, and ends with Create Bridge or Add Another.

flowchart LR
  T["1 Template
skippable"] --> C["2 Controller
skippable"] C --> I["3 Bridge Info
name + port required"] I --> F["4 Entity Filter
cannot be an empty include"] F --> FL["5 Feature Flags"] FL --> R["6 Review
summary + network preflight"] R --> D1["Create Bridge"] R --> D2["Add Another
resets the form"]
Six stages, two ways to finishBoth end boxes hang off Review, and only Review; nothing else on the chain leads anywhere but the next stage. Add Another resets the form even when Create Bridge just failed, which is why the next step tells you to check the Bridges page rather than trust the reset.
  1. Step 1

    Open the Wizard and pick a template

    On the Dashboard, press "Bridge Wizard." Choose whichever of the ten templates is closest to your goal, or press Skip Template and start from a blank configuration. Do not infer that every device is supported just because a controller's name appears in a template's name.

  2. Step 2

    Pick a controller profile

    Choose one of Apple Home, Google Home, Amazon Alexa or Multi-Controller, or skip. A profile only merges in recommended feature flags — it does not commission anything for you and does not verify device types.

  3. Step 3

    Fill in Bridge Info

    Enter a name you can recognize that carries no sensitive location information. Keep the next free port the Wizard fetched for you; if the target is Alexa, plan 5540 for this first bridge. Leave Server Mode unchecked on an ordinary bridge.

  4. Step 4

    Set an explicit filter

    The Wizard lets you edit Pattern, Domain, Area, Label and exclude only when you chose Skip Template; with any non-Server Mode template, the template filter is read-only inside the Wizard, and you change it in the full editor after the bridge exists. For a first test pick a single area or domain, or an explicit pattern, and add an exclude for entities you do not need to expose.

  5. Step 5

    Review the four Wizard flags

    Adjust Auto Compose Devices, Auto Force Sync, Invert Cover Direction and Include Hidden Entities to suit what you need. Flags the controller profile already recommends are merged into the display — do not switch them all on in pursuit of "the most features."

  6. Step 6

    Review, preflight, then Create or Add Another

    Cross-check the name, port, include, exclude, Server Mode and flags. Expand the network remediation and deal with every fail and warn first. Press Create Bridge only when the summary and the preflight match your plan; if you use Add Another, go back to Bridges every time and confirm the bridge really exists.

In plain terms

An empty guest list at the door does not mean the party is cancelled. In Matter Hub's backend semantics, an empty include can mean include everything — every entity in your house, walking straight through. That is why the Wizard refuses to move past the filter stage on a blank Pattern, Domain or Area, and insists on at least one Label: it would rather stop you for ten seconds now than let the door swing open on its own.

Controller profiles: recommended settings, not a support matrix

ProfileFeature flags merged inHow far it goes
Apple HomeAuto composed, battery, humidity, pressure mappingCovers use the standard Matter percentage; individual device types still depend on Apple's own support
Google HomeAuto force sync, auto composed, battery, humidity, pressureForce Sync is a workaround for a lost subscription, and it adds traffic
Amazon AlexaAuto force sync, battery, humidity, pressure, HA cover percentageFirst commissioning still needs 5540; some types and flags only suit an Alexa-only bridge
Multi-ControllerAuto force sync, auto composed, battery, humidity, pressureA balanced setting; it does not remove the differences between controllers in device-type support

A profile's flags override and merge into the template's current values. If you deselect the profile, the Wizard does not restore every earlier flag — read the final result on Review. For workarounds that exclude each other, such as Alexa-only brightness behavior, isolate them on a controller-specific bridge instead of assuming Multi-Controller can satisfy both at once.

Three separate facts. These four profiles ship in Stable 2.0.55; the profile itself is a settled UI workflow; and whether each device type under it is shown by a particular controller is still a separate compatibility table.

Guards on an empty filter, and the preview before you create

Switching filter type also clears pattern strings that no longer apply, so a leftover value cannot leak into the Domain or Area matcher. Server Mode forces an entity ID pattern; the screen warns you to narrow it to exactly one entity, and the first entity becomes the primary. The upstream bridge schema technically allows one Server Mode node up to ten device endpoints, but more than one is experimental-in-Stable — the Wizard's "exactly one" guidance is the safer product path.

Filter typeInputCommon risk
PatternA wildcard, or an explicit entity pattern* is too wide — check carefully when the include-all switch is on
DomainComma-separated domainsIncludes every entity in the domain, which can exceed what the controller or host can carry
AreaHA area IDsUses the ID, not the display name; an entity with no area never matches
LabelHA labels loaded from the API and selected hereAt least one required; if the load fails, do not carry on with an empty selection
ExcludeThe Wizard builds it as a list of patternsInclude first, then exclude — a rule that is too wide can exclude every device you wanted

The full Manual Editor shows a Filter Preview and reminds you how labels are meant to be used. Confirm the expected entity count, the vacuum, large-match and unsupported-domain warnings, and whether a sensitive device slipped in. If the result is zero, do not blank the include and hope for the best — go back to the area, label or pattern identifiers and fix them one at a time.

Area Setup, Manual Setup and Import

Ports, bulk creation by area, the full schema, and importing a bridge you already have

The Wizard calls api/matter/next-port when it opens, falling back to 5540 if that fails. The Manual Create page scans used ports from 5540 upward and takes the first free one. Area Setup fetches the next port once, then increments it for every area it creates. Every bridge port has to be unique; the full editor blocks Save when the port is already used by another bridge.

The PreflightPanel calls api/network and sorts the diagnostic results into passed, warnings and failed. Every problem expands into a "How to fix": where an add-on option exists it shows that option and the matching container flag, and reminds you to restart the add-on after changing a start option; everything else has to be fixed on the host or the network. Preflight is advisory and does not block Create on its own, so treating a fail as something to fix first is your own decision to make.

flowchart TD
  A["Planning a new bridge's port"] --> B{"Will this bridge be
commissioned to Alexa?"} B -->|"yes"| C{"Is port 5540
already taken?"} C -->|"no"| D["Set port to 5540.
Create this bridge first"] C -->|"yes"| E["Reassign the bridge holding
5540, only if it is not
already commissioned"] B -->|"no"| F["Accept the next free port
the Wizard or editor offers"]
Three ways this endsThree terminal boxes, and only the Alexa branch on the left splits again. The right-hand branch, for a bridge that is not headed to Alexa, never touches the 5540 question at all — it goes straight to the automatic port.
The Alexa exception. The Stable 2.0.55 Wizard warns explicitly that Alexa only completes a first commissioning on port 5540; anything else rolls the pairing back. If Alexa is in your plan, keep 5540 for that bridge, and do not let a bridge you create earlier take it.
  1. Step 1

    Allocate 5540 first

    If any bridge is meant for Alexa, create it first and give it port 5540. Let every other bridge take the automatic free port.

  2. Step 2

    Read the pass/warn/fail summary

    Wait for the network preflight to finish on the Wizard's Review stage. No data, or a server you cannot reach, must not be read as everything passing.

  3. Step 3

    Expand every How to fix

    Use the advice to tell an add-on option, a container flag and a host or network problem apart; do not copy an example interface name blindly.

  4. Step 4

    Rerun Review after you fix it

    When a start option is involved, restart the service completely, then go back to the Wizard and fetch the diagnostics again. Create only once you confirm the errors are gone.

Area Setup: several bridges by HA area, in one pass

Area Setup loads from api/matter/areas/summary every area holding at least one entity that is "enabled, not currently unavailable, and in a domain the API supports"; the entity count on each card uses the same eligibility rule, with up to four main domains shown. You can Select All or Clear, tick areas one by one, and pick one of the four controller profiles. Areas that fail the eligibility rule are left out entirely.

On create, each area becomes one area matcher with no exclude, auto battery/humidity/pressure mapping enabled by default, and then the controller profile flags merged in. The program creates them in order, with ports counting up from the next free port; even if one fails, the remaining areas still go ahead, and the end shows separate success and error entries plus a partial summary.

  1. Step 1

    Tidy your Home Assistant areas first

    In HA, confirm the entities you want to expose are in the right area, and that the area holds no sensitive device that should stay private. Area Setup has no per-entity exclude of its own.

  2. Step 2

    Pick a controller profile

    Choose your main controller or leave it unselected, remembering that this only merges flags. If Alexa needs 5540, do not create a batch of bridges that all expect to be commissioned to Alexa first.

  3. Step 3

    Select a small number of areas

    Tick one or two to begin with and read the entity and domain summary. Select All can create a lot of bridges at once, which a low-resource host especially has to avoid.

  4. Step 4

    Press Create Bridges and watch the progress

    The progress bar updates per area. Do not leave the page or click again; each result is listed as a success or an error.

  5. Step 5

    Handle partial results

    Record the failed areas and a redacted error summary; go back to Bridges and cross-check the ones that succeeded, so a re-run does not create duplicates. After fixing the port or the filter, redo only the failed items.

Manual Setup: the full form and JSON

The Manual Create page can also start from one of the ten templates, then hands over to the bridge config editor. It opens on the Fields Editor and you can switch to the JSON Editor; both validate against the same schema. The page also shows the Filter Preview and Bridge Icon Upload. The icon can be a built-in type, or a custom image handled through the admin interface — never use an image that carries a street address or identifying information.

FieldWhat it is forRisk and recommendation
nameThe bridge display nameUse a stable, non-sensitive name; required
portThe Matter service portUnique per bridge; 5540 for a first Alexa commissioning; a clash raises a validation error
filterInclude, exclude and the modeRead the preview; never use an accidentally empty include
featureFlagsMapping, controller workarounds, Server Mode and so onEnable them one at a time; Server Mode with several entities is experimental-in-Stable
countryCodeThe bridge country code settingUse the standard country value for where it is actually deployed — not the UI language
iconIdentification on the Dashboard and on the bridgeDoes not affect controller support; a custom file has to go into your assets and backup
priorityStartup priority, lower starts first; default 100Only worth planning with several bridges; it is not a performance weighting
serialNumberSuffixAppended to each entity serial, to work around a stale cache on some controllersChanges how identity is seen and can make a device count as a new item — do not change it casually
uniqueIdSuffixMixed into the device uniqueId of a standard bridgeCan mint fresh identities and affects the controller cache; use it only under an explicit recovery plan
sessionMaxAgeHoursSession age rotation for standard and Server Mode bridges; 0 disables it, range 0–168Takes precedence over HAMH_MATTER_SESSION_MAX_AGE_HOURS; with neither set, a standard bridge is disabled and only Server Mode defaults to 4 hours

The editor shows warnings for Server Mode, for several entities, for Vacuum OnOff, and for Auto Force Sync combined with Auto Composed Devices. None of these is forbidden outright, but read the warning through before you save. The icon is held by a separate component when you switch between Fields and JSON; while editing JSON, still avoid pasting any secret — BridgeConfig itself should never contain an HA token or pairing data.

The identity suffix is a recovery tool. Changing the serial or unique ID can make a controller treat the endpoint as a new device, which in turn affects rooms, groups and routines. Back up first, write down the old value and the way back, and do not treat it as an ordinary naming field.

Importing an existing bridge: preview first, decide about overwrite second

Besides the three create workflows, the Import dialog on the Bridges page reads a bridge export JSON. Once you pick the file, the frontend parses it and calls the preview API first; if parsing or the preview fails, it only shows an error and imports nothing. The preview lists the export time, the format version, each bridge name, port and filter rule count, and whether it already exists.

Every previewed item is ticked by default, and you can Select All, Select None or clear them one at a time. overwriteExisting defaults to false; while it is off, an item that already exists is skipped rather than quietly overwritten. Before turning overwrite on you need a current full backup, and you should first compare the port, the filter, the identity suffix and the feature flags. An older format shown as migrated together with its source version means it was converted to the current format on import — not that every difference in meaning has been checked by a person.

  1. Step 1

    Verify where the file came from

    Use only an export JSON you control and have scanned yourself. Do not import a configuration handed to you in a chat or on a forum, and do not attach an export to anything public.

  2. Step 2

    Read the whole preview

    Cross-check the exported time, the source format, the bridge names, ports and filter rules. When you see an older-version migration, save a separate backup first and compare item by item.

  3. Step 3

    Untick what you do not need

    Untick any bridge that already exists or does not fit your port plan. Select None takes you safely back to zero selected, and the Import button is disabled at that point.

  4. Step 4

    Choose overwrite carefully

    Keep the default off, so existing items are skipped. Turn it on only when you mean to replace them, have a backup, and understand the effect on identity and on the filter.

  5. Step 5

    Cross-check the result after the import

    The dialog summarizes how many were imported, skipped and failed. Open each bridge's details and check the status and the device count; a partial success is not a reason to press Import on the whole batch again.

Import is not restore. Importing a bridge configuration is not the same as restoring the full Matter operational storage. Handle disaster recovery through the backup chapter; do not guess your way to a repaired fabric with overwrite.
When it does not behave

The symptoms that come up, and what actually causes them

SymptomLikely causeHow to fix it
The Customize button has disappearedIt only shows when at least one bridge existsIf the welcome card is still there, confirm the bridge was really created: cross-check on the Bridges page or against the health API, not against local storage
The widget order differs on every machineThe setting lives in each browser's local storage, not the backendSet it on every managed browser, or press Reset to go back to the default; do not restore Matter Hub storage to fix this
The stats did not update right after an actionThe dashboard refreshes every 15 seconds and the status at the top every 30Wait, then verify with Refresh or Health. A bulk action fetches once by itself when it finishes, but data can still be stale while the WebSocket is disconnected
Connection lost never goes awayThe reverse proxy or Ingress may not forward the WebSocket correctlyCheck whether api/ws forwards, whether HTTPS uses WSS, and whether the base path matches. Do not just restart bridges over and over
Version mismatch is still there after a reloadThe browser or proxy is still caching the old frontendCross-check the browser cache, the proxy cache and the actual backend version; do a no-cache reload, not a clear of persistent data
System Logs does not show an older eventThe level filter, the search, the 500-entry limit, or a Delete already happenedCheck all three first. Once it is cleared, closing the dialog will not bring it back, so save redacted data before you troubleshoot
The Wizard will not let you leave the filter stageAn empty include: Label needs at least one selection, and Pattern, Domain or Area needs at least one valueDo not use an empty JSON array to get around the guard; decide on an explicit scope first
The Alexa preflight shows a port warningThe bridge is not on port 5540Go back to Bridge Info and change it; if another bridge already holds 5540, decide whether to reassign a bridge that has not been commissioned yet
Port already usedTwo bridges cannot share a portLook at the used ports and the bridge holding it, then take the next free one. If the holder is already commissioned, assess the controller outage and re-commissioning cost before changing its port
Area Setup partly succeededOne or more areas failed while others went throughSeparate succeeded from failed and rebuild only the failed areas; check the successful ones on the Bridges page first, so a re-run does not create duplicates
The preview shows zero entities, or far too manyThe area ID, label, domain or include/exclude order is offCross-check each identifier. Do not empty the include when the result is zero; narrow to a single area or explicit pattern when it is too large
The network preflight will not loadapi/network is unreachable, or diagnostics did not finishTreat it as unfinished, not as everything passing. Confirm the backend is reachable, check for a global WebSocket or HTTP warning, then run Network Diagnostics from Health
The import reports skipped or failedItems already exist, or the format needed migrationRead the summary and "Already exists" first; do not turn overwrite on and rerun immediately. Compare the ID, the port and the existing configuration, back up, then handle one conflict at a time
Is the device count on the dashboard every entity in HA?
No. It sums the deviceCount from each bridge's health detail. Filters, mappings and composed devices all affect it, so it is not the total in the HA entity registry.
Does hiding the Bridges widget stop a bridge?
No. Widget visibility lives only in the browser's local storage; the backend bridge lifecycle is unaffected.
Can I use Stop All as an ordinary refresh?
No. It stops every bridge, and the controllers are cut off. For an ordinary view update, wait for the health refresh; for a single fault, deal with that one bridge first.
Does switching language change device names in a controller?
No. It only calls the frontend i18n to switch the UI language. A bridge identity, an HA entity name and a custom name in a controller are different data.
Does WebSocket Offline mean Home Assistant is offline?
Not necessarily. The global warning is the WebSocket from the browser to the Matter Hub backend; the HA connection is a separate layer from the backend to Home Assistant, so read Status and Health separately.
Does Delete in System Logs remove only the current search results?
The interface sends a DELETE to api/logs and empties the display, so do not assume it removes only the current filter. Do not run it before you have preserved your diagnostics.
Which of the ten templates suits a first bridge best?
There is no universal best. Start with a template whose scope is small and whose function is clear, such as a single domain, then narrow the filter. The Google Home Optimized wildcard is very wide, and is not the default for every beginner.
Can every bridge use port 5540?
No. On one host, every bridge port has to be unique. A first Alexa commissioning needs 5540, so keep it for the bridge you intend for Alexa and give the others the next free port.
Does picking a controller profile guarantee compatibility?
It does not. A profile only merges in recommended feature flags; what a controller supports in device types and clusters is a separate matter, still resting on the compatibility tables and on real testing.
Server Mode is already in Stable, so why call it experimental?
Release channel and product maturity are separate. Stable 2.0.55 can run Server Mode, but putting several devices on one node is explicitly marked experimental; the Wizard still recommends exactly one entity.
Does Area Setup exclude unsupported devices automatically?
It creates an area include for each area with an empty exclude, and that is no substitute for your own support review. Tidy the areas first, look at Devices and the failed entities after creating, then adjust the filter.
Can the import's overwrite be used as a merge?
Do not assume that. The preview marks the ones that already exist; overwrite is a high-impact choice that replaces an existing item. The default off setting skips them, and the safest approach is to compare and back up first.
Next

Where to go from here

a bridge exists, now say what it carries

Creating the bridge only decided that it can start. The Filter Engine decides what actually rides on it.

You now have a shell you can navigate with your eyes open, and a bridge whose port, filter and controller profile you chose on purpose rather than by accident. The next part in the guide goes into the Filter Engine in depth — the include and exclude rules, how Pattern, Domain, Area and Label actually match, and the Filter Preview habits that keep an empty include from ever becoming "everything."

Open the full guide

Part 3 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

Install Stable 2.0.55, and pick the method you can actually operate