Starter Templates
The fastest way to ship your first SCADABLE firmware is to fork a starter template. Each starter has libscadable linked, a minimal .scadable/ folder, and a main.c (or main.cpp) that publishes a heartbeat. Push a tag and you have a release.
Available templates
| Template | Toolchain | Source |
|---|---|---|
esp-idf-starter | ESP-IDF 5.1+ (CMake) | scadable/esp-idf-starter |
arduino-platformio-starter | Arduino-ESP32 via PlatformIO | scadable/arduino-platformio-starter |
Pick whichever matches your existing toolchain. They produce equivalent artifacts — the cloud doesn't care which one built it.
What's in the box
Both templates ship with:
main/main.c(orsrc/main.cppfor PlatformIO) — minimalwifi_up+scadable_init+scadable_connect+ a 30s heartbeat publish..scadable/config.toml—target = "esp32-s3"plus thealways_onconnectivity preset..scadable/digital-twin/heartbeat.toml— one register (uptime_seconds) so the dashboard has something to plot from minute one..github/CODEOWNERSand.gitignore— sensible defaults.README.md— a "what to change first" checklist.
The IDF starter additionally includes main/idf_component.yml with the libscadable dependency pinned. The PlatformIO starter has the equivalent in platformio.ini.
Use it
# Fork via GitHub UI (preserves the template's commit history) OR clone:
git clone https://github.com/scadable/esp-idf-starter my-firmware
cd my-firmware
rm -rf .git && git init && git remote add origin [email protected]:you/my-firmware
git add . && git commit -m "Bootstrap from scadable/esp-idf-starter"
git push -u origin mainThen Connect a Repository — install the SCADABLE GitHub App on you/my-firmware and link it to a namespace.
First release:
git tag v0.1.0
git push --tagsThe dashboard's Releases view shows the build progressing. Two to four minutes later, you have a flashable artifact.
Customizing from the starter
The README in each starter has a checklist of the first three changes you'll likely make. Roughly:
- Change
targetin.scadable/config.tomlto your actual chip (esp32,esp32-s3). - Add your own digital-twin registers in
.scadable/digital-twin/. See the folder spec. - Replace the heartbeat in
main.cwith your real sensor read or actuator drive logic. Thescadable_*API surface (publish, metric set, log) is the same — see the API reference.
When NOT to use a starter
- You already have an ESP-IDF or Arduino project you want to add SCADABLE to. Don't rip it out and start from a starter — drop
libscadableinto your existing repo following Custom firmware. - You're using a non-IDF non-Arduino toolchain (ESP-HAL on Rust, custom build). The starters won't help directly; talk to us about your build setup.
Versioning
Templates are versioned independently from libscadable. The starters track the latest stable libscadable major. We tag the starter repos when we cut new template revisions; existing forks don't auto-update.
If a critical change lands in a starter (security fix in the heartbeat example, build flag fix), we open a GitHub issue on the template that explains the diff so existing forks can cherry-pick.
Updated 4 days ago
