# Instructions to access the open source code used in Google Nest products

[TOC]

Open source code for various Google Nest products released after Oct, 2022 can
be found in below sections. For previous versions please refer to
[this page](https://docs.google.com/document/u/1/d/e/2PACX-1vRzvy_bbLqvFmd0kOIwxjeG2Aa1xHJy7zp2q48BVmc-kvbwj6RtfaOWhUprHADbA5szvJCO_gaE-aKO/pub).

## Nest Wifi products

### Nest Wifi Pro

The open source manifests for Nest Wifi Pro releases can be found under
[nest_wifi_pro](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_wifi_pro)
folder. For example, to download the code specified in `467368.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_wifi_pro/467368.xml
$ repo sync
```

## Google awareness products

### Nest wired indoor

The open source manifests for Nest wired indoor releases can be found under
[nest_wired_indoor](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_wired_indoor)
folder. For example, to download the code specified in `481539.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_wired_indoor/481539.xml
$ repo sync
```

### Nest outdoor

The open source manifests for Nest outdoor releases can be found under
[nest_outdoor](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_outdoor)
folder. For example, to download the code specified in `481539.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_outdoor/481539.xml
$ repo sync
```

### Nest battery doorbell

The open source manifests for Nest battery doorbell releases can be found under
[nest_battery_doorbell](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_battery_doorbell)
folder. For example, to download the code specified in `481539.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_battery_doorbell/481539.xml
$ repo sync
```

### Nest wired doorbell

The open source manifests for Nest wired doorbell releases can be found under
[nest_wired_doorbell](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_wired_doorbell)
folder. For example, to download the code specified in `481539.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_wired_doorbell/481539.xml
$ repo sync
```

### Nest IQ Indoor & IQ Outdoor photon version

The open source manifests for Nest IQ Indoor & IQ Outdoor photon version
releases can be found under
[nest_iq_photon](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_iq_photon)
folder. For example, to download the code specified in `10950013.xml`, please
run the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_iq_photon/10950013.xml
$ repo sync
```

## Google Nest streaming products

### Chromecast with Google TV 4K

The open source manifests for the kernel and bootlooder of Chromecast with
Google TV 4K releases can be found under
[chromecast_with_google_tv_4k](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/chromecast_with_google_tv_4k)
folder. For example, to download the code specified in `462145.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m chromecast_with_google_tv_4k/462145.xml
$ repo sync
```

The remainder of the kernel code for Chromecast with Google TV 4K is available
as the
[GKI kernel source](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android14-5.15/default.xml).
For the device userspace opensource, please download the
[AOSP code](https://source.android.com/docs/setup/download).

### Chromecast with Google TV HD

The open source manifests for the kernel and bootlooder of Chromecast with
Google TV HD releases can be found under
[chromecast_with_google_tv_hd](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/chromecast_with_google_tv_hd)
folder. For example, to download the code specified in `462145.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m chromecast_with_google_tv_hd/462145.xml
$ repo sync
```

The remainder of the kernel code for Chromecast with Google TV HD is available
as the
[GKI kernel source](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android14-5.15/default.xml).
For the device userspace opensource, please download the
[AOSP code](https://source.android.com/docs/setup/download).

### Google TV Streamer

The open source manifests for the device-specific kernel code for Google TV
Streamer can be found under
[google_tv_streamer](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/google_tv_streamer)
folder. For example, to download the code specified in `464899.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m google_tv_streamer/464899.xml
$ repo sync
```

The remainder of the kernel code for Google TV Streamer is available as the
[GKI kernel source](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android14-5.15/default.xml).
For the device userspace opensource, please download the
[AOSP code](https://source.android.com/docs/setup/download/downloading).

## Google Nest speakers and smart displays

### Pixel tablet speaker dock

The open source manifests for Pixel tablet speaker dock releases can be found
under
[pixel_tablet_speaker_dock](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/pixel_tablet_speaker_dock)
folder. For example, to download the code specified in `374000.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m pixel_tablet_speaker_dock/374000.xml
$ repo sync
```

### Google Nest Hub 7", 2nd gen

The open source manifests for Nest Wifi Pro releases can be found under
[google_nest_hub_7_2nd_gen](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/google_nest_hub_7_2nd_gen)
folder. For example, to download the code specified in `324896.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m google_nest_hub_7_2nd_gen/324896.xml
$ repo sync
```

### Nest Audio

The open source manifests for Nest Audio releases can be found under
[nest_audio](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/nest_audio)
folder. For example, to download the code specified in `415414.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m nest_audio/415414.xml
$ repo sync
```

### Google Nest Mini v2

The open source manifests for Google Nest Mini v2 releases can be found under
[google_nest_mini_v2](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/google_nest_mini_v2)
folder. For example, to download the code specified in `415414.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m google_nest_mini_v2/415414.xml
$ repo sync
```

### Google Nest Mini

The open source manifests for Google Nest Mini releases can be found under
[google_nest_mini](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/google_nest_mini)
folder. For example, to download the code specified in `415414.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m google_nest_mini/415414.xml
$ repo sync
```

### Google Home

The open source manifests for Google Home releases can be found under
[google_home](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/google_home)
folder. For example, to download the code specified in `415414.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m google_home/415414.xml
$ repo sync
```

### Google Home Audio

The open source manifests for Google Home Audio releases can be found under
[google_home_audio](https://nest-open-source.googlesource.com/manifests/+/refs/heads/main/google_home_audio)
folder. For example, to download the code specified in `496112.xml`, please run
the following commands.

```shell
$ repo init -u https://nest-open-source.googlesource.com/manifests -b main -m google_home_audio/496112.xml
$ repo sync
```

## Obtain repo

Repo is a tool built on top of Git. Repo helps manage many Git repositories. You
can download and learn more about it at
https://gerrit.googlesource.com/git-repo/+/refs/heads/master/README.md
