Google's Home Developer program allows device manufacturers to connect
their smart home devices with the Google Home ecosystem. We are expanding the
Smart Home Actions local fulfillment path with the ability to add
Matter-enabled devices for setup using the
[Google Home app (GHA)](https://play.google.com/store/apps/details?id=com.google.android.apps.chromecast.app) and control them using
[Google Assistant](https://assistant.google.com/),
GHA, or smart displays like the
Google Nest Hub (2nd gen).

This documentation describes how to get started with building and integrating a
Matter-supported platform in the Google Home ecosystem.

## Disclaimers

Regarding the procedures described in the Matter
documentation, be aware of the following:

- We recommend that the account used for development only have a single Matter-enabled hub connected for testing. Multiple Matter-enabled hubs connected at the same time or connected to the same structure during testing could result in unpredictable behavior.
- All procedures assume the use of a Linux machine running Ubuntu 20.04 for building and flashing Matter samples, which have been tested by Google. While macOS machines are supported, Linux is recommended. Mac-specific instructions are called out in the procedures as needed.

## How to build

To build a Matter-enabled device that integrates with the
Google Home ecosystem, you'll work with a Matter-compatible development board and the [Matter
SDK](https://github.com/project-chip/connectedhomeip/).

**The easiest way to get started is by going through our codelabs.** We
recommend doing at least one of the following codelabs:

After that, check our list of **supported devices** to ensure that what you
plan to integrate is supported in the Google Home ecosystem.
Then read through the **Developer Checklist** to understand the entire
development flow from project creation to launch.

[Supported Devices](https://developers.home.google.com/matter/supported-devices.md.txt)
[Developer Checklist](https://developers.home.google.com/matter/checklist.md.txt)

## Definitions

The following terms are used throughout this documentation:

Border router
:   A hub that implements a general-purpose Thread Border
    Router for Thread-enabled devices.

Hub
:   A supported Google Nest device, such as the
    Google Nest Hub (2nd gen).
    A hub is required to control Matter-enabled devices through
    other surfaces such as Assistant, the
    GHA, and smart displays.

Matter-enabled device
:   A device or development board that has been flashed with a
    Matter-enabled build or sample app.

Mobile device
:   The test phone used to assist with pairing. Currently this is an
    Android phone.

## Prerequisites

<br />

Recommended IDE extensions for Matter development

<br />

In order to fully integrate a Matter-enabled device with
the Google Home ecosystem, a developer must have:

1. A [Google hub with Thread support](https://developers.home.google.com/matter/supported-devices.md.txt#hubs) to serve as both a border router for Thread-enabled devices and as a local fulfillment path for routing Smart Home intents.
2. A mobile device (test phone) that meets the minimum requirements:
   - Android O (8.1, API level 27 or newer)
   - iOS (v16.5 or newer)
   - BLE capability
3. A [Vendor ID (VID)](https://developers.home.google.com/matter/get-started.md.txt#vendor_id) and [Product ID (PID)](https://developers.home.google.com/matter/get-started.md.txt#product_id) for the Matter-enabled device.
4. A Matter-enabled device. This device should be one of the [Matter device types supported in the
   Google Home ecosystem](https://developers.home.google.com/matter/supported-devices), and could be:
   - Your own product with Matter-enabled firmware.
   - One of the following Matter devices to use for end-to-end verification:

| Vendor | Platform | Thread Support | Guide |
|---|---|:---:|---|
| Bouffalo Lab | [BL602](https://en.bouffalolab.com/product/?type=detail&id=18) |   |   |
| Bouffalo Lab | [BL702](https://en.bouffalolab.com/product/?type=detail&id=4) | Yes |   |
| Espressif | [ESP32](https://www.espressif.com/en/products/devkits) |   | [OTA Testing](https://developers.home.google.com/matter/ota/test/vendors/espressif.md.txt) |
| Nordic Semiconductor | [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | Yes | [OTA Testing](https://developers.home.google.com/matter/ota/test/vendors/nordic-semiconductor.md.txt) |
| NXP | [IOTZTB-DK006 development kit](https://www.nxp.com/products/wireless/bluetooth-low-energy/iotztb-dk006-advanced-development-kit-for-k32w061-and-jn5189-88:IOTZTB-DK006) | Yes |   |
| Realtek | [Ameba D Series](https://www.amebaiot.com/en/amebad/) |   |   |
| Silicon Labs | [EFR32MG24 Dev Kit](https://www.silabs.com/wireless/zigbee/efr32mg24-series-2-socs) | Yes |   |
| Silicon Labs | [EFR32MG Zigbee and Thread Starter Kit](https://www.silabs.com/development-tools/wireless/zigbee/efr32mg-zigbee-thread-starter-kit) | Yes |   |
| Telink | [TLSR9528](https://doc.telink-semi.cn/doc/en/hardware/res/devboard/tlsr9528a/) | Yes | [Telink Matter Developer Guide](https://doc.telink-semi.cn/doc/en/software/res/sdk/matter/telink_matter_developer_guide_en/) |
| Texas Instruments | [CC2652R7 LaunchPad development kit](https://www.ti.com/tool/LP-CC2652R7) | Yes |   |
[*Table: Matter
examples from silicon vendors*]

### Vendor ID

<br />

By default, you can use one of the VIDs allocated by the Alliance for
testing purposes. Select one of the following:
`0xFFF1`, `0xFFF2`, `0xFFF3`, `0xFFF4`.

To use a Production VID so that your integration can be certified and launched, you must first
have it verified by Google to ensure that it has been issued to you by the Alliance.

This VID should be implemented in your device's firmware.

<br />

A Matter device can only be paired in the Google Home
ecosystem in certain Vendor ID and device type scenarios.

- A test VID cannot be used in a consumer device.
- Your production VID must issued by the Connectivity Standards Alliance (Alliance). Google will validate you're the owner of that VID before you can use it in the Google Home Developer Console. Once that happens you'll be able to create integrations for that VID.
- For development and Field Trial purposes, a project and integration with the corresponding VID and PID combination must be [created in the Developer Console](https://developers.home.google.com/matter/integration/create.md.txt). The user commissioning the device must either be a member of the project or be included in the list of Field Trial users.
- Consumer users can only use your product once it has been certified by the Alliance.

VID and PID can only be used once for one integration. If you want to use the
same VID or PID in your integration, you need to either:

- Edit the integration using the VID or PID to a different VID or PID.
- Delete the integration using the VID or PID.

|   |   | Which types of users can commission the device into the Google Home ecosystem? ||
|---|---|:---:|---|
| **VID type** | **VID certification and console integration status** | ***Production*** (Consumer users) | ***Development*** (Developers, Field Trial users) |
| Test | No integration in the Developer Console (cannot be certified) | No | No |
| Test | Integration exists in the Developer Console (cannot be certified) | No | Yes |
| Production | Not certified, integration does not exist in the Developer Console | No | No |
| Production | Not certified, integration exists in the Developer Console | No | Yes |
| Production | Certified in the Alliance DCL, integration does not exist in the Developer Console | Yes | Yes |
| Production | Certified in the Alliance DCL and integration exists in the Developer Console | Yes | Yes |
[*Table: Vendor ID (VID) and device type
pairing scenarios*]

### Product ID

<br />

Information about the device is read from the
Matter Basic Information Cluster. The Product ID encoded in your
device's firmware must match the Product ID of the Matter integration
in the Developer Console.

<br />

## Unsupported features

Some Matter clusters are not yet exposed to users, though
they may be used by the system. In most cases, this means that attributes
exposed through these clusters aren't visible to end users:

| Cluster Type | Clusters |
|---|---|
| Core | - Binding ¹ - Label - Fixed Label - User Label - Actions - Group Key - Localization Configuration - Time Format Localization - Unit Localization - Power Source Configuration - Power Source - Diagnostics clusters (Diagnostic Logs, General Diagnostics, Software Diagnostics, Thread Network Diagnostics, Wi-Fi Network Diagnostics, Ethernet Network Diagnostics) - Time Synchronization - Mode Select |
| Application | - Groups and Scenes are not directly supported. Equivalent functionality is available via [Routines](https://support.google.com/googlenest/answer/7029585). - All Media clusters. Equivalent functionality is available via [Google Cast](https://developers.google.com/cast). |
[*Table: Matter
clusters not exposed to users in the Google Home ecosystem*]

¹ See [On/Off Light Switches](https://developers.home.google.com/matter/supported-devices.md.txt#onoff_light_switches)
for how this impacts On/Off Light Switches.