Skip to content

Build environments

Every PlatformIO environment defined in platformio.ini. The default is esp32s3.

Generic boards

Environment Chip Flash Notes
esp32s3 ESP32-S3 16 MB Default. External I2S DAC such as a PCM5102A
esp32s3-jtag ESP32-S3 16 MB Extends esp32s3, uploads over built-in USB JTAG
waveshare-esp32s3 ESP32-S3 16 MB Waveshare ESP32-S3 pin arrangement
esp32c5-xiao ESP32-C5 8 MB Seeed XIAO, needs the community pioarduino platform
esp32wrover-dev ESP32 4 MB Freenove WROVER, includes Bluetooth

Amplifier boards

Environment Chip DAC Flash Bluetooth
squeezeamp ESP32 TAS5756 8 MB
squeezeamp-bt ESP32 TAS5756 8 MB yes
squeezeamp-4m ESP32 TAS5756 4 MB
esparagus-audio-brick ESP32 TAS58xx 8 MB
esparagus-audio-brick-bt ESP32 TAS58xx 8 MB yes
esparagus-audio-brick-s3 ESP32-S3 TAS58xx 8 MB
esparagus-audio-brick-dual-dac ESP32-S3 2× TAS58xx 8 MB
esparagus-audio-brick-dual-uac ESP32-S3 2× TAS58xx 8 MB
esparagus-louder ESP32 TAS58xx 8 MB
esparagus-louder-bt ESP32 TAS58xx 8 MB yes
esparagus-louder-s3 ESP32-S3 TAS58xx 8 MB
smartamp ESP32 4 MB yes

Every Esparagus board is fitted with a TAS58xx amplifier, either a TAS5825M or a TAS5805M. The driver reads the die ID at startup and configures whichever it finds, so the environment does not have to know which part is on the board.

The dual-DAC environments drive an Audio Brick Dual with two amplifiers: stereo at I2C address 0x4C and a second at 0x4D, wired either as a bridged (PBTL) mono output or as a second stereo pair. -dual-uac adds USB audio to the same board.

Sonocotta audio dock boards

The HiFi, Loud, Amped and Louder families all come in an -esp32 form with an Ethernet jack and an OLED header, and an -esparagus form without either. Bluetooth Classic exists only on the original ESP32, so no S3 environment has a -bt variant.

Environment Chip DAC / amp Flash Bluetooth
hifi-esp32 ESP32 PCM5100 8 MB
hifi-esp32-bt ESP32 PCM5100 8 MB yes
hifi-esparagus ESP32 PCM5100 8 MB
hifi-esparagus-bt ESP32 PCM5100 8 MB yes
hifi-esp32-s3 ESP32-S3 PCM5100 8 MB
hifi-esparagus-s3 ESP32-S3 PCM5100 8 MB
loud-esp32 ESP32 MAX98357A 8 MB
loud-esp32-bt ESP32 MAX98357A 8 MB yes
loud-esparagus ESP32 2× MAX98357A 8 MB
loud-esparagus-bt ESP32 2× MAX98357A 8 MB yes
loud-esp32-s3 ESP32-S3 2× MAX98357A 8 MB
esparagus-echo ESP32-S3 2× MAX98357A 8 MB
amped-esp32 ESP32 PCM5100 + TPA31xx 8 MB
amped-esp32-bt ESP32 PCM5100 + TPA31xx 8 MB yes
amped-esparagus ESP32 PCM5100 + TPA31xx 8 MB
amped-esparagus-bt ESP32 PCM5100 + TPA31xx 8 MB yes
amped-esp32-s3 ESP32-S3 PCM5100 + TPA31xx 8 MB
louder-esp32 ESP32 TAS5805M 8 MB
louder-esp32-bt ESP32 TAS5805M 8 MB yes
louder-esp32-plus ESP32 TAS5825M 8 MB
louder-esp32-plus-bt ESP32 TAS5825M 8 MB yes
louder-esp32-s3 ESP32-S3 TAS5805M 8 MB
louder-esp32-s3-plus ESP32-S3 TAS5825M 8 MB

Targets without a PlatformIO environment

These have sdkconfig defaults and are built through ESP-IDF directly.

Target Sdkconfig Status
ESP32-S2 config/sdkconfig.defaults.esp32s2 Built in CI, prebuilt binary published
ESP32-P4 config/sdkconfig.defaults.esp32p4 Experimental
idf.py set-target esp32s2
idf.py -DSDKCONFIG_DEFAULTS="config/sdkconfig.defaults;config/sdkconfig.defaults.esp32s2" build

Which builds get a prebuilt binary

CI builds a subset of environments and attaches them to each release. These are the ones available in the browser installer:

esp32s3, waveshare-esp32s3, esp32s2, squeezeamp-bt, squeezeamp-4m, smartamp, esparagus-audio-brick-bt, esparagus-audio-brick-s3, esparagus-audio-brick-dual-dac, esparagus-audio-brick-dual-uac, esparagus-louder-bt, esparagus-louder-s3, esparagus-echo, hifi-esp32-bt, hifi-esparagus-bt, hifi-esp32-s3, hifi-esparagus-s3, loud-esp32-bt, loud-esparagus-bt, loud-esp32-s3, amped-esp32-bt, amped-esparagus-bt, amped-esp32-s3, louder-esp32-bt, louder-esp32-plus-bt, louder-esp32-s3, louder-esp32-s3-plus.

The list lives in .github/workflows/targets.json, and each entry needs a matching docs/firmware/<name>.json manifest for the installer to offer it.

Everything else you build yourself. On an ESP32 board that can do Bluetooth the published binary always includes it, so there is no prebuilt squeezeamp, esparagus-audio-brick, esparagus-louder, hifi-esp32, loud-esp32, amped-esp32 or louder-esp32 — build one of those yourself if you want the RAM and flash back.

The same list runs on every push to staging and publishes a rolling beta pre-release, so each of these boards has an untested build of the current development tip available too. A pull request builds only the entries flagged "core": true, which cover every chip and every board support directory without a job per variant, and the matrix does not fail fast, so one board failing to compile no longer stops the others being published.

How sdkconfig layering works

All board configuration lives in config/. The generated sdkconfig stays at the project root — that one is a build artifact and is gitignored.

Environments compose their configuration by chaining sdkconfig files left to right, with later files overriding earlier ones:

board_build.cmake_extra_args =
    "-DSDKCONFIG_DEFAULTS=config/sdkconfig.defaults;config/sdkconfig.defaults.squeezeamp;config/sdkconfig.defaults.bt"

Here the common defaults come first, then the SqueezeAMP board configuration, then the Bluetooth overlay. Adding config/sdkconfig.defaults.bt to the end of any ESP32 board's chain is how Bluetooth gets enabled.

Delete the cached sdkconfig after changing defaults

A generated sdkconfig.<env> file is cached in the project root. If you change any defaults, delete it before rebuilding or the old values are silently reused.

Common commands

pio run -e <env> -t build      # Build
pio run -e <env> -t upload     # Build and flash over USB
pio run -e <env> -t uploadfs   # Flash the SPIFFS image from data/
pio run -e <env> -t monitor    # Serial monitor at 115200 baud
pio run -e <env> -t menuconfig # Kconfig configuration

To define your own environment without touching platformio.ini, see custom board configuration.