Release 0.17.0 on 20.05.2026 #3776
Apollon77
announced in
Announcements
Replies: 1 comment 1 reply
-
|
Is there any rough estimate on when Home Assistant's matter app will be officially moved to this (without using the beta option)? |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
matter.js 0.17 — Matter 1.5.1, TCP Support, Controller Optimizations, and More
We're excited to announce matter.js 0.17, bringing Matter 1.5.1 specification support, TCP support, enhancements for Controller usage, and many other improvements to the JavaScript Matter SDK.
Thanks also go to all community contributors who keep making matter.js better with every release.
What's New in Version 0.17
This release adds support for all new device types, clusters, and data types introduced in the Matter 1.5.1 specification, enabling the development of Matter-compatible devices, bridges, and controllers.
Beyond this, the main focus of this version was completing and optimizing the Controller features of matter.js. To that end, we re-implemented large parts of the discovery, connection, and reconnection logic for devices, now also taking into account the differences between Ethernet, Wi-Fi, and Thread devices and the specific requirements of each transport. We verified this in the field with Thread networks containing more than 400 devices and confirmed smooth startup and operation.
The newly added TCP support can be enabled optionally and used preferentially for outgoing connections, with an automatic fallback to UDP depending on device support and needs.
Additionally, refactoring of several internal data structures reduces matter.js's RAM usage by 20–50% compared to the previous version. I want to especially thank @lauckhart for the effort he invested in these areas!
Controllers built with matter.js now also verify Device Attestation and Certification, including certificate revocation checks as defined by the Matter specification, and allow you to decide whether to continue commissioning a device based on the results.
For Devices and Bridges, we have added a specification-compliant implementation of the DoorLock cluster (excluding Aliro features), as well as support for client clusters and Bindings, with a convenient development API to implement the relevant logic once Bindings are established.
Furthermore, matter.js 0.17 introduces a new WAL-based storage engine (which will become the default in the future) and also allows you to choose SQLite as the storage engine — both including automatic migration depending on the configured engine.
Beyond these new features, this version includes numerous stability and reliability improvements to the Matter protocol stack and moves the new Controller/Client closer to finalization.
Looking ahead, we'll focus on expanding support for the remaining Matter protocol features and continue finalizing the new Controller API. Stay tuned — there's more to come!
Breaking Changes
This version introduces several breaking changes that might affect your applications:
Matter Specification Changes
Storage Backend
Additional Changes
Please refer to the full Changelog below for complete details.
Get Involved
Update to matter.js 0.17 on npm and share your feedback, experiences, and questions with us on GitHub or Discord — we're here to support you!
Changelog
Breaking: Matter 1.5/1.5.1 specification introduces some changes, as always with new Matter specification versions. You might need to adjust your code.
@matter/*
@matter/general
DnsCodec.decodeTxtRecord/encodeTxtRecordand theTxtRecordfactory now operate onBytes[]per RFC 6763 §6 so binary TXT values (e.g. Thread MeshCoPxa,xp,at,pt,sb,dd) survive encode/decode losslessly;encodeTxtRecordandTxtRecordaccept(Bytes | string)[]so ASCII-only senders are unchangedwal-based storage engine (not yet the default) to optimize persistenceDnssdName.parametersandIpService.parametersnow return aDnssdParametersinstance — aReadonlyMap<string, string>plus a.raw(key): Bytesaccessor for binary TXT consumers (e.g. Thread Border Router enrichment)dir-based BlobStorage implementationLogFormat.formatrenders any Diagnostic-loggable value to a string in the specified format (defaults to plain text)@matter/main
versionstring export that exposes the published matter.js version@matter/model
Matter.clusters.at(4)instead ofMatter.clusters[4]@attribute(...)) now default to read-only (R V); apply thewritabledecorator to attributes that must accept writes@matter/node
DclBehaviorfor centralized DCL configuration via environment variables (MATTER_DCL_*), config files, or programmatic setupCommissioningClient.BaseCommissioningOptionsnow acceptswifiNetwork,threadNetwork,regulatoryLocation, andregulatoryCountryCodefor passing network credentials and regulatory configuration during commissioningonAttestationFailurecommissioning option for controlling attestation validation policy (true/false/callback with typed findings)tcp(boolean) to enable TCP support for the server nodetransportPreference("udp"/"tcp") to define the preferred connection type when peers support both. "udp" is the default and fallbackEndpoint.get()andEndpoint.getStateOf()— async read API with optionalfabricFiltercontrol; on a client endpoint issues a single batched Matter Read; on a server endpoint returns a snapshot of local stateEndpoint.featuresOf()/maybeFeaturesOf()— typed access to a cluster behavior's active feature flagsEndpoint.globalsOf()/maybeGlobalsOf()— exposes the global cluster attribute stateOnOffLightDevice.with(OccupancySensingClient). Mandatory clients are auto-registeredBindingServereventsestablished/removedare emitted for defined bindings with Node references preinstalled on the materialized endpoint. See the new OccupancyBindingDevice example. To receive attribute changes from a bound peer setresolution.node.set({ network: { defaultSubscription: Read(Read.Attribute({ ... })), autoSubscribe: true } })BehavioreventsinteractionEndandinteractionBeginnow also fire for localact()writes, to be in sync with wire-driven interactionscommandsOf(),eventsOf(),stateOf()/maybeStateOf()setStateOfacceptsFabricIndex.OMIT_FABRICfor fabric-scoped struct entries (Matter §7.13.6) and substitutes the peer's assigned fabric index so the local cache mirrors what the peer stores@matter/nodejs-ble
@matter/nodejs-shell
cert check-revokedcommand for checking certificate revocation data@matter/protocol
DclConfigis now an interface with namespace defaults instead of a singleton;DclClientacceptsDclConfigfor configurable endpointsDclCertificateServiceandDclOtaUpdateServiceaccept custom DCL endpoint configuration via optionsDclCertificateService— fetches from production DCL on demand, validates the signer chain against trusted PAAs, verifies CRL signature and integrityCertificationDeclaration.parse()for CMS/PKCS#7 signed CD extraction and signature verificationDclCertificateService; DCL-dependent checks (PAA trust, chain, revocation) require itDeviceCertificationvalidates DAC/PAI VendorID and ProductID against product description at startupAbortSignalcan now be passed to cancel an in-progress commissioning attempt; the PASE layer sendsInvalidParameterto avoid a 60-second device lockout@matter/react-native
@matter/tools
@matter/types
TlvHardwareAddressNodeId.fromGroupIdnow produces a full 16-hex Group Node ID per Matter specTlvTaggedListnow ensures schema/tag ordering when encoding (Matter Core §10.6.1). AddedTlvTaggedListPreservingOrderfor cases where ordering needs to be data driven (e.g. signed certificate sub-lists).@project-chip/matter.js
tcp(boolean) to enable TCP support for the controllertransportPreference("udp"/"tcp") to define the preferred connection type when devices support both. "udp" is the default and fallbackonAttestationFailurecallback that gets called with attestation validation options and allows decisions to continue or block the commissioning. Default accepts but logs all failures.CommissioningController.commissionNode()now uses the parallel PASE commissioning path for pre-discovered devices; WiFi/Thread/regulatory credentials and abort signal are fully propagatedEndpointandPairedNodewrappers exposefeaturesOf()/maybeFeaturesOf()andglobalsOf()/maybeGlobalsOf()matching the modern client endpointEndpointandPairedNodewrappers now also exposeget(),getStateOf(),eventsOf(),maybeStateOf()and string-id overloads on existing accessors for parity with the modern client endpointAbout matter.js
matter.js is an open-source JavaScript SDK that implements the Matter IoT standard, developed by the Connectivity Standards Alliance and its members. It simplifies the process of building Matter-compatible devices, bridges, and controllers.
Built on a Node.js-based architecture, matter.js runs on any operating system that supports Node.js and works with other compatible JavaScript runtimes such as Bun, Electron, and React Native. The included shell application allows developers to easily explore and interact with Matter devices during development and testing.
While still evolving toward full specification coverage, matter.js already supports key functionality. Some devices built with it have been officially Matter-certified, with more certifications underway.
Tens of thousands of users are already running matter.js in open-source (though uncertified) smart home projects, demonstrating interoperability with major ecosystems such as Amazon, Apple, Aqara, Google, SmartThings, and Home Assistant.
matter.js is an open-source project maintained by the Open Home Foundation and serves as the basis for the new Open Home Foundation Matter Server, currently in beta testing.
Beta Was this translation helpful? Give feedback.
All reactions