[3.10.14] - 2026-10-16
Breaking news
Two new production plugins bring Matter cameras to Matterbridge. Both require Matterbridge 3.10.14 or newer and ffmpeg. In Docker, ffmpeg is installed automatically at start if it is not found (autoInstallFfmpeg, enabled by default).
-
matterbridge-camera: for network cameras that provide an RTSP stream (IP cameras, NVRs, doorbells). Cameras are configured manually with a video URL, an optional audio URL, resolution and bitrate; no discovery is performed.
-
matterbridge-webcam: for local cameras connected to the Matterbridge host (USB webcams, built-in laptop cameras). Webcams and microphones are discovered with a single button in the frontend on Linux (v4l2), macOS (avfoundation) and Windows (dshow).
Breaking changes
- [matterbridge]: Require Node.js 22.13.0 or newer (supported majors: 22, 24 and 26); Node.js 20 is no longer supported.
Development Breaking changes
- [types]:
/api/clustersusespluginNameandnumber; both WebSocket and platform cluster requests requireserialNumberanduniqueId. - [test-utils]:
addDevice()anddeleteDevice()(vitest, jest and bun) taketicksandmicroTurns(default 1) afterrounds, sopausemoves from the 4th to the 6th parameter;roundsnow defaults to 1 (was 3). - [test-utils]:
flushServerNode()(vitest, jest and bun) takes a firstroundsparameter (default 3) and passesrounds,ticks,microTurnsandpauseto the endpoint number persistence flush, so it can run without timer pauses.
Development news
- [errata]: Clarification of the v.3.10.12 RVC release note:
SkipAreaconformance[CurrentArea | Progress]makes the command optional when either attribute is implemented (Matter 1.6.1 Core § 7.3.4; Application Cluster § 1.17.7). AdvertisingSkipAreaby default is a choice in Matterbridge’sRoboticVacuumCleanerimplementation, not a specification requirement;SkipAreaResponseis required whenSkipAreais implemented.
Added
- [core]: Add
pluginName-targetedplatform_get_apidevices,platform_get_apiselectdevicesandplatform_get_apiselectentitiesbroadcast requests. - [core]: Add
platform_get_apiclusterswithpluginNameandnumberparameters to retrieve a device's cluster attributes and child endpoints in the frontend API format. - [backend]: Fetch
/api/clustersdata from the matching platform throughplatform_get_apiclusters. - [utils]: Add
constrainedMemory()to@matterbridge/utils/bun: the container (cgroup) memory limit, or the total memory when there is none, normalized across Node.js and Bun. - [utils]: Add
constrainedMemoryandpeakConstrainedMemoryto theTrackersnapshot. - [types]: Add
constrainedMemorytoSystemInformation,PlatformMatterbridgeandSharedMatterbridge. - [types]: Add the
ApiSystemUpdatetype and thesystem_updateWebSocket message. - [core]: The cli broadcasts a single
system_updateWebSocket message (uptime, memory, memory limit and cpu) on each tracker snapshot. - [test-utils]: Add
getSharedMatterbridge(), a mockedSharedMatterbridgefor vitest, jest and bun. - [test-utils]: Add the
validationparameter ('off','warn'or'strict', default'strict') tocreateTestEnvironment()in the vitest, jest and bun helpers. - [frontend]: Add the
Memory limit(container or cgroup constrained memory) to the system info table; it is shown only when it differs from the total memory. - [powerSource]: Add optional
batCapacity,batTimeToFullCharge,batChargingCurrentandactiveBatChargeFaultsparameters tocreateDefaultPowerSourceRechargeableBatteryClusterServer(). - [Intercom]: Add the
switchOptionsoption and theaddSwitch()method for the Generic Switch child endpoints. - [docs]: Extend Camera with browser peers hiding their address behind mDNS
.localcandidates, Docker Desktop UDP networking, the dev container setup, the stream resolution and allocation, the test video source and all the camera and WebRTC environment variables. - [utils]: Add
isDocker()inruntimeDocker.tsto detect a Linux container (Docker, Podman, VS Code dev containers, Codespaces) without the--dockerparameter. - [utils]: Add
getDockerRuntimeInfo()(container kind,--docker, official image build config, bridge network) andisDockerBridgeNetwork()inruntimeDocker.ts, andisRoot()andhasPasswordlessSudo()inruntime.ts.
Changed
- [core]: Honor the
extendedflag in local frontend, backend and platform device API requests. - [frontend]: Request extended device data in HomeDevices and DevicesTable.
- [test-utils]: Set strict endpoint validation in all Matter test environment helpers.
- [core]: Set warn endpoint validation in the Matterbridge and MatterNode environments.
- [core]: Fetch platform and shared Matterbridge data after MatterNode construction.
- [core]: Return the MatterNode shared Matterbridge instance to plugin platforms.
- [core]: Bind plugin endpoint callbacks to their MatterNode instance.
- [core]: Catch and log MatterNode broadcast message handler rejections with
fireAndForget. - [core]: Skip unchanged values when initializing MatterNode storage contexts.
- [webrtc]: The
testvideo source followsvideoResolutionandvideoBitratelike thewebcamandrtspsources (was fixed at 640x480 and 1000 kbps). - [webrtc]: Add
MATTERBRIDGE_TEST_VIDEO_FPSto set thetestvideo source frame rate (default 30, was fixed at 10), with a keyframe every 2 seconds. - [webrtc]: The
webcamvideo source forces a constant 30 fps output (-fps_mode cfr -r 30), so the bitrate cap holds on macOS avfoundation (was about 7x the configured bitrate with a gray picture). - [ffmpeg]:
installFfmpeg()also works without root through passwordless sudo (sudo -n), as in a dev container. - [ffmpeg]: Resolve the Homebrew ffmpeg on Apple Silicon (
/opt/homebrew/bin/ffmpeg), which is not on thePATHof a launchd service. - [matterbridge]: Bump
matterbridgeversion to v.3.10.14. - [matterbridge]: Bump
markedto v.18.1.0. - [matterbridge]: Bump
oxfmtto v.0.72.0. - [matterbridge]: Bump
oxlintto v.1.87.0. - [core]: Bump
express-rate-limitto v.8.7.1. - [core]: Bump
weriftto v.0.25.0. - [thread]: Bump
@zip.js/zip.jsto v.2.23.0. - [core]: Remove the legacy
cpu_update,memory_updateanduptime_updateWebSocket messages, thewssSend*Updatemethods and the matchingcliEmitterevents (replaced bysystem_update). - [types]:
SharedMatterbridge.systemInformationis now a read-onlyPickofSystemInformation. - [utils]:
Trackerreads its flags with thehasParameterhelpers; the verbose start log groups the CPUs by model and also logs the memory limit and the uptimes. - [frontend]: Rename system info labels to
Host memory,Process rssandProcess heap. - [frontend]: Show the full (not compact) system info table on mobile.
- [frontend]: Remove
matterbridge-cameraandmatterbridge-webcamfrom the plugin ignore list so they can be searched and installed. - [frontend]: Bump
frontendversion to v.3.6.5. - [frontend]: Bump
@mui/materialto v.9.5.0. - [frontend]: Bump
@mui/icons-materialto v.9.5.0. - [frontend]: Bump
@vitejs/plugin-reactto v.6.1.2. - [frontend]: Bump
jsdomto v.30.1.2. - [frontend]: Bump
viteto v.8.3.4. - [frontend]: Bump
oxfmtto v.0.72.0. - [frontend]: Bump
oxlintto v.1.87.0. - [tests]: Use
getSharedMatterbridge()in the matterNode tests, add thecliHistorybun test and includecliHistoryin the bun coverage. - [tests]: Consolidate CLI error tests and speed up the suite by mocking Matterbridge imports and replacing fixed delays.
- [tests]: Use fake timers in the windowCovering movement and doorLock relock tests, and drop the duplicated timed windowCovering tests from
matterbridgeEndpoint-matterjs. - [tests]: Add the bun tests of all the device classes (
packages/core/buntest/devices), with zero-pause test helpers. - [tests]: Add an exact
forEachAttributeattribute snapshot to every device class test (device and child endpoints) to catch matter.js drifts, and drop the per-attribute type checks already covered by the snapshot. - [tests]: Move the root
matterTestbun test to port 15000 (was colliding with the intercom test). - [vscode]: Add the
Buntest: <Area>tasks andBuntest: All. - [tests]: Drop the cluster behavior tests from
matterbridgeEndpoint-matterjs(covered by the behaviors and devices suites) and cover the remainingMatterbridgeEndpointbranches. - [bun]: Document in README-BUN.md known issues that
bun test --coveragenever counts implicit class constructors as called (upstream oven-sh/bun#42730).
Fixed
- [core]: Use the compliant TiltOnlyInteriorBlind end product type for tilt-only window coverings.
- [tests]: Prevent test output leakage.
- [core]: Don't answer an aborted download with a 500: on Bun 1.4.3 it threw an uncaught
ERR_HTTP_HEADERS_SENT(oven-sh/bun#44925). - [test-utils]:
addDevice()anddeleteDevice()passedpauseas theticksargument offlushAllEndpointNumberPersistence(), adding ~60ms to every call. - [core]:
setWindowCoveringCurrentTargetStatus()threw a conformance error on a tilt only window covering: it now sets the tilt positions when the server has no Lift feature. - [BatteryStorage]: Set the mandatory
BatCapacity,BatTimeToFullCharge,BatChargingCurrentandActiveBatChargeFaultson the battery Power Source (Matter 1.6.1 Device Library § 14.4.6.2), with the newbatCapacityoption. - [Intercom]: Add the mandatory Generic Switch child endpoint with a momentary switch (Matter 1.5.1 Intercom revision 2, Device Library § 16.4.4 and § 16.4.8).