# Chips and boards

The chips espx supports with their Rust targets, and the dev boards it knows with their pins.

## Chips

espx supports exactly the chips esp-generate can scaffold. `espx chips` prints this table, and `--json` prints it as data.

| Id         | Name      | Architecture | Rust target                    | Status  |
| ---------- | --------- | ------------ | ------------------------------ | ------- |
| `esp32`    | ESP32     | Xtensa       | `xtensa-esp32-none-elf`        | stable  |
| `esp32c2`  | ESP32-C2  | RISC-V       | `riscv32imc-unknown-none-elf`  | stable  |
| `esp32c3`  | ESP32-C3  | RISC-V       | `riscv32imc-unknown-none-elf`  | stable  |
| `esp32c5`  | ESP32-C5  | RISC-V       | `riscv32imac-unknown-none-elf` | preview |
| `esp32c6`  | ESP32-C6  | RISC-V       | `riscv32imac-unknown-none-elf` | stable  |
| `esp32c61` | ESP32-C61 | RISC-V       | `riscv32imac-unknown-none-elf` | preview |
| `esp32h2`  | ESP32-H2  | RISC-V       | `riscv32imac-unknown-none-elf` | stable  |
| `esp32s2`  | ESP32-S2  | Xtensa       | `xtensa-esp32s2-none-elf`      | stable  |
| `esp32s3`  | ESP32-S3  | Xtensa       | `xtensa-esp32s3-none-elf`      | stable  |

The default chip is `esp32c6`. Preview marks preview silicon; `--json` shows it as `"stable": false`.

The RISC-V chips build with the stable Rust toolchain; `espx setup` adds their two targets through rustup. The Xtensa chips need Espressif's Rust fork, the `esp` toolchain, which `espx setup --chip` installs through espup. See [Xtensa chips](https://www.espx.dev/docs/reference/xtensa).

The ESP32-P4 is not in the table. It joins when esp-generate supports it.

## Boards

espx knows a few dev board models. `espx boards` lists them and `espx board <id>` prints one. Pass an id to `espx new --board` to pick its chip and record its pins in the project's `README.md` and `AGENTS.md`. espx generates no pin code from it; the facts are there to read.

| Id                        | Board                                 | Chip    | User LED                | BOOT button | UART TX / RX    |
| ------------------------- | ------------------------------------- | ------- | ----------------------- | ----------- | --------------- |
| `xiao-esp32c6`            | Seeed Studio XIAO ESP32C6             | esp32c6 | GPIO15, active-low      | GPIO9       | GPIO16 / GPIO17 |
| `esp32-c6-devkitc-1`      | ESP32-C6-DevKitC-1                    | esp32c6 | GPIO8, addressable RGB  | GPIO9       | GPIO16 / GPIO17 |
| `esp32-s3-devkitc-1`      | ESP32-S3-DevKitC-1 (initial revision) | esp32s3 | GPIO48, addressable RGB | GPIO0       | GPIO43 / GPIO44 |
| `esp32-s3-devkitc-1-v1.1` | ESP32-S3-DevKitC-1 v1.1               | esp32s3 | GPIO38, addressable RGB | GPIO0       | GPIO43 / GPIO44 |
| `esp32-c3-devkitm-1`      | ESP32-C3-DevKitM-1                    | esp32c3 | GPIO8, addressable RGB  | GPIO9       | GPIO21 / GPIO20 |
| `esp32-devkitc-v4`        | ESP32-DevKitC V4                      | esp32   | none (power LED only)   | GPIO0       | GPIO1 / GPIO3   |
| `esp32-s2-saola-1`        | ESP32-S2-Saola-1                      | esp32s2 | GPIO18, addressable RGB | GPIO0       | GPIO43 / GPIO44 |

The BOOT button is active-low on every board. The two ESP32-S3-DevKitC-1 revisions differ in the LED pin, so check the revision printed on yours.

### USB ids and documentation

| Id                        | USB (vendor:product)     | Documentation                                                                                                            |
| ------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| `xiao-esp32c6`            | `303A:1001`              | [Seeed Studio wiki](https://wiki.seeedstudio.com/xiao_esp32c6_getting_started/)                                          |
| `esp32-c6-devkitc-1`      | `303A:1001`, `10C4:EA60` | [User guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/user_guide.html)      |
| `esp32-s3-devkitc-1`      | `303A:1001`, `10C4:EA60` | [User guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/user_guide.html)      |
| `esp32-s3-devkitc-1-v1.1` | `303A:1001`, `10C4:EA60` | [User guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/user_guide_v1.1.html) |
| `esp32-c3-devkitm-1`      | `10C4:EA60`              | [User guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitm-1/user_guide.html)      |
| `esp32-devkitc-v4`        | `10C4:EA60`              | [User guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32/esp32-devkitc/user_guide.html)             |
| `esp32-s2-saola-1`        | `10C4:EA60`              | [User guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-saola-1/index.html)             |

`303A:1001` is the chip's native USB serial/JTAG port and `10C4:EA60` a CP210x bridge. Every ESP32 with native USB reports the same pair, and so does every board with that bridge, so these ids identify the interface, not the board. `espx devices` therefore names a board model only when a board's USB ids match exactly one model, which none of these do today.

## Related

- [Projects](https://www.espx.dev/docs/cli/projects#pick-a-dev-board)
- [Agent context](https://www.espx.dev/docs/agents/context)
- [Boards and ports](https://www.espx.dev/docs/cli/boards)
