[3.11.0] - 2026-10-23
Breaking changes
- [matter]: Bump
matter.jsto v.0.18.0 and Matter to 1.6.1. See Matter 1.6.1 changes from 1.6.0 and Matter.js 0.18 changes from 0.17. - [matter]: matter.js 0.18 validates every endpoint against its declared device types (Matter 1.6.1 Core § 9.2). Matterbridge uses the
warnmode in production: a non-conformant plugin device is logged, not refused. - [matter]: Update the device types to Matter 1.6.1: Simple device types with mandatory application clients (e.g. On/Off Light Switch) now require the Binding cluster server, mapped to
MatterbridgeBindingServer.
Development Breaking changes
- [matter.js]: The CommodityMetering and CommodityTariff fields use
Idsinstead ofIDs:dayEntryIds,dayPatternIdsandtariffComponentIds. - [matter.js]: Open enums (OperationalState, RvcOperationalState, Mode Base
ModeTagStruct.value, ...) are typed asEnum | number: comparisons with enum members are flagged bytypescript/no-unsafe-enum-comparison; widen the member withas number. - [matter.js]: A mandatory command implemented with
Behavior.unimplementedfails the endpoint initialization instrictvalidation mode. - [test-utils]:
createTestEnvironment()(vitest, jest and bun) sets the endpoint validation to'strict'by default, so non-conformant test devices are refused; pass'warn'or'off'to relax it. UseaddBridgedDevice()for test devices that would be bridged. - [test-utils]: Remove the
@matterbridge/jest-utilsand@matterbridge/vitest-utilspackages and thematterbridge/jest-utils,matterbridge/jest-utils/matter,matterbridge/vitest-utilsandmatterbridge/vitest-utils/matterexports. Use@matterbridge/test-utils(matterbridge/test-utils/jest,matterbridge/test-utils/vitestand their/setupand/mattersubpaths) instead.
Added
- [frontend]: Add an optional tree view for device clusters with a saved Grid/Tree preference and live attribute updates. Thanks to @RinDevJunior for PR #660.
- [camera]: Add
closeWebRtcSessions(device)tomatterbridge/devices/cameraso a plugin closes its own WebRTC sessions inonShutdown. - [frontend]: Add the
Autofrontend theme, which follows the OS or browser color scheme (dark or light). The default staysDark. - [test-utils]: Add
addBridgedDevice()to the test-utils helpers: it adds the Bridged Node device type and, when missing, theBridgedDeviceBasicInformationServerto a test device, likeregisterDevice()does in bridge mode. - [matter]: Set restart required, with a log and a snackbar message, when the last fabric is removed and the server node is reset to factory defaults, since the
subscribeAttributelisteners are lost. Closes #657. Thanks Calvin Che. - [chip]: Add
--start --local(npm run chip:start:local) torun-matterbridge-chip-tests.mjsto run the locally builtmatterbridge:chip-testimage without pulling.
Changed
- [workflows]: Pin GitHub workflow dispatch requests to REST API version
2026-03-10to avoid API retirement warnings. - [utils/scripts]: Pin GitHub data-model and Bun release requests to REST API version
2026-03-10. - [matterbridge]: Bump
matterbridgeversion to v.3.11.0. - [matterbridge]: Bump
@types/bunto v.1.4.3. - [matterbridge]: Bump
@types/nodeto v.26.6.5. - [matterbridge]: Bump
@vitest/coverage-v8to v.5.0.5. - [matterbridge]: Bump
jsdomto v.30.1.3. - [matterbridge]: Bump
markedto v.18.1.1. - [matterbridge]: Bump
oxfmtto v.0.73.0. - [matterbridge]: Bump
oxlintto v.1.88.0. - [matterbridge]: Bump
oxlint-tsgolintto v.7.0.2004. - [matterbridge]: Bump
vitestto v.5.0.5. - [core]: Bump
expressto v.5.3.0. - [thread]: Bump
@zip.js/zip.jsto v.2.24.0. - [frontend]: Add
apps/frontendto the npm workspaces: it is now versioned with matterbridge (v.3.11.0) and published bypublish-workspaces. - [frontend]: Move all dependencies to devDependencies, since they are bundled by vite into
build. - [scripts]: Fix
pack-workspaces --dry-runcreating a tarball instead of previewing its contents. - [scripts]: Add
buildFrontendand run it after the clean build inpublish-workspaces,pack-workspaces,pack-monorepo,runMeBeforePublish,prepublishOnlyandsoftReset; removereset:all,softReset:all,softReset:bun:allandrunMeBeforePublish:all(the frontend coverage now runs inrunMeBeforePublish). - [frontend]: Bump
reactto v.19.3.1. - [frontend]: Bump
react-domto v.19.3.1. - [frontend]: Remove duplicated devDependencies (
@types/node,@vitest/coverage-v8,vitest,typescript,oxfmt,oxlintandoxlint-tsgolint) and use the root tooling; movejsdomto the root devDependencies withvitest. - [docker]: Add the
matterbridge-cameraandmatterbridge-webcamplugins (dev branch) to thedevandbundevimages. - [docs]: Show npm and Docker downloads with 1 decimal in index.html and update plugins downloads to 1.3M+.
- [chip]: Build the
chip-testdocker image on the CHIPv1.6.1-branchand rebase theTC_DeviceBasicComposition.pyandTest_TC_OO_2_2.yamlpatches on it. - [chip]: Run the SmokeCOAlarm conformance tests with the
TC_SMOKECO_2_x.pyPython tests, sincev1.6.1-branchremoved the YAML ones, on all three SmokeCOAlarm endpoints (709, 7091 and 7092). - [chip]: Show the endpoint and the test run duration in each result line of the CHIP test summary log.
Fixed
-
[test-utils]: Report strict endpoint registration violations, including nested causes, without serializing the Matter node graph in Vitest, Jest and Bun.
-
[frontend]: Update restart and update-required flags through Matterbridge broadcast requests, including plugin restart and update notifications.
-
[chip]: Map the SmokeCOAlarm critical battery, hardware fault and end of service test event triggers sent by the Python tests, and start the self-test from the app-pipe
LongPresscommand. -
[chip]: Patch
TC_SMOKECO_2_1.pyandTC_SMOKECO_2_5.pyto guard the optionalContaminationStateandSmokeSensitivityLevelattributes and fix misplacedskip_stepcalls. -
[chip]: Patch
Test_TC_DRLK_2_1.yamlto restoreOperatingModeafter Step 24c, soNoRemoteLockUnlockno longer fails the following DoorLock tests with matter.js 0.18. -
[chip]: Patch
TC_TSTAT_4_2.pyto give the presets added by Steps 13 and 18 a unique name, as Matter 1.6.1 § 4.3.10.23.3 requires. -
[chip]: Run
TC_FAN_3_1.pywith--no-wildcard-subscription, so thev1.6.1-branchsubscription check no longer times it out. -
[chip]: Poll the CHIP test app pipe every 10 ms instead of 50 ms, so
TC_RVCOPSTATE_2_3.pyno longer reads the state before theResetcommand is applied. -
[camera]: The PTZ move commands set
MovementStateto Moving, respond, and complete on a short timer (Idle and the newMPTZPosition); a move received while moving fails with BUSY (Matter 1.6.1 § 11.3.7.1.4). -
[camera]: Remove the duplicate BasicInformation setup in
Camerathat briefly named itMatterbridge Chime. -
[camera]: Fix stale JSDoc in
CameraOptions,CameraandSnapshotCameradescribing the implemented features. -
[camera]: Remove the unused static
WeriftWebRtcSession.closeAll(), which would close the sessions of every plugin. -
[camera]: Unref the WebRTC session diagnostics timer, so it no longer keeps the process alive.
-
[ffmpeg]: Log the exit of every ffmpeg process, and warn when a WebRTC track generator exits while its track is still attached.
-
[scripts]: Fix the IPv4 and IPv6 lines of
info-debian.shandinfo-alpine.shoutside plain Docker bridges: readsrc/devfromip route getby keyword (Docker Desktop host networking printedIPv4: 2), take IPv6 from the outgoing interface instead ofeth0, and keep only the matching family in thehostnamefallback. -
[thermostat]: Initialize the presets thermostat running state with all outputs off. Thanks Aayush Sharma.
-
[frontend]: Await the diagnostic log writes instead of a fixed 500 ms wait in
generateDiagnostic(), so view and download of the diagnostic are faster and never read a partial file. -
[bun]: Update
buntest/wssTest.test.tsandREADME-BUN.mdfor Bun 1.4.4: thewsclient now honors top-level TLS options andbun test --coveragecounts implicit constructors. -
[bun]: Fix the
Dockerfile.bundevbuild:bun pm pkghas no--workspaces/--include-workspace-rootflags (Bun 1.4.3 and earlier silently ignored unknown flags, Bun 1.4.4 rejects them), so stripdevDependenciesandscriptsin the root and in each workspace. -
[matterbridge]: Write the server node storage context values in
createServerNodeContext()only when missing or changed (as inMatterNode), avoiding 17 disk writes per server node at every start.