Publish your Home-Assistant Instance using Matter.
TypeScript
1,282
2,272 commits
updated Oct 11, 2026

Expose your Home Assistant devices to Matter controllers like Apple Home, Google Home, Alexa, SmartThings and Aqara Home
π Documentation β’ οΏ½ Discord β’ οΏ½π Report Bug β’ π‘ Request Feature
[!NOTE] π Community Fork - This is the actively maintained fork and successor of the original t0bst4r/home-assistant-matter-hub, which was discontinued in January 2026 and has since been archived. We continue active development with bug fixes, new features, and community support. Thank you @t0bst4r for the original work! β€οΈ
π¦ Migrating? See Migration Guide - your paired devices will continue to work! For a side-by-side feature list, see the fork comparison. The add-on slugs are
hamh(stable),hamh-alphaandhamh-testing.
This project simulates bridges to publish your entities from Home Assistant to any Matter-compatible controller like Alexa, Apple Home, Google Home, SmartThings or Aqara Home. Using Matter, those can be connected easily using local communication without the need of port forwarding etc.
| Channel | Branch | Current Version | Description |
|---|---|---|---|
| Stable | main | v2.0.58 | Production-ready, recommended for most users |
| Alpha | alpha | v2.1.0-alpha.933 | Ahead of Stable, carries the additions listed under Alpha Features |
| Testing | testing | v4.1.0-testing.x | β οΈ Highly unstable! Experimental features, may break |
main branch) - thoroughly testedalpha branch) - gets every fix and feature first, see Alpha Features belowtesting branch) - bleeding edge, expect breakageA few entities re-pair once on the first start after the update and lose their room assignment in the controller:
binary_sensors (now Contact Sensors by default) and any entity using the On/Off Switch overrideRe-assign the affected devices to their rooms after they reconnect. See the docs for detail.
New in v2.0.58:
nl locale, thanks @toineenzo (#503)Previously in v2.0.57:
heap_size_mb option, the automatic sizing moved from a quarter to half of the available memory, and a NODE_OPTIONS you set yourself is honored instead of being silently overridden (#459)sourceAlarmPanel setting turns the four mode switches and the Alarm contact into a Matter view of an alarm_control_panel.* entity (Alarmo etc.), with arm and disarm flowing back to Home Assistant; contributed by Patrick Gu (#457). Panels that require an alarm code reject the bridge's arm/disarm calls, the switches then fall back to the panel's real statemax_temp: 500 failed with "Value 50000 is above the int16 maximum". Registration values are clamped into the Matter range now and the thermostat converts them on its first update (#470)alexaPreserveBrightnessOnTurnOn now only suppresses the brightness reset for commands arriving over the Alexa fabric, before it swallowed the same command from Apple Home (#460)composedPrimaryOnParent bridge option, off by default: puts the primary entity of a self-grouped composed device on the parent endpoint, so Apple Home reads the accessory as a light instead of taking an icon from one of the grouped entities. Needs autoComposedDevices on as well. It changes the endpoint layout, so the device has to be removed and added again in the controller, and Apple Home has been seen to stop listing the grouped entities afterwards, so try it on one bridge first (#469)omitEventsInPriming bridge option, off by default: for Google fabrics that acknowledge every chunk of the initial subscription report but never answer the final one, leaving the device permanently offline. With it on, the initial report carries attributes only, live events afterwards are unaffected (#424)climateForceTurnOn: sends climate.turn_on on every Matter On command, for IR controlled ACs where Home Assistant can report on while the device is off (#462)unit_of_measurement. What the controllers show never changed, Apple Home and Alexa convert on their side (#472)battery_charging binary sensor, or a ..._charging_state sensor as Xiaomi exposes), it is mapped automatically now and drives both the battery charge state and the status line. Devices without one keep the old assumption, and a charging sensor picked up this way still stays available as its own device (#450)HAMH_LOOPBACK=1 runs it. This settled the Apple Home battery question: the bridge sends the value, Apple's framework treats BatPercentRemaining as changes-omitted and keeps only the value from pairing or from a read (#450)haUrl and haToken. The credentials are a private field now, and any key named token, secret or password is redacted in that output (#155, #373)heap_size_mb option (#459)Previously in v2.0.56:
advertiseSpecVersion151, supportTermsAndConditions and enableMatterTcp, for Echos that stop right after the attestation step (#449)Previously in v2.0.55:
Previously in v2.0.54 (hotfix release):
Previously in v2.0.53:
event entities and consumption sensors; SmartThings renders them, defaults stay unchangedPreviously in v2.0.52 (hotfix release):
Previously in v2.0.51:
Previously in v2.0.50:
stableIdentity feature flag per bridge (#404, #407)Previously in v2.0.49:
select as an On/Off Switch (#356), plus an experimental mounted On/Off control type (#380)set_tilt_position-only covers (#405), and tilt-only cover-as-light uses the tilt channel (#350)lock.unlock not open (#397), level-to-brightness uses one scale (#402), button drops the Lighting feature (#182), and stale cooling/auto state is cleared (#384)Previously in v2.0.48:
Previously in v2.0.47:
binary_sensors now default to a Matter 1.3 Contact Sensor so Alexa stays stable; the Matter 1.4 Water Leak, Water Freeze, and Rain detector types are selectable per entity through the device-type override (#365)powerEntity/energyEntity if you want the readout (#374)manufacturer entity-filter matcher (#382)lawn_mower entities exposed as a robotic mowerPreviously in v2.0.46:
weather.* entities are exposed as a composed Temperature + Humidity + Pressure sensor read from the entity's attributes (pressure converted to hPa, shown on Google Home)automation entities are momentary: turning one on triggers it and snaps back to off (#364)bun:sqlite constants export stubbed so the esbuild bundle builds against matter.js 0.17.0, add-on heap flag preserved (#358)hvac_action requirement for the Auto running-state display (#309), Google Home ModeSelect label gap (#356), Alexa cover-routine limitation (#312), and the new weather domainPreviously in v2.0.45 (hotfix release):
Previously in v2.0.44:
customServiceAreas preserved in dynamic RvcRunMode supported modes, custom areas dispatched sequentially, currentArea cleared on dock return and no longer inherited stale across restarts, observedCleaning set on every cleaning event (#335)climateKeepModeOnIdle for off+idle ACs; mode kept through a coolβoff transition, freeze applied immediately on off and cleared on action=off (#340)pushKeepalive guarded on construction (#287)customVendorId with Home Assistant device-registry serial fallback (#290)serialNumberSuffix now loads when editing a bridge and is preserved when the serial is trimmed to 32 characters (#330)any_field_regex matcher for grouped AND/OR filter rules (#337)activePower to 0 and gain PowerTopology + cumulativeEnergyImported defaults (#343)device_class=window covers no longer emit EndProductType.Unknown (#312)/exists endpoint instead of a HEAD probe (#336)@codemirror/state (#345)serialize-javascript bumped to 7.0.5 in docs-sitePreviously in v2.0.43:
currentArea updates when cleaning is started outside HAMH (#281)device_class=window maps to Rollershade (#312)mode.vacuum_mop (#322)vacuum.locate is unsupported (#320)systemMode stays put when hvac_action is idle, ha-auto-only ACs no longer expose Matter Auto (#309)target_temp_step (#321)/api/logsPreviously in v2.0.42 (hotfix release):
softwareVersionString now matches the numeric softwareVersion (#316)auto mode is clamped to heat/cool on devices without an AutoMode base (#319)disableClimateFanControl mapping flag, falls back to ThermostatDevice when controllers like Aqara don't recognise RoomAirConditioner (0x0072) (#318)selectedAreas is kept after dispatch instead of being clearedPreviously in v2.0.41:
| Feature | Description |
|---|---|
| π‘οΈ Google Home AC offline fix | DeadFrontBehavior on climate OnOff cluster so RoomAirConditioner stops showing offline on Google Home (#302) |
| πͺ Cover device_class mapping | Map HA garage/gate/window/awning/etc. to the matching Matter WindowCovering type so voice commands hit the right device type (#304) |
| πΊ LG TV commissioning patch | Local patch on matter.js 0.16.11 to accept long NOC operational cert serials (#305) |
| π‘ Alexa brightness-reset behind flag | Old Alexa brightness-reset heuristic moved behind alexaPreserveBrightnessOnTurnOn, default off, Apple Home "set room to 100%" works again (#306) |
| π Google Home fan speed | Uses fan.set_percentage so already-on fans pick up speed changes from Google Home (#308) |
| βοΈ Climate auto mode | Expose Matter Auto mode when HA reports auto in hvac_modes (#309) |
| π Server-mode root identity | Root identity now applies as a single transaction, so controllers don't drop devices mid-swap (#311) |
| πͺ Lift-only blinds | No more TiltBlindTiltOnly on covers without tilt, fixes Alexa routines for roller blinds (#312) |
π·οΈ Per-entity disableClimateOnOff | Turn off the OnOff cluster on climate endpoints per entity for controllers that prefer mode-only control |
π’ serialNumberSuffix per bridge | Append a suffix to every entity serial, useful if controllers like Aqara cache stale device data |
π protocolLogLevel option | Quiet matter.js logs independently from the app log level |
| π₯οΈ Bridge HW/SW version strings | HA device-registry hw_version/sw_version now show up in Matter BasicInformation on server-mode endpoints |
| π¨ Extended color light: XY + enhancedColorMode | XY feature added as mandatory, enhancedColorMode mirrors colorMode |
| π Groups + Scenes | Scenes and Groups clusters added on light, plug, and fan endpoints |
| π§ Boolean state configuration | Cluster added on leak, freeze, rain, and contact sensors |
| π Spanish translation | New es locale (#314, thanks @Yllelder) |
| π§΅ Matter.js 0.16.11 (pinned) | Kept pinned, local NOC serial patch applied |
| β¬οΈ Dep bumps | Vite 8, jsdom 29, MUI x-tree-view 9, i18next 26, react-i18next 17, TypeScript 6.0.3, biome pinned 2.4.3, pnpm overrides for transitive CVEs |
Reliability & resilience: parallel bridge stop in stopAll/restartAll, parallel HA registry fetches, serialized bridge start/stop lifecycle, serialized updateStates with plugin listener detach, HA reconnect retry on transient network errors, 30s timeout on sendMessagePromise, port-conflict reject on web-api start, graceful shutdown on /api/backup/restart, AppEnvironment disposal on SIGINT, stale optimistic state sweep, pending debouncer clear, healthcheck 401 fix under basic auth, deep-equal entity attribute comparison, overlap guard for auto-refresh, safer mireds conversion, aligned colorMode publishing, surfaced bridge import errors, corrected thermostat running state for unknown modes + drying, unified Node version across Dockerfiles, sourcemaps excluded from npm tarball, unused deps dropped (rxjs, strip-color, lodash), unused config-validator utility removed.
Previously in v2.0.39 & v2.0.40 (hotfix releases):
select, input_select, siren domains showing as unsupported in filter preview (#298)Previously in v2.0.38:
| Feature | Description |
|---|---|
| π·οΈ Per-Entity Identity Overrides | customProductName, customVendorName, customSerialNumber per entity mapping (#277, #290) |
| πͺ Garage & Gate Open/Close | Discrete Open/Close mode for garage and gate covers (#55) |
| πΏ Dishwasher Device Type | Dishwasher override for switch entities |
| π¨ Siren Support | Siren domain as OnOff Plug-in Unit |
| π·οΈ productNameFromNodeLabel Flag | Report node label as Matter productName for Aqara controllers |
| π€ Vacuum Room Progress | Dynamic room progress tracking via currentRoomEntity sensor |
| β‘ Startup Force Sync | Immediate force sync on startup to beat stale Alexa queues (#282) |
| π Network Diagnostic API | mDNS/network diagnostic endpoint with dashboard card |
| π Energy on Composed Devices | Energy/power measurement clusters on composed endpoints |
| π©Ί Multi-Admin Fabric Diagnostics | Per-fabric session info in health API |
| π©Ί Docker HEALTHCHECK | Native healthcheck in standalone and addon images |
| π Admin Password Hashing | Admin password stored hashed, timingSafeEqual for lock PIN verification |
| π§΅ Matter.js 0.16.11 | Updated Matter stack |
| π Polish + Traditional Chinese | New pl and zh-tw locales |
Fix highlights: vacuum keepalive for Apple Home "Updatingβ¦" (#287), multi-phase clean progress (#281), GenericSwitch single/multi split for Apple Home buttons (#289), HA restart attribute guards (#286), fan speed restore on turn-on (#275), moisture sensor auto-map to HumiditySensor (#273), TV speaker override (#293), rain + radon sensor auto-mapping, composed sub-endpoint cleanup.
Previously in v2.0.36:
| Feature | Description |
|---|---|
| ποΈ User-Defined Composed Devices | Create custom composed devices via composedEntities mapping (#220) |
| π Plugin Domain Mappings | Domain mapping support in plugin API with cloud-mock example |
| π Valve & Pump Battery | Battery support for valve and pump endpoints |
| π German + Russian Translations | Complete German translation and new Russian language |
| π‘ Session Recovery | Graceful session close, dead session cleanup, mDNS re-announcement (#266) |
| π Quick Link to Failed Devices | Dashboard quick link to failed devices (#270) |
| π‘οΈ Thermostat Fix | Skip climate.turn_on when already on (#269) |
| πͺ Cover Fix | Correct stale targetPosition during external movement (#268) |
| π¬οΈ Air Purifier Fix | Sub-endpoints for composed air purifier, manual temp/humidity mapping (#265) |
| π₯ Cooling-Only Thermostat Fix | Prevent HeatingOnly on cooling-only thermostat (#264) |
| βοΈ Per-Entity Cover Swap | Individual coverSwapOpenClose per cover (#263) |
v2.1.0-alpha.933:
set_cover_position 100 and 0. Off by default, covers without a position keep open/close (#512)v2.1.0-alpha.932:
v2.1.0-alpha.931:
v2.1.0-alpha.930:
v2.1.0-alpha.929:
shutter cover now reports TiltBlindLift with ExteriorVenetianBlind, so already paired ones may show a different blind type. Covers also set a valid product type before their first state arriveslong_press without a following release sent the press twice and left the button held. It now sends press, long press and release oncev2.1.0-alpha.928:
v2.1.0-alpha.927:
v2.1.0-alpha.926:
v2.1.0-alpha.925:
v2.1.0-alpha.924:
v2.1.0-alpha.923:
[object Object], and camera ids HA can't accept (like camera.rtsp-lq) are skipped at startup with a warning (#373)v2.1.0-alpha.922:
v2.1.0-alpha.921:
v2.1.0-alpha.920:
v2.1.0-alpha.919:
v2.1.0-alpha.918:
mdns_strip_global_ipv6 for the add-on and --mdns-strip-global-ipv6 for a container (#392)[!CAUTION] Testing versions are highly unstable and intended for developers only!
ποΈ Vision 1: Callback-based Architecture
| Old (Legacy) | New (Vision 1) |
|---|---|
| Behaviors update themselves | Endpoint updates behaviors via setStateOf() |
| Behaviors call HA actions directly | Behaviors notify via notifyEndpoint() |
New Callback-Behaviors: OnOff, LevelControl, Lock, Cover, Fan, ColorControl, VacuumRunMode, VacuumOperationalState
Updated Endpoints: Switch, Lock, Cover, Vacuum, Button, Valve, Scene, Humidifier, Light, Fan
Filter preview domain fix, select, input_select, siren now show as supported (#298)
Node 22 WebSocket crash loop fix (#297, #299), service init error surfacing, registry retry hardening, support link added
Aqara productNameFromNodeLabel flag, Matter.js 0.16.11, Swedish locale update
HA 2026.3 Clean Area Support, Valetudo Identifier Mapping, Plugin System Hardening, Registry Fingerprint Fix, Roomba Battery Fix, Contact Sensor Fix, Script Momentary Fix, Docusaurus Docs
Automatic Backup, Vacuum Battery Auto-Map, Deprecated Feature Flags Fix
Endpoint Number Preservation, Binary Sensor Battery Auto-Map
Multi-Language Support, Plugin System, New Device Types (PIR, Rain, Electrical, AQ Sensors), Cluster Diagnostics, Dashboard Enhancements, Mapping Profile Export/Import, Fan & Air Purifier Fixes, Stale Session Cleanup, KNX Cover Fix
Controller Profiles & Area Setup, Fan Speed/Preset Fix, Optimistic State Fix, Cover Target Fix, Humidity Auto-Mapping Default
Mapped Entity Propagation Fix, API Error Surfacing
Light currentLevel Fix, Bridge Config Save Fix, Fan Device Feature Fix, Humidity Auto-Mapping Fix
Device Image Support, Custom Fan Speed Mapping, TV Source Selection, Reverse Proxy Base Path, On/Off-Only Fans, Light Brightness Fix, Fan Speed Fixes, Composed Air Purifier Fix, Dreame Multi-Floor Fix, Optimistic State Updates, Frontend Improvements
Valetudo support, Custom Service Areas, ServiceArea Maps, Vacuum Identify/Locate/Charging, Alarm Control Panel, Composed Air Purifier, Dashboard Controls, Vendor Brand Icons, Thermostat fixes, Air Purifier oscillation/wind
Authentication UI, Select entity support, Webhook event bridge, Cluster diagnostics, Matter.js 0.16.10, Docker Node 22, vacuum cleaning mode fallback, vacuum entity filter fix
Vacuum mop intensity, vacuum auto-detection, Roborock room auto-detect, live entity mapping, dynamic heap sizing, multi-fabric commissioning, fan speed label fix
Dashboard landing page, composed devices, bridge wizard feature flags, entity autocomplete, light transitions, live diagnostics, vacuum suction level, thermostat auto-resume, vacuum docked state, memory leak fix
Bridge templates, live filter preview, entity diagnostics, multi-bridge bulk operations, entity health indicators, diagnostic export, EntityLabel/DeviceLabel filters, Power & Energy Measurement, Event domain (GenericSwitch)
Room Label (FixedLabel), thermostat overhaul, lock unlatch/unbolt, binary sensor fix, auto pressure mapping, vacuum fixes, dead session recovery, network map, mobile UI, Labels & Areas page, crash resilience, memory limit
Force Sync, Lock PIN, Cover/Blinds improvements, Roborock Rooms, Auto Entity Grouping, Water Heater, Vacuum Server Mode, OOM fix
Climate/Thermostat fixes, Cover position fix, Vacuum battery, Humidifier improvements, Entity Mapping, Alexa brightness preserve
Custom bridge icons, Basic Video Player (TV), Alexa deduplication, Auto-only thermostat, Health Check API, WebSocket, Full backup/restore
Graceful crash handler, PM2.5/PM10 sensors, Water Valve, Smoke/CO Detector, Pressure/Flow sensors, Air Purifier, Pump device
Dark Mode toggle, Device list sorting
Matter Bridge, Multi-Fabric support, Health Monitoring, Bridge Wizard, AirQuality sensors, Fan control, Media playback
| Home Assistant Domain | Matter Device Type | Notes and Feature Flags |
|---|---|---|
light | Extended Color (color or color temperature), Dimmable, On/Off | powerEntity, energyEntity set by hand, lights don't get them auto-mapped (#374). Can be set to On/Off Plug-in Unit so Apple Home shows its wattage (#484) |
switch | On/Off Plug-in Unit | Power and energy sensors of the same device are mapped automatically. Overrides: Dishwasher, Laundry Washer, Laundry Dryer, EV Charger, Pump, Water Valve, On/Off Switch, Mounted On/Off Control |
input_boolean | On/Off Plug-in Unit | |
lock | Door Lock | PIN credentials, unbolt when the lock can open |
cover | Window Covering | coverSwapOpenClose, coverExposeAsDimmableLight (#372) |
climate | Room Air Conditioner (with fan modes), otherwise Thermostat | disableClimateFanControl, disableClimateOnOff, climateExposeFan (#309), battery via batteryEntity |
fan | Fan, On/Off Plug-in Unit without speed control | Oscillation, wind modes. Air Purifier override with filterLifeEntity |
humidifier | Fan, the fan speed sets the target humidity | Matter has no humidifier type |
binary_sensor | Contact, Occupancy, Smoke/CO Alarm, On/Off Sensor | Leak and freeze default to Contact Sensor (Alexa-safe); the Matter 1.4 Water Leak, Water Freeze and Rain detectors are overrides (#365) |
sensor | Temperature, Humidity, Pressure, Flow, Light, Air Quality (COβ, CO, PM1, PM2.5, PM10, TVOC, NOβ, ozone, radon), Electrical Meter (power, energy, voltage, current), Battery | batteryEntity, humidityEntity, pressureEntity. Overrides: Solar Power, Electrical Utility Meter, EV Charger, Battery Storage with power and energy |
event | Generic Switch | Doorbell override (experimental) |
button, input_button | On/Off Plug-in Unit, pressed when turned on | |
automation, script, scene | On/Off Plug-in Unit, triggers when turned on | On/Off Switch override, needs a one-time re-pair (#380) |
select, input_select | Mode Select | selectExposeAsSwitch for a select with on and off options |
alarm_control_panel | Mode Select | On/Off Plug-in Unit override to arm and disarm |
media_player | Speaker, Basic Video Player for TVs | |
valve | Water Valve | |
vacuum | Robot Vacuum Cleaner | serverMode, roomEntities, customServiceAreas, vacuumRoomSwitches, vacuumOnOff, batteryEntity, cleaningModeEntity, suctionLevelEntity, mopIntensityEntity, chargingStateEntity (#377) |
lawn_mower | Robot Vacuum Cleaner, Matter has no mower type yet | Same flags as the vacuum (#301) |
water_heater | Thermostat (heating) | Override: Matter 1.4 Water Heater (0x050F) with Boost |
siren, remote | On/Off Plug-in Unit | |
weather | Temperature Sensor with humidity and pressure |
Which controller shows which type is in the Controller Compatibility matrix (Apple Home, Google Home, Alexa, Aqara Home, SmartThings).
π See Supported Device Types Documentation for details
Common per-entity flags: updateThrottleMs rate-limits how often an entity pushes updates to controllers (#351), coverExposeAsDimmableLight exposes a cover as a dimmable light for Alexa routines (#372), chargingStateEntity maps a charging-state sensor (#377), climateExposeFan exposes a climate AC's fan as its own endpoint (#309).
Filter rules match on these matcher types: pattern, regex, domain, platform, entity_label, device_label, entity_label_regex, device_label_regex, any_field_regex, area, entity_category, device_name, product_name, device_class. The new manufacturer matcher matches the device manufacturer (or default_manufacturer) and supports * wildcards (#382).
Configurable auto-recovery with failure timestamps in Settings, controller-compatibility warnings on each bridge page, per-entity device-health diagnostics on the health dashboard, and a warning when a bridge exposes device types its controller does not support.
A built-in plugin exposes Home Assistant cameras as Matter Cameras (0x0142). Experimental and SmartThings-only as of 2026. Live view could not work until the #373 fix; a loopback test that does what SmartThings' camera driver does now streams end to end, a test on real SmartThings hardware is still missing.
Apple Home and Alexa do not properly support bridged robot vacuums. When your vacuum is exposed through a standard Matter bridge, you may experience:
This is because these platforms expect robot vacuums to be standalone Matter devices, not bridged devices.
Server Mode exposes a device as a standalone (non-bridged) Matter endpoint without the bridge wrapper. It works for any device type, not just vacuums, and a bridge can host standalone devices. For a robot vacuum this makes it fully compatible with Apple Home and Alexa.
For more details, see the Robot Vacuum Documentation.
Add this repository to your Add-on Store:
https://github.com/RiDDiX/home-assistant-addons
Three add-ons are available:
hamh) - Stable releasehamh-alpha) - Pre-release, gets every fix firsthamh-testing) - Experimental, may breakdocker run -d \
--name home-assistant-matter-hub \
--network host \
-v /path/to/data:/data \
-e HAMH_HOME_ASSISTANT_URL=http://192.168.178.123:8123 \
-e HAMH_HOME_ASSISTANT_ACCESS_TOKEN=your_long_lived_access_token \
ghcr.io/riddix/home-assistant-matter-hub:latest
Note: All environment variables require the
HAMH_prefix. See the Installation Guide for all available options.
For alpha versions, use tag alpha instead of latest.
Please see the documentation for detailed installation instructions, configuration options, known issues, limitations and guides.
Your Matter devices suddenly show "No Response" (Apple Home), "Unavailable" (Google Home), or become unresponsive after some time, even though the bridge is still running and other controllers (e.g., Alexa) continue to work fine.
Matter relies heavily on mDNS (multicast DNS) for device discovery and reachability. Many routers, access points, and managed switches have features that filter, throttle, or block multicast traffic, which breaks Matter communication silently.
π‘ This was confirmed and documented thanks to the excellent systematic testing by @omerfaruk-aran in #129. The issue was traced to a TP-Link Archer AX50 (in AP mode) sitting between the Apple TV and the network, its default settings were blocking/limiting mDNS/Bonjour traffic over time.
224.0.0.251 / ff02::fb)| Device | Issue | Fix |
|---|---|---|
| TP-Link Archer AX50 (AP mode) | mDNS traffic blocked/limited over time | Firmware update + disable DHCP on the AP |
| Ubiquiti UniFi APs | IGMP Snooping can filter mDNS | Disable IGMP Snooping or enable mDNS Reflector |
| Managed Switches (various) | Multicast filtering enabled by default | Allow mDNS multicast groups |
Does Alexa still work when Apple Home shows "No Response"?
Does removing a Home Hub (HomePod/Apple TV) fix it?
Try binding mDNS to a specific interface:
--mdns-network-interface eth0
(or end0, enp0s18, etc., check your system)
fd00::/8), not just link-local (fe80::). See Troubleshooting and Discussion #39Migrating from the original t0bst4r/home-assistant-matter-hub is easy. Your Matter fabric connections and paired devices will be preserved!
Backup your data:
cp -r /addon_configs/*_hamh /config/hamh-backup
# Verify the backup was copied correctly
ls /config/hamh-backup
Uninstall the old add-on (Settings β Add-ons β Uninstall) and make sure the old folder is removed:
rm -rf /addon_configs/*_hamh
Add the new repository:
https://github.com/RiDDiX/home-assistant-addons
Install and start the new add-on once (creates the data folder), then stop it
Clear the new folder and restore your backup:
rm -rf /addon_configs/*_hamh/*
cp -r /config/hamh-backup/* /addon_configs/*_hamh/
Start the add-on again - your devices should reconnect automatically
Simply change the image from:
ghcr.io/t0bst4r/home-assistant-matter-hub:latest
to:
ghcr.io/riddix/home-assistant-matter-hub:latest
Your volume mounts stay the same - no data migration needed.
For detailed instructions, see the full Migration Guide.
This project thrives thanks to the amazing community! Special thanks to everyone who contributes by reporting bugs, suggesting features, and helping others.
Note: GitHub doesn't surface contributors on this repo because it's still a fork of the original. The list below is maintained by hand.
Newest first.
| Contributor | Contributions |
|---|---|
| @iblur01 | π Translator - French translation completed (#504) |
| @toineenzo | π Translator - Dutch translation (#503) |
| @qbattersby | π€ Code Contributor - LevelControl transitionTime patch for matter.js 0.17, so Google Home can dim already-on lights (#383) |
| @Yllelder | π Translator - Spanish translation (#314) |
| @MStankiewiczOfficial | π Translator - Polish translation (#288, #329) |
| @aetasoul | π€ Code Contributor - Immediate force sync on startup to beat stale Alexa queues (#282) |
| @omerfaruk-aran | π Turkish translation (#260) + π§ Network debugging for "No Response" issues (#129) |
| @gustavakerstrom | π€ Code Contributor - Custom fan speed mapping (#226), template description fix (#215) |
| @AmineDjeghri | π Migration instructions for the addon data folder (#171) |
| @markgaze | π€ Code Contributor - Ecovacs Deebot room support (#118) |
| @codyc1515 | π₯ Top Reporter - Climate/thermostat bugs (#52, #24, #21, #20), README badge & install steps (#285), binary sensor classes (#66), fan control init (#10) |
| @AymericLeFeyer | π README YouTube video link |
| @depahk | π Migration docs (#32) |
| @Hatton920 | π€ Vacuum Expert - Intensive testing of Robot Vacuum Server Mode, Apple Home & Siri validation |
| @razzietheman | π₯ Active Tester - Bridge icons (#101), sorting (#80), feature requests (#31, #30), extensive UI/UX feedback |
| @SH1FT-W | π Sponsor + Vacuum room selection feature request (#49) |
| @Chrulf | π Google Home brightness debugging (#41), detailed logs & testing |
| @Fettkeewl | π Script import bug (#26), Alias feature request (#25) |
Thank you to everyone who helps improve this project by reporting issues!
| User | Issues |
|---|---|
| @omerfaruk-aran | #129 |
| @markgaze | #118 |
| @BlairC1 | #117 |
| @Giamp96 | #116 |
| @NdR91 | #115 #106 |
| @Fry7 | #114 |
| @siobhanellis | #112 |
| @Hatton920 | #110 |
| @gette | #95 |
| @400HPMustang | #103 |
| @vandir | #102 |
| @razzietheman | #101 #100 #80 #31 #30 |
| @seitenprofi | #176 |
| @semonR | #99 #58 |
| @italoc | #78 |
| @marksev1 | #62 |
| @smacpi | #60 |
| @mrbluebrett | #53 |
| @anpak | #45 |
| @alondin | #43 |
| @Chrulf | #41 |
| @Weske90 | #40 |
| @didiht | #37 |
| @Dixiland20 | #34 |
| @chromaxx7 | #29 |
| @Tomyk9991 | #28 |
| @datvista | #27 |
| @bwynants | #23 |
| @Pozzi831 | #22 |
| @codyc1515 | #52 #24 #21 #20 |
Donations are completely voluntary! This project exists because of passion for open source, not money. Thank you to everyone who has supported it, it truly means a lot! β€οΈ
π₯ First Sponsor: @thorsten-gehrig
| π @SH1FT-W | π @ilGaspa | π @linux4life798 |
| π @torandreroland | π @ralondo | π @bexxter85-ux |
| π @dinariox | π @JRCondat | π @d3rby91 |
| π @nicoodeimos | π @ustari28 | π Markus MΓΌller (@Dingosworld) |
| π StefanS | π Manny B. | π Bonjon |
| π TobiR | π Franz Huber | π Michele Larese de Prata |
| π @CNCB | π @pelican1997 | π @PeJanNL |
| π @bra1nbuster | π @knuti1960 | π @ppttu |
π ...and anonymous supporters who prefer not to be named.
[!NOTE] Completely optional! This project will continue regardless of donations. I maintain this in my free time because I believe in open source.
If you find this project useful, consider supporting its development:
Your support helps cover hosting costs and motivates continued development. Thank you! β€οΈ
609 followers Β· starred Aug 2026
193 followers Β· starred Jul 2026
269 followers Β· starred Feb 2026
66 followers Β· starred May 2026
Publish your Home-Assistant Instance using Matter.
TypeScript
1,282
2,272 commits
updated Oct 11, 2026

Expose your Home Assistant devices to Matter controllers like Apple Home, Google Home, Alexa, SmartThings and Aqara Home
π Documentation β’ οΏ½ Discord β’ οΏ½π Report Bug β’ π‘ Request Feature
[!NOTE] π Community Fork - This is the actively maintained fork and successor of the original t0bst4r/home-assistant-matter-hub, which was discontinued in January 2026 and has since been archived. We continue active development with bug fixes, new features, and community support. Thank you @t0bst4r for the original work! β€οΈ
π¦ Migrating? See Migration Guide - your paired devices will continue to work! For a side-by-side feature list, see the fork comparison. The add-on slugs are
hamh(stable),hamh-alphaandhamh-testing.
This project simulates bridges to publish your entities from Home Assistant to any Matter-compatible controller like Alexa, Apple Home, Google Home, SmartThings or Aqara Home. Using Matter, those can be connected easily using local communication without the need of port forwarding etc.
| Channel | Branch | Current Version | Description |
|---|---|---|---|
| Stable | main | v2.0.58 | Production-ready, recommended for most users |
| Alpha | alpha | v2.1.0-alpha.933 | Ahead of Stable, carries the additions listed under Alpha Features |
| Testing | testing | v4.1.0-testing.x | β οΈ Highly unstable! Experimental features, may break |
main branch) - thoroughly testedalpha branch) - gets every fix and feature first, see Alpha Features belowtesting branch) - bleeding edge, expect breakageA few entities re-pair once on the first start after the update and lose their room assignment in the controller:
binary_sensors (now Contact Sensors by default) and any entity using the On/Off Switch overrideRe-assign the affected devices to their rooms after they reconnect. See the docs for detail.
New in v2.0.58:
nl locale, thanks @toineenzo (#503)Previously in v2.0.57:
heap_size_mb option, the automatic sizing moved from a quarter to half of the available memory, and a NODE_OPTIONS you set yourself is honored instead of being silently overridden (#459)sourceAlarmPanel setting turns the four mode switches and the Alarm contact into a Matter view of an alarm_control_panel.* entity (Alarmo etc.), with arm and disarm flowing back to Home Assistant; contributed by Patrick Gu (#457). Panels that require an alarm code reject the bridge's arm/disarm calls, the switches then fall back to the panel's real statemax_temp: 500 failed with "Value 50000 is above the int16 maximum". Registration values are clamped into the Matter range now and the thermostat converts them on its first update (#470)alexaPreserveBrightnessOnTurnOn now only suppresses the brightness reset for commands arriving over the Alexa fabric, before it swallowed the same command from Apple Home (#460)composedPrimaryOnParent bridge option, off by default: puts the primary entity of a self-grouped composed device on the parent endpoint, so Apple Home reads the accessory as a light instead of taking an icon from one of the grouped entities. Needs autoComposedDevices on as well. It changes the endpoint layout, so the device has to be removed and added again in the controller, and Apple Home has been seen to stop listing the grouped entities afterwards, so try it on one bridge first (#469)omitEventsInPriming bridge option, off by default: for Google fabrics that acknowledge every chunk of the initial subscription report but never answer the final one, leaving the device permanently offline. With it on, the initial report carries attributes only, live events afterwards are unaffected (#424)climateForceTurnOn: sends climate.turn_on on every Matter On command, for IR controlled ACs where Home Assistant can report on while the device is off (#462)unit_of_measurement. What the controllers show never changed, Apple Home and Alexa convert on their side (#472)battery_charging binary sensor, or a ..._charging_state sensor as Xiaomi exposes), it is mapped automatically now and drives both the battery charge state and the status line. Devices without one keep the old assumption, and a charging sensor picked up this way still stays available as its own device (#450)HAMH_LOOPBACK=1 runs it. This settled the Apple Home battery question: the bridge sends the value, Apple's framework treats BatPercentRemaining as changes-omitted and keeps only the value from pairing or from a read (#450)haUrl and haToken. The credentials are a private field now, and any key named token, secret or password is redacted in that output (#155, #373)heap_size_mb option (#459)Previously in v2.0.56:
advertiseSpecVersion151, supportTermsAndConditions and enableMatterTcp, for Echos that stop right after the attestation step (#449)Previously in v2.0.55:
Previously in v2.0.54 (hotfix release):
Previously in v2.0.53:
event entities and consumption sensors; SmartThings renders them, defaults stay unchangedPreviously in v2.0.52 (hotfix release):
Previously in v2.0.51:
Previously in v2.0.50:
stableIdentity feature flag per bridge (#404, #407)Previously in v2.0.49:
select as an On/Off Switch (#356), plus an experimental mounted On/Off control type (#380)set_tilt_position-only covers (#405), and tilt-only cover-as-light uses the tilt channel (#350)lock.unlock not open (#397), level-to-brightness uses one scale (#402), button drops the Lighting feature (#182), and stale cooling/auto state is cleared (#384)Previously in v2.0.48:
Previously in v2.0.47:
binary_sensors now default to a Matter 1.3 Contact Sensor so Alexa stays stable; the Matter 1.4 Water Leak, Water Freeze, and Rain detector types are selectable per entity through the device-type override (#365)powerEntity/energyEntity if you want the readout (#374)manufacturer entity-filter matcher (#382)lawn_mower entities exposed as a robotic mowerPreviously in v2.0.46:
weather.* entities are exposed as a composed Temperature + Humidity + Pressure sensor read from the entity's attributes (pressure converted to hPa, shown on Google Home)automation entities are momentary: turning one on triggers it and snaps back to off (#364)bun:sqlite constants export stubbed so the esbuild bundle builds against matter.js 0.17.0, add-on heap flag preserved (#358)hvac_action requirement for the Auto running-state display (#309), Google Home ModeSelect label gap (#356), Alexa cover-routine limitation (#312), and the new weather domainPreviously in v2.0.45 (hotfix release):
Previously in v2.0.44:
customServiceAreas preserved in dynamic RvcRunMode supported modes, custom areas dispatched sequentially, currentArea cleared on dock return and no longer inherited stale across restarts, observedCleaning set on every cleaning event (#335)climateKeepModeOnIdle for off+idle ACs; mode kept through a coolβoff transition, freeze applied immediately on off and cleared on action=off (#340)pushKeepalive guarded on construction (#287)customVendorId with Home Assistant device-registry serial fallback (#290)serialNumberSuffix now loads when editing a bridge and is preserved when the serial is trimmed to 32 characters (#330)any_field_regex matcher for grouped AND/OR filter rules (#337)activePower to 0 and gain PowerTopology + cumulativeEnergyImported defaults (#343)device_class=window covers no longer emit EndProductType.Unknown (#312)/exists endpoint instead of a HEAD probe (#336)@codemirror/state (#345)serialize-javascript bumped to 7.0.5 in docs-sitePreviously in v2.0.43:
currentArea updates when cleaning is started outside HAMH (#281)device_class=window maps to Rollershade (#312)mode.vacuum_mop (#322)vacuum.locate is unsupported (#320)systemMode stays put when hvac_action is idle, ha-auto-only ACs no longer expose Matter Auto (#309)target_temp_step (#321)/api/logsPreviously in v2.0.42 (hotfix release):
softwareVersionString now matches the numeric softwareVersion (#316)auto mode is clamped to heat/cool on devices without an AutoMode base (#319)disableClimateFanControl mapping flag, falls back to ThermostatDevice when controllers like Aqara don't recognise RoomAirConditioner (0x0072) (#318)selectedAreas is kept after dispatch instead of being clearedPreviously in v2.0.41:
| Feature | Description |
|---|---|
| π‘οΈ Google Home AC offline fix | DeadFrontBehavior on climate OnOff cluster so RoomAirConditioner stops showing offline on Google Home (#302) |
| πͺ Cover device_class mapping | Map HA garage/gate/window/awning/etc. to the matching Matter WindowCovering type so voice commands hit the right device type (#304) |
| πΊ LG TV commissioning patch | Local patch on matter.js 0.16.11 to accept long NOC operational cert serials (#305) |
| π‘ Alexa brightness-reset behind flag | Old Alexa brightness-reset heuristic moved behind alexaPreserveBrightnessOnTurnOn, default off, Apple Home "set room to 100%" works again (#306) |
| π Google Home fan speed | Uses fan.set_percentage so already-on fans pick up speed changes from Google Home (#308) |
| βοΈ Climate auto mode | Expose Matter Auto mode when HA reports auto in hvac_modes (#309) |
| π Server-mode root identity | Root identity now applies as a single transaction, so controllers don't drop devices mid-swap (#311) |
| πͺ Lift-only blinds | No more TiltBlindTiltOnly on covers without tilt, fixes Alexa routines for roller blinds (#312) |
π·οΈ Per-entity disableClimateOnOff | Turn off the OnOff cluster on climate endpoints per entity for controllers that prefer mode-only control |
π’ serialNumberSuffix per bridge | Append a suffix to every entity serial, useful if controllers like Aqara cache stale device data |
π protocolLogLevel option | Quiet matter.js logs independently from the app log level |
| π₯οΈ Bridge HW/SW version strings | HA device-registry hw_version/sw_version now show up in Matter BasicInformation on server-mode endpoints |
| π¨ Extended color light: XY + enhancedColorMode | XY feature added as mandatory, enhancedColorMode mirrors colorMode |
| π Groups + Scenes | Scenes and Groups clusters added on light, plug, and fan endpoints |
| π§ Boolean state configuration | Cluster added on leak, freeze, rain, and contact sensors |
| π Spanish translation | New es locale (#314, thanks @Yllelder) |
| π§΅ Matter.js 0.16.11 (pinned) | Kept pinned, local NOC serial patch applied |
| β¬οΈ Dep bumps | Vite 8, jsdom 29, MUI x-tree-view 9, i18next 26, react-i18next 17, TypeScript 6.0.3, biome pinned 2.4.3, pnpm overrides for transitive CVEs |
Reliability & resilience: parallel bridge stop in stopAll/restartAll, parallel HA registry fetches, serialized bridge start/stop lifecycle, serialized updateStates with plugin listener detach, HA reconnect retry on transient network errors, 30s timeout on sendMessagePromise, port-conflict reject on web-api start, graceful shutdown on /api/backup/restart, AppEnvironment disposal on SIGINT, stale optimistic state sweep, pending debouncer clear, healthcheck 401 fix under basic auth, deep-equal entity attribute comparison, overlap guard for auto-refresh, safer mireds conversion, aligned colorMode publishing, surfaced bridge import errors, corrected thermostat running state for unknown modes + drying, unified Node version across Dockerfiles, sourcemaps excluded from npm tarball, unused deps dropped (rxjs, strip-color, lodash), unused config-validator utility removed.
Previously in v2.0.39 & v2.0.40 (hotfix releases):
select, input_select, siren domains showing as unsupported in filter preview (#298)Previously in v2.0.38:
| Feature | Description |
|---|---|
| π·οΈ Per-Entity Identity Overrides | customProductName, customVendorName, customSerialNumber per entity mapping (#277, #290) |
| πͺ Garage & Gate Open/Close | Discrete Open/Close mode for garage and gate covers (#55) |
| πΏ Dishwasher Device Type | Dishwasher override for switch entities |
| π¨ Siren Support | Siren domain as OnOff Plug-in Unit |
| π·οΈ productNameFromNodeLabel Flag | Report node label as Matter productName for Aqara controllers |
| π€ Vacuum Room Progress | Dynamic room progress tracking via currentRoomEntity sensor |
| β‘ Startup Force Sync | Immediate force sync on startup to beat stale Alexa queues (#282) |
| π Network Diagnostic API | mDNS/network diagnostic endpoint with dashboard card |
| π Energy on Composed Devices | Energy/power measurement clusters on composed endpoints |
| π©Ί Multi-Admin Fabric Diagnostics | Per-fabric session info in health API |
| π©Ί Docker HEALTHCHECK | Native healthcheck in standalone and addon images |
| π Admin Password Hashing | Admin password stored hashed, timingSafeEqual for lock PIN verification |
| π§΅ Matter.js 0.16.11 | Updated Matter stack |
| π Polish + Traditional Chinese | New pl and zh-tw locales |
Fix highlights: vacuum keepalive for Apple Home "Updatingβ¦" (#287), multi-phase clean progress (#281), GenericSwitch single/multi split for Apple Home buttons (#289), HA restart attribute guards (#286), fan speed restore on turn-on (#275), moisture sensor auto-map to HumiditySensor (#273), TV speaker override (#293), rain + radon sensor auto-mapping, composed sub-endpoint cleanup.
Previously in v2.0.36:
| Feature | Description |
|---|---|
| ποΈ User-Defined Composed Devices | Create custom composed devices via composedEntities mapping (#220) |
| π Plugin Domain Mappings | Domain mapping support in plugin API with cloud-mock example |
| π Valve & Pump Battery | Battery support for valve and pump endpoints |
| π German + Russian Translations | Complete German translation and new Russian language |
| π‘ Session Recovery | Graceful session close, dead session cleanup, mDNS re-announcement (#266) |
| π Quick Link to Failed Devices | Dashboard quick link to failed devices (#270) |
| π‘οΈ Thermostat Fix | Skip climate.turn_on when already on (#269) |
| πͺ Cover Fix | Correct stale targetPosition during external movement (#268) |
| π¬οΈ Air Purifier Fix | Sub-endpoints for composed air purifier, manual temp/humidity mapping (#265) |
| π₯ Cooling-Only Thermostat Fix | Prevent HeatingOnly on cooling-only thermostat (#264) |
| βοΈ Per-Entity Cover Swap | Individual coverSwapOpenClose per cover (#263) |
v2.1.0-alpha.933:
set_cover_position 100 and 0. Off by default, covers without a position keep open/close (#512)v2.1.0-alpha.932:
v2.1.0-alpha.931:
v2.1.0-alpha.930:
v2.1.0-alpha.929:
shutter cover now reports TiltBlindLift with ExteriorVenetianBlind, so already paired ones may show a different blind type. Covers also set a valid product type before their first state arriveslong_press without a following release sent the press twice and left the button held. It now sends press, long press and release oncev2.1.0-alpha.928:
v2.1.0-alpha.927:
v2.1.0-alpha.926:
v2.1.0-alpha.925:
v2.1.0-alpha.924:
v2.1.0-alpha.923:
[object Object], and camera ids HA can't accept (like camera.rtsp-lq) are skipped at startup with a warning (#373)v2.1.0-alpha.922:
v2.1.0-alpha.921:
v2.1.0-alpha.920:
v2.1.0-alpha.919:
v2.1.0-alpha.918:
mdns_strip_global_ipv6 for the add-on and --mdns-strip-global-ipv6 for a container (#392)[!CAUTION] Testing versions are highly unstable and intended for developers only!
ποΈ Vision 1: Callback-based Architecture
| Old (Legacy) | New (Vision 1) |
|---|---|
| Behaviors update themselves | Endpoint updates behaviors via setStateOf() |
| Behaviors call HA actions directly | Behaviors notify via notifyEndpoint() |
New Callback-Behaviors: OnOff, LevelControl, Lock, Cover, Fan, ColorControl, VacuumRunMode, VacuumOperationalState
Updated Endpoints: Switch, Lock, Cover, Vacuum, Button, Valve, Scene, Humidifier, Light, Fan
Filter preview domain fix, select, input_select, siren now show as supported (#298)
Node 22 WebSocket crash loop fix (#297, #299), service init error surfacing, registry retry hardening, support link added
Aqara productNameFromNodeLabel flag, Matter.js 0.16.11, Swedish locale update
HA 2026.3 Clean Area Support, Valetudo Identifier Mapping, Plugin System Hardening, Registry Fingerprint Fix, Roomba Battery Fix, Contact Sensor Fix, Script Momentary Fix, Docusaurus Docs
Automatic Backup, Vacuum Battery Auto-Map, Deprecated Feature Flags Fix
Endpoint Number Preservation, Binary Sensor Battery Auto-Map
Multi-Language Support, Plugin System, New Device Types (PIR, Rain, Electrical, AQ Sensors), Cluster Diagnostics, Dashboard Enhancements, Mapping Profile Export/Import, Fan & Air Purifier Fixes, Stale Session Cleanup, KNX Cover Fix
Controller Profiles & Area Setup, Fan Speed/Preset Fix, Optimistic State Fix, Cover Target Fix, Humidity Auto-Mapping Default
Mapped Entity Propagation Fix, API Error Surfacing
Light currentLevel Fix, Bridge Config Save Fix, Fan Device Feature Fix, Humidity Auto-Mapping Fix
Device Image Support, Custom Fan Speed Mapping, TV Source Selection, Reverse Proxy Base Path, On/Off-Only Fans, Light Brightness Fix, Fan Speed Fixes, Composed Air Purifier Fix, Dreame Multi-Floor Fix, Optimistic State Updates, Frontend Improvements
Valetudo support, Custom Service Areas, ServiceArea Maps, Vacuum Identify/Locate/Charging, Alarm Control Panel, Composed Air Purifier, Dashboard Controls, Vendor Brand Icons, Thermostat fixes, Air Purifier oscillation/wind
Authentication UI, Select entity support, Webhook event bridge, Cluster diagnostics, Matter.js 0.16.10, Docker Node 22, vacuum cleaning mode fallback, vacuum entity filter fix
Vacuum mop intensity, vacuum auto-detection, Roborock room auto-detect, live entity mapping, dynamic heap sizing, multi-fabric commissioning, fan speed label fix
Dashboard landing page, composed devices, bridge wizard feature flags, entity autocomplete, light transitions, live diagnostics, vacuum suction level, thermostat auto-resume, vacuum docked state, memory leak fix
Bridge templates, live filter preview, entity diagnostics, multi-bridge bulk operations, entity health indicators, diagnostic export, EntityLabel/DeviceLabel filters, Power & Energy Measurement, Event domain (GenericSwitch)
Room Label (FixedLabel), thermostat overhaul, lock unlatch/unbolt, binary sensor fix, auto pressure mapping, vacuum fixes, dead session recovery, network map, mobile UI, Labels & Areas page, crash resilience, memory limit
Force Sync, Lock PIN, Cover/Blinds improvements, Roborock Rooms, Auto Entity Grouping, Water Heater, Vacuum Server Mode, OOM fix
Climate/Thermostat fixes, Cover position fix, Vacuum battery, Humidifier improvements, Entity Mapping, Alexa brightness preserve
Custom bridge icons, Basic Video Player (TV), Alexa deduplication, Auto-only thermostat, Health Check API, WebSocket, Full backup/restore
Graceful crash handler, PM2.5/PM10 sensors, Water Valve, Smoke/CO Detector, Pressure/Flow sensors, Air Purifier, Pump device
Dark Mode toggle, Device list sorting
Matter Bridge, Multi-Fabric support, Health Monitoring, Bridge Wizard, AirQuality sensors, Fan control, Media playback
| Home Assistant Domain | Matter Device Type | Notes and Feature Flags |
|---|---|---|
light | Extended Color (color or color temperature), Dimmable, On/Off | powerEntity, energyEntity set by hand, lights don't get them auto-mapped (#374). Can be set to On/Off Plug-in Unit so Apple Home shows its wattage (#484) |
switch | On/Off Plug-in Unit | Power and energy sensors of the same device are mapped automatically. Overrides: Dishwasher, Laundry Washer, Laundry Dryer, EV Charger, Pump, Water Valve, On/Off Switch, Mounted On/Off Control |
input_boolean | On/Off Plug-in Unit | |
lock | Door Lock | PIN credentials, unbolt when the lock can open |
cover | Window Covering | coverSwapOpenClose, coverExposeAsDimmableLight (#372) |
climate | Room Air Conditioner (with fan modes), otherwise Thermostat | disableClimateFanControl, disableClimateOnOff, climateExposeFan (#309), battery via batteryEntity |
fan | Fan, On/Off Plug-in Unit without speed control | Oscillation, wind modes. Air Purifier override with filterLifeEntity |
humidifier | Fan, the fan speed sets the target humidity | Matter has no humidifier type |
binary_sensor | Contact, Occupancy, Smoke/CO Alarm, On/Off Sensor | Leak and freeze default to Contact Sensor (Alexa-safe); the Matter 1.4 Water Leak, Water Freeze and Rain detectors are overrides (#365) |
sensor | Temperature, Humidity, Pressure, Flow, Light, Air Quality (COβ, CO, PM1, PM2.5, PM10, TVOC, NOβ, ozone, radon), Electrical Meter (power, energy, voltage, current), Battery | batteryEntity, humidityEntity, pressureEntity. Overrides: Solar Power, Electrical Utility Meter, EV Charger, Battery Storage with power and energy |
event | Generic Switch | Doorbell override (experimental) |
button, input_button | On/Off Plug-in Unit, pressed when turned on | |
automation, script, scene | On/Off Plug-in Unit, triggers when turned on | On/Off Switch override, needs a one-time re-pair (#380) |
select, input_select | Mode Select | selectExposeAsSwitch for a select with on and off options |
alarm_control_panel | Mode Select | On/Off Plug-in Unit override to arm and disarm |
media_player | Speaker, Basic Video Player for TVs | |
valve | Water Valve | |
vacuum | Robot Vacuum Cleaner | serverMode, roomEntities, customServiceAreas, vacuumRoomSwitches, vacuumOnOff, batteryEntity, cleaningModeEntity, suctionLevelEntity, mopIntensityEntity, chargingStateEntity (#377) |
lawn_mower | Robot Vacuum Cleaner, Matter has no mower type yet | Same flags as the vacuum (#301) |
water_heater | Thermostat (heating) | Override: Matter 1.4 Water Heater (0x050F) with Boost |
siren, remote | On/Off Plug-in Unit | |
weather | Temperature Sensor with humidity and pressure |
Which controller shows which type is in the Controller Compatibility matrix (Apple Home, Google Home, Alexa, Aqara Home, SmartThings).
π See Supported Device Types Documentation for details
Common per-entity flags: updateThrottleMs rate-limits how often an entity pushes updates to controllers (#351), coverExposeAsDimmableLight exposes a cover as a dimmable light for Alexa routines (#372), chargingStateEntity maps a charging-state sensor (#377), climateExposeFan exposes a climate AC's fan as its own endpoint (#309).
Filter rules match on these matcher types: pattern, regex, domain, platform, entity_label, device_label, entity_label_regex, device_label_regex, any_field_regex, area, entity_category, device_name, product_name, device_class. The new manufacturer matcher matches the device manufacturer (or default_manufacturer) and supports * wildcards (#382).
Configurable auto-recovery with failure timestamps in Settings, controller-compatibility warnings on each bridge page, per-entity device-health diagnostics on the health dashboard, and a warning when a bridge exposes device types its controller does not support.
A built-in plugin exposes Home Assistant cameras as Matter Cameras (0x0142). Experimental and SmartThings-only as of 2026. Live view could not work until the #373 fix; a loopback test that does what SmartThings' camera driver does now streams end to end, a test on real SmartThings hardware is still missing.
Apple Home and Alexa do not properly support bridged robot vacuums. When your vacuum is exposed through a standard Matter bridge, you may experience:
This is because these platforms expect robot vacuums to be standalone Matter devices, not bridged devices.
Server Mode exposes a device as a standalone (non-bridged) Matter endpoint without the bridge wrapper. It works for any device type, not just vacuums, and a bridge can host standalone devices. For a robot vacuum this makes it fully compatible with Apple Home and Alexa.
For more details, see the Robot Vacuum Documentation.
Add this repository to your Add-on Store:
https://github.com/RiDDiX/home-assistant-addons
Three add-ons are available:
hamh) - Stable releasehamh-alpha) - Pre-release, gets every fix firsthamh-testing) - Experimental, may breakdocker run -d \
--name home-assistant-matter-hub \
--network host \
-v /path/to/data:/data \
-e HAMH_HOME_ASSISTANT_URL=http://192.168.178.123:8123 \
-e HAMH_HOME_ASSISTANT_ACCESS_TOKEN=your_long_lived_access_token \
ghcr.io/riddix/home-assistant-matter-hub:latest
Note: All environment variables require the
HAMH_prefix. See the Installation Guide for all available options.
For alpha versions, use tag alpha instead of latest.
Please see the documentation for detailed installation instructions, configuration options, known issues, limitations and guides.
Your Matter devices suddenly show "No Response" (Apple Home), "Unavailable" (Google Home), or become unresponsive after some time, even though the bridge is still running and other controllers (e.g., Alexa) continue to work fine.
Matter relies heavily on mDNS (multicast DNS) for device discovery and reachability. Many routers, access points, and managed switches have features that filter, throttle, or block multicast traffic, which breaks Matter communication silently.
π‘ This was confirmed and documented thanks to the excellent systematic testing by @omerfaruk-aran in #129. The issue was traced to a TP-Link Archer AX50 (in AP mode) sitting between the Apple TV and the network, its default settings were blocking/limiting mDNS/Bonjour traffic over time.
224.0.0.251 / ff02::fb)| Device | Issue | Fix |
|---|---|---|
| TP-Link Archer AX50 (AP mode) | mDNS traffic blocked/limited over time | Firmware update + disable DHCP on the AP |
| Ubiquiti UniFi APs | IGMP Snooping can filter mDNS | Disable IGMP Snooping or enable mDNS Reflector |
| Managed Switches (various) | Multicast filtering enabled by default | Allow mDNS multicast groups |
Does Alexa still work when Apple Home shows "No Response"?
Does removing a Home Hub (HomePod/Apple TV) fix it?
Try binding mDNS to a specific interface:
--mdns-network-interface eth0
(or end0, enp0s18, etc., check your system)
fd00::/8), not just link-local (fe80::). See Troubleshooting and Discussion #39Migrating from the original t0bst4r/home-assistant-matter-hub is easy. Your Matter fabric connections and paired devices will be preserved!
Backup your data:
cp -r /addon_configs/*_hamh /config/hamh-backup
# Verify the backup was copied correctly
ls /config/hamh-backup
Uninstall the old add-on (Settings β Add-ons β Uninstall) and make sure the old folder is removed:
rm -rf /addon_configs/*_hamh
Add the new repository:
https://github.com/RiDDiX/home-assistant-addons
Install and start the new add-on once (creates the data folder), then stop it
Clear the new folder and restore your backup:
rm -rf /addon_configs/*_hamh/*
cp -r /config/hamh-backup/* /addon_configs/*_hamh/
Start the add-on again - your devices should reconnect automatically
Simply change the image from:
ghcr.io/t0bst4r/home-assistant-matter-hub:latest
to:
ghcr.io/riddix/home-assistant-matter-hub:latest
Your volume mounts stay the same - no data migration needed.
For detailed instructions, see the full Migration Guide.
This project thrives thanks to the amazing community! Special thanks to everyone who contributes by reporting bugs, suggesting features, and helping others.
Note: GitHub doesn't surface contributors on this repo because it's still a fork of the original. The list below is maintained by hand.
Newest first.
| Contributor | Contributions |
|---|---|
| @iblur01 | π Translator - French translation completed (#504) |
| @toineenzo | π Translator - Dutch translation (#503) |
| @qbattersby | π€ Code Contributor - LevelControl transitionTime patch for matter.js 0.17, so Google Home can dim already-on lights (#383) |
| @Yllelder | π Translator - Spanish translation (#314) |
| @MStankiewiczOfficial | π Translator - Polish translation (#288, #329) |
| @aetasoul | π€ Code Contributor - Immediate force sync on startup to beat stale Alexa queues (#282) |
| @omerfaruk-aran | π Turkish translation (#260) + π§ Network debugging for "No Response" issues (#129) |
| @gustavakerstrom | π€ Code Contributor - Custom fan speed mapping (#226), template description fix (#215) |
| @AmineDjeghri | π Migration instructions for the addon data folder (#171) |
| @markgaze | π€ Code Contributor - Ecovacs Deebot room support (#118) |
| @codyc1515 | π₯ Top Reporter - Climate/thermostat bugs (#52, #24, #21, #20), README badge & install steps (#285), binary sensor classes (#66), fan control init (#10) |
| @AymericLeFeyer | π README YouTube video link |
| @depahk | π Migration docs (#32) |
| @Hatton920 | π€ Vacuum Expert - Intensive testing of Robot Vacuum Server Mode, Apple Home & Siri validation |
| @razzietheman | π₯ Active Tester - Bridge icons (#101), sorting (#80), feature requests (#31, #30), extensive UI/UX feedback |
| @SH1FT-W | π Sponsor + Vacuum room selection feature request (#49) |
| @Chrulf | π Google Home brightness debugging (#41), detailed logs & testing |
| @Fettkeewl | π Script import bug (#26), Alias feature request (#25) |
Thank you to everyone who helps improve this project by reporting issues!
| User | Issues |
|---|---|
| @omerfaruk-aran | #129 |
| @markgaze | #118 |
| @BlairC1 | #117 |
| @Giamp96 | #116 |
| @NdR91 | #115 #106 |
| @Fry7 | #114 |
| @siobhanellis | #112 |
| @Hatton920 | #110 |
| @gette | #95 |
| @400HPMustang | #103 |
| @vandir | #102 |
| @razzietheman | #101 #100 #80 #31 #30 |
| @seitenprofi | #176 |
| @semonR | #99 #58 |
| @italoc | #78 |
| @marksev1 | #62 |
| @smacpi | #60 |
| @mrbluebrett | #53 |
| @anpak | #45 |
| @alondin | #43 |
| @Chrulf | #41 |
| @Weske90 | #40 |
| @didiht | #37 |
| @Dixiland20 | #34 |
| @chromaxx7 | #29 |
| @Tomyk9991 | #28 |
| @datvista | #27 |
| @bwynants | #23 |
| @Pozzi831 | #22 |
| @codyc1515 | #52 #24 #21 #20 |
Donations are completely voluntary! This project exists because of passion for open source, not money. Thank you to everyone who has supported it, it truly means a lot! β€οΈ
π₯ First Sponsor: @thorsten-gehrig
| π @SH1FT-W | π @ilGaspa | π @linux4life798 |
| π @torandreroland | π @ralondo | π @bexxter85-ux |
| π @dinariox | π @JRCondat | π @d3rby91 |
| π @nicoodeimos | π @ustari28 | π Markus MΓΌller (@Dingosworld) |
| π StefanS | π Manny B. | π Bonjon |
| π TobiR | π Franz Huber | π Michele Larese de Prata |
| π @CNCB | π @pelican1997 | π @PeJanNL |
| π @bra1nbuster | π @knuti1960 | π @ppttu |
π ...and anonymous supporters who prefer not to be named.
[!NOTE] Completely optional! This project will continue regardless of donations. I maintain this in my free time because I believe in open source.
If you find this project useful, consider supporting its development:
Your support helps cover hosting costs and motivates continued development. Thank you! β€οΈ
609 followers Β· starred Aug 2026
193 followers Β· starred Jul 2026
269 followers Β· starred Feb 2026
66 followers Β· starred May 2026