blob: d29677012888754d80404e43e2470b6ea850bc8b [file] [log] [blame] [view]
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +02001# Matter
Justin Woodc9bbb252020-03-03 10:03:58 -08002
Arkadiusz Bokowyc21bebd2022-02-11 03:37:16 +01003[![Builds](https://github.com/project-chip/connectedhomeip/workflows/Builds/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/build.yaml)
Justin Wood5a8a6182021-02-03 12:55:57 -08004
Justin Woodc1581aa2023-06-20 15:16:53 -04005**Builds**
6
7[![Android](https://github.com/project-chip/connectedhomeip/workflows/Android/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/android.yaml)
Justin Wood662d0bd2023-06-20 12:15:53 -04008[![Ameba](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Ameba/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-ameba.yaml)
9[![ASR](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20ASR/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-asr.yaml)
10[![BouffaloLab](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20BouffaloLab/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-bouffalolab.yaml)
Justin Woodc1581aa2023-06-20 15:16:53 -040011[![Darwin](https://github.com/project-chip/connectedhomeip/workflows/Darwin/badge.svg)](https://github.com/project-chip/connectedhomeip/blob/master/.github/workflows/darwin.yaml)
Anu Biradarc9dac812024-04-08 08:35:23 -050012[![TI CC26X2X7](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20TI%20CC13XX_26XX/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-cc13xx_26xx.yaml)
Justin Wood662d0bd2023-06-20 12:15:53 -040013[![TI CC32XX](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20TI%20CC32XX/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-cc32xx.yaml)
14[![EFR32](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20EFR32/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-efr32.yaml)
15[![ESP32](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20ESP32/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-esp32.yaml)
16[![Infineon](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-infineon.yaml/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-infineon.yaml)
17[![i.MX Linux](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20i.MX%20Linux/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-linux-imx.yaml)
18[![K32W with SE051](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20K32W%20with%20SE051/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-k32w.yaml)
19[![Linux ARM](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Linux%20ARM/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-linux-arm.yaml)
20[![Linux Standalone](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Linux%20Standalone/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-linux-standalone.yaml)
21[![Linux Standalone](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Linux%20Standalone/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-linux-standalone.yaml)
22[![Mbed OS](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Mbed%20OS/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-mbed.yaml)
23[![MW320](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20MW320/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-mw320.yaml)
24[![nRF Connect SDK](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20nRF%20Connect%20SDK/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-nrfconnect.yaml)
25[![Open IoT SDK](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Open%20IoT%20SDK/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-openiotsdk.yaml)
26[![QPG](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20QPG/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-qpg.yaml)
yzamstm1f9907d2023-09-22 15:25:25 +020027[![STM32](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20stm32/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-stm32.yaml)
Justin Wood662d0bd2023-06-20 12:15:53 -040028[![Telink](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Telink/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-telink.yaml)
29[![Tizen](https://github.com/project-chip/connectedhomeip/workflows/Build%20example%20-%20Tizen/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/examples-tizen.yaml)
Justin Wood5a8a6182021-02-03 12:55:57 -080030
Justin Woodc1581aa2023-06-20 15:16:53 -040031**Tests**
Justin Wood5a8a6182021-02-03 12:55:57 -080032
Boris Zbarskyc988a2c2022-12-05 10:59:45 -050033[![Unit / Integration Tests](https://github.com/project-chip/connectedhomeip/workflows/Unit%20/%20Integration%20Tests/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/unit_integration_test.yaml)
Arkadiusz Bokowyc21bebd2022-02-11 03:37:16 +010034[![Cirque](https://github.com/project-chip/connectedhomeip/workflows/Cirque/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/cirque.yaml)
35[![QEMU](https://github.com/project-chip/connectedhomeip/workflows/QEMU/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/qemu.yaml)
Justin Woodc9bbb252020-03-03 10:03:58 -080036
Justin Woodc1581aa2023-06-20 15:16:53 -040037**Tools**
38
Arkadiusz Bokowyc21bebd2022-02-11 03:37:16 +010039[![ZAP Templates](https://github.com/project-chip/connectedhomeip/workflows/ZAP/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/zap_templates.yaml)
Justin Wood5a8a6182021-02-03 12:55:57 -080040
Justin Woodc1581aa2023-06-20 15:16:53 -040041**Documentation**
42
Grzegorz Ferenc2d4895e2023-03-29 15:30:20 +020043[![Documentation Build](https://github.com/project-chip/connectedhomeip/actions/workflows/docbuild.yaml/badge.svg)](https://github.com/project-chip/connectedhomeip/actions/workflows/docbuild.yaml)
44
45- [Matter SDK documentation page](https://project-chip.github.io/connectedhomeip-doc/index.html)
46
Nikki Ahmadi64fe6562022-11-03 14:52:48 +010047# About
Andrei Litvina1774692022-11-03 13:40:10 -040048
49Matter (formerly Project CHIP) creates more connections between more objects,
50simplifying development for manufacturers and increasing compatibility for
51consumers, guided by the Connectivity Standards Alliance.
Nikki Ahmadi64fe6562022-11-03 14:52:48 +010052
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020053# What is Matter?
Justin Woodc9bbb252020-03-03 10:03:58 -080054
Andrei Litvina1774692022-11-03 13:40:10 -040055Matter is a unified, open-source application-layer connectivity standard built
56to enable developers and device manufacturers to connect and build reliable, and
57secure ecosystems and increase compatibility among connected home devices. It is
58built with market-proven technologies using Internet Protocol (IP) and is
59compatible with Thread and Wi-Fi network transports. Matter was developed by a
60Working Group within the Connectivity Standards Alliance (Alliance). This
61Working Group develops and promotes the adoption of the Matter standard, a
62royalty-free connectivity standard to increase compatibility among smart home
63products, with security as a fundamental design tenet. The vision that led major
64industry players to come together to build Matter is that smart connectivity
65should be simple, reliable, and interoperable.
Justin Woodc9bbb252020-03-03 10:03:58 -080066
Andrei Litvina1774692022-11-03 13:40:10 -040067Matter simplifies development for manufacturers and increases compatibility for
68consumers.
Justin Woodd4a06152020-07-01 08:58:02 -070069
Andrei Litvina1774692022-11-03 13:40:10 -040070The standard was built around a shared belief that smart home devices should be
71secure, reliable, and seamless to use. By building upon Internet Protocol (IP),
72Matter enables communication across smart home devices, mobile apps, and cloud
73services and defines a specific set of IP-based networking technologies for
74device certification.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -070075
Andrei Litvina1774692022-11-03 13:40:10 -040076The Matter specification details everything necessary to implement a Matter
77application and transport layer stack. It is intended to be used by implementers
78as a complete specification.
Nikki Ahmadi64fe6562022-11-03 14:52:48 +010079
Andrei Litvina1774692022-11-03 13:40:10 -040080The Alliance officially opened the Matter Working Group on January 17, 2020, and
81the specification is
82[available](https://csa-iot.org/developer-resource/specifications-download-request/)
83for adoption now.
Nikki Ahmadi64fe6562022-11-03 14:52:48 +010084
Andrei Litvina1774692022-11-03 13:40:10 -040085Visit [buildwithmatter.com](https://buildwithmatter.com) to learn more and read
86the latest news and updates about the project.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -070087
88# Project Overview
89
90## Development Goals
91
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +020092Matter is developed with the following goals and principles in mind:
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -070093
Andrei Litvina1774692022-11-03 13:40:10 -040094**Unifying:** Matter is built with and on top of market-tested, existing
95technologies.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -070096
Andrei Litvina1774692022-11-03 13:40:10 -040097**Interoperable:** The specification permits communication between any
98Matter-certified device, subject to users’ permission.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -070099
100**Secure:** The specification leverages modern security practices and protocols.
101
Andrei Litvina1774692022-11-03 13:40:10 -0400102**User Control:** The end user controls authorization for interaction with
103devices.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700104
Andrei Litvina1774692022-11-03 13:40:10 -0400105**Federated:** No single entity serves as a throttle or a single point of
106failure for root of trust.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700107
Andrei Litvina1774692022-11-03 13:40:10 -0400108**Robust:** The set of protocols specifies a complete lifecycle of a device —
109starting with the seamless out-of-box experience, through operational protocols,
110to device and system management specifications required for proper function in
111the presence of change.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700112
Andrei Litvina1774692022-11-03 13:40:10 -0400113**Low Overhead:** The protocols are practically implementable on low
114compute-resource devices, such as MCUs.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700115
Andrei Litvina1774692022-11-03 13:40:10 -0400116**Pervasive:** The protocols are broadly deployable and accessible, by
117leveraging IP and being implementable on low-capability devices.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700118
Andrei Litvina1774692022-11-03 13:40:10 -0400119**Ecosystem-Flexible:** The protocol is flexible enough to accommodate
120deployment in ecosystems with differing policies.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700121
Andrei Litvina1774692022-11-03 13:40:10 -0400122**Easy to Use:** The protocol provides smooth, cohesive, integrated provisioning
123and out-of-box experience.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700124
Andrei Litvina1774692022-11-03 13:40:10 -0400125**Open:** The Project’s design and technical processes are open and transparent
126to the general public, including non-members wherever possible.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700127
128## Architecture Overview
Andrei Litvina1774692022-11-03 13:40:10 -0400129
130Matter aims to build a universal IPv6-based communication protocol for smart
131home devices. The protocol defines the application layer that will be deployed
132on devices and the different link layers to help maintain interoperability. The
133following diagram illustrates the normal operational mode of the stack:
Nikki Ahmadi64fe6562022-11-03 14:52:48 +0100134![Matter Architecture Overview](docs/images/Matter_Arch_Overview.png)
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700135
Andrei Litvina1774692022-11-03 13:40:10 -0400136The architecture is divided into layers to help separate the different
137responsibilities and introduce a good level of encapsulation among the various
138pieces of the protocol stack. The vast majority of interactions flow through the
139stack captured in the following Figure:
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700140
Nikki Ahmadi64fe6562022-11-03 14:52:48 +0100141![Matter Stack Architecture](docs/images/Matter_Layered_Arch.png)
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700142
Andrei Litvina1774692022-11-03 13:40:10 -04001431. **Application:** High-order business logic of a device. For example, an
144 application that is focused on lighting might contain logic to handle turning
145 on/off the bulb as well as its color characteristics.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700146
Andrei Litvina1774692022-11-03 13:40:10 -04001472) **Data Model:** The data layer corresponds to the data and verb elements that
148 help support the functionality of the application. The Application operates
149 on these data structures when there is an intent to interact with the device.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700150
Andrei Litvina1774692022-11-03 13:40:10 -04001513. **Interaction Model:** The Interaction Model layer defines a set of
152 interactions that can be performed between a client and server device. For
153 example, reading or writing attributes on a server device would correspond to
154 application behavior on the device. These interactions operate on the
155 elements defined at the data model layer.
Nikki Ahmadi64fe6562022-11-03 14:52:48 +0100156
Andrei Litvina1774692022-11-03 13:40:10 -04001574) **Action Framing:** Once an action is constructed using the Interaction
158 Model, it is serialized into a prescribed packed binary format to encode for
Frederico Hakamine1edcf882023-01-18 06:08:45 -0600159 network transmission.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700160
1615. **Security:** An encoded action frame is then sent down to the Security Layer
162 to encrypt and sign the payload to ensure that data is secured and
163 authenticated by both sender and receiver of a packet.
164
Andrei Litvina1774692022-11-03 13:40:10 -04001656. **Message Framing & Routing:** With an interaction encrypted and signed, the
166 Message Layer constructs the payload format with required and optional header
167 fields; which specify the message's properties and some routing information.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700168
Andrei Litvina1774692022-11-03 13:40:10 -04001697) **IP Framing & Transport Management:** After the final payload has been
170 constructed, it is sent to the underlying transport protocol for IP
171 management of the data.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700172
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +0200173# Current Status of Matter
Justin Woodd4a06152020-07-01 08:58:02 -0700174
Andrei Litvina1774692022-11-03 13:40:10 -0400175Matter’s design and technical processes are intended to be open and transparent
176to the general public, including to Working Group non-members wherever possible.
177The availability of this GitHub repository and its source code under an Apache
178v2 license is an important and demonstrable step to achieving this commitment.
179Matter endeavors to bring together the best aspects of market-tested
180technologies and redeploy them as a unified and cohesive whole-system solution.
181The overall goal of this approach is to bring the benefits of Matter to
182consumers and manufacturers as quickly as possible. As a result, what you
183observe in this repository is an implementation-first approach to the technical
184specification, vetting integrations in practice. The Matter repository is
185growing and evolving to implement the overall architecture. The repository
186currently contains the security foundations, message framing and dispatch, and
187an implementation of the interaction model and data model. The code examples
188show simple interactions, and are supported on multiple transports -- Wi-Fi and
189Thread -- starting with resource-constrained (i.e., memory, processing) silicon
190platforms to help ensure Matter’s scalability.
Robert Szewczyk2ab68ff2020-09-07 21:05:42 -0700191
Justin Woodd4a06152020-07-01 08:58:02 -0700192# How to Contribute
193
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +0200194We welcome your contributions to Matter. Read our contribution guidelines
195[here](./CONTRIBUTING.md).
Justin Woodd4a06152020-07-01 08:58:02 -0700196
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +0200197# Building and Developing in Matter
Justin Woodd4a06152020-07-01 08:58:02 -0700198
Andrei Litvin0062c5d2023-03-02 12:20:44 -0500199Instructions about how to build Matter can be found [here](./docs/README.md) .
Justin Woodc9bbb252020-03-03 10:03:58 -0800200
Justin Woodc9bbb252020-03-03 10:03:58 -0800201# Directory Structure
202
Andrei Litvin706e9bb2022-11-03 13:46:06 -0400203The Matter repository is structured as follows:
204
Grzegorz Ferenc2d4895e2023-03-29 15:30:20 +0200205| File/Folder | Content |
206| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
207| build | Build system support content and built output directories |
208| build_overrides | Build system parameter customization for different platforms |
209| config | Project configurations |
210| credentials | Development and test credentials |
211| docs | Documentation, including guides. Visit the [Matter SDK documentation page](https://project-chip.github.io/connectedhomeip-doc/index.html) to read it. |
212| examples | Example firmware applications that demonstrate use of Matter |
Hyukjin Kwon0aa3a0c2023-12-23 03:08:46 +0900213| integrations | 3rd party integrations |
Grzegorz Ferenc2d4895e2023-03-29 15:30:20 +0200214| scripts | Scripts needed to work with the Matter repository |
215| src | Implementation of Matter |
216| third_party | 3rd party code used by Matter |
Hyukjin Kwon0aa3a0c2023-12-23 03:08:46 +0900217| zzz_generated | ZAP generated template code - Revolving around cluster information |
218| BUILD.gn | Build file for the GN build system |
Grzegorz Ferenc2d4895e2023-03-29 15:30:20 +0200219| CODE_OF_CONDUCT.md | Code of conduct for Matter and contribution to it |
220| CONTRIBUTING.md | Guidelines for contributing to Matter |
221| LICENSE | Matter license file |
222| REVIEWERS.md | PR reviewers |
223| gn_build.sh | Build script for specific projects such as Android, EFR32, etc. |
Hyukjin Kwon0aa3a0c2023-12-23 03:08:46 +0900224| README.md | This file |
Justin Woodc9bbb252020-03-03 10:03:58 -0800225
226# License
227
Grzegorz Ferencbae3e7d2021-10-19 15:49:45 +0200228Matter is released under the [Apache 2.0 license](./LICENSE).