github Luligu/matterbridge 3.10.14
Release 3.10.14

5 hours ago

[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/clusters uses pluginName and number; both WebSocket and platform cluster requests require serialNumber and uniqueId.
  • [test-utils]: addDevice() and deleteDevice() (vitest, jest and bun) take ticks and microTurns (default 1) after rounds, so pause moves from the 4th to the 6th parameter; rounds now defaults to 1 (was 3).
  • [test-utils]: flushServerNode() (vitest, jest and bun) takes a first rounds parameter (default 3) and passes rounds, ticks, microTurns and pause to 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: SkipArea conformance [CurrentArea | Progress] makes the command optional when either attribute is implemented (Matter 1.6.1 Core § 7.3.4; Application Cluster § 1.17.7). Advertising SkipArea by default is a choice in Matterbridge’s RoboticVacuumCleaner implementation, not a specification requirement; SkipAreaResponse is required when SkipArea is implemented.

Added

  • [core]: Add pluginName-targeted platform_get_apidevices, platform_get_apiselectdevices and platform_get_apiselectentities broadcast requests.
  • [core]: Add platform_get_apiclusters with pluginName and number parameters to retrieve a device's cluster attributes and child endpoints in the frontend API format.
  • [backend]: Fetch /api/clusters data from the matching platform through platform_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 constrainedMemory and peakConstrainedMemory to the Tracker snapshot.
  • [types]: Add constrainedMemory to SystemInformation, PlatformMatterbridge and SharedMatterbridge.
  • [types]: Add the ApiSystemUpdate type and the system_update WebSocket message.
  • [core]: The cli broadcasts a single system_update WebSocket message (uptime, memory, memory limit and cpu) on each tracker snapshot.
  • [test-utils]: Add getSharedMatterbridge(), a mocked SharedMatterbridge for vitest, jest and bun.
  • [test-utils]: Add the validation parameter ('off', 'warn' or 'strict', default 'strict') to createTestEnvironment() 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, batChargingCurrent and activeBatChargeFaults parameters to createDefaultPowerSourceRechargeableBatteryClusterServer().
  • [Intercom]: Add the switchOptions option and the addSwitch() method for the Generic Switch child endpoints.
  • [docs]: Extend Camera with browser peers hiding their address behind mDNS .local candidates, 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() in runtimeDocker.ts to detect a Linux container (Docker, Podman, VS Code dev containers, Codespaces) without the --docker parameter.
  • [utils]: Add getDockerRuntimeInfo() (container kind, --docker, official image build config, bridge network) and isDockerBridgeNetwork() in runtimeDocker.ts, and isRoot() and hasPasswordlessSudo() in runtime.ts.

Changed

  • [core]: Honor the extended flag 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 test video source follows videoResolution and videoBitrate like the webcam and rtsp sources (was fixed at 640x480 and 1000 kbps).
  • [webrtc]: Add MATTERBRIDGE_TEST_VIDEO_FPS to set the test video source frame rate (default 30, was fixed at 10), with a keyframe every 2 seconds.
  • [webrtc]: The webcam video 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 the PATH of a launchd service.
  • [matterbridge]: Bump matterbridge version to v.3.10.14.
  • [matterbridge]: Bump marked to v.18.1.0.
  • [matterbridge]: Bump oxfmt to v.0.72.0.
  • [matterbridge]: Bump oxlint to v.1.87.0.
  • [core]: Bump express-rate-limit to v.8.7.1.
  • [core]: Bump werift to v.0.25.0.
  • [thread]: Bump @zip.js/zip.js to v.2.23.0.
  • [core]: Remove the legacy cpu_update, memory_update and uptime_update WebSocket messages, the wssSend*Update methods and the matching cliEmitter events (replaced by system_update).
  • [types]: SharedMatterbridge.systemInformation is now a read-only Pick of SystemInformation.
  • [utils]: Tracker reads its flags with the hasParameter helpers; 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 rss and Process heap.
  • [frontend]: Show the full (not compact) system info table on mobile.
  • [frontend]: Remove matterbridge-camera and matterbridge-webcam from the plugin ignore list so they can be searched and installed.
  • [frontend]: Bump frontend version to v.3.6.5.
  • [frontend]: Bump @mui/material to v.9.5.0.
  • [frontend]: Bump @mui/icons-material to v.9.5.0.
  • [frontend]: Bump @vitejs/plugin-react to v.6.1.2.
  • [frontend]: Bump jsdom to v.30.1.2.
  • [frontend]: Bump vite to v.8.3.4.
  • [frontend]: Bump oxfmt to v.0.72.0.
  • [frontend]: Bump oxlint to v.1.87.0.
  • [tests]: Use getSharedMatterbridge() in the matterNode tests, add the cliHistory bun test and include cliHistory in 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 forEachAttribute attribute 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 matterTest bun test to port 15000 (was colliding with the intercom test).
  • [vscode]: Add the Buntest: <Area> tasks and Buntest: All.
  • [tests]: Drop the cluster behavior tests from matterbridgeEndpoint-matterjs (covered by the behaviors and devices suites) and cover the remaining MatterbridgeEndpoint branches.
  • [bun]: Document in README-BUN.md known issues that bun test --coverage never 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() and deleteDevice() passed pause as the ticks argument of flushAllEndpointNumberPersistence(), 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, BatChargingCurrent and ActiveBatChargeFaults on the battery Power Source (Matter 1.6.1 Device Library § 14.4.6.2), with the new batCapacity option.
  • [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).

Buy me a coffee

Don't miss a new matterbridge release

NewReleases is sending notifications on new releases.