The easiest way to deploy and control ESP32 and Pico W devices.
Trellis is a desktop app + microcontroller library that makes your boards feel like real products. Plug in a device, it appears in the app, and you get auto-generated controls — no config files, no cloud, no YAML.
No cloud. No account. No subscription. Your data never leaves your network. No config. Devices describe themselves. Controls render automatically. No complexity. One command to install. 15 lines to integrate.
Read the full story: What is Trellis? | User Guide
- Drop the Trellis library into your Arduino sketch
- Declare what your device can do (switches, sensors, sliders)
- Open the Trellis desktop app — your device appears automatically
- Control it, monitor it, update its firmware — all from one place
#include <Trellis.h>
Trellis trellis("Greenhouse Controller");
void setup() {
trellis.addSwitch("pump", "Water Pump", 13);
trellis.addSensor("temp", "Temperature", "C");
trellis.addSlider("fan", "Fan Speed", 0, 100, 25);
trellis.begin("MyWiFi", "password");
}
void loop() {
trellis.setSensor("temp", readDHT());
trellis.loop();
}The desktop app discovers your device via mDNS, reads its capability declaration, and renders the right controls — toggle for the pump, gauge for temperature, slider for fan speed.
curl -fsSL https://raw.githubusercontent.com/ovexro/trellis/main/install.sh | bashWorks on Ubuntu, Linux Mint, Debian, Fedora, Arch, and derivatives. Installs dependencies, downloads the app, creates a desktop entry, and optionally installs Arduino CLI.
Download from GitHub Releases:
- Ubuntu/Mint/Debian →
.deb - Fedora/RHEL →
.rpm - Any Linux →
.AppImage
- Auto-discovery — continuous mDNS scanning, devices appear automatically
- Live updates — persistent WebSocket connections, real-time sensor data
- Device cards — name, status, RSSI, uptime, firmware version, chip
- Auto-generated controls — switches, sliders, sensors, color pickers, text
- Time-series charts — sensor data over time with SQLite storage
- Serial monitor — full USB serial terminal with live streaming
- OTA updates — native file picker, local HTTP firmware server
- Device persistence — nicknames, tags, known devices survive restarts
- Search & filter — find devices by name, IP, platform, chip
- Device logs — severity-filtered log viewer with live streaming
- Alert rules — configurable thresholds with desktop notifications
- System tray — app runs in background, click to restore
- Dark theme — clean, modern UI with green accent
- ESP32 — all variants (S2, S3, C3, C6)
- Raspberry Pi Pico W / Pico 2 W — full support
- 15 lines to integrate — drop-in library, minimal boilerplate
- Self-description protocol — device declares its own capabilities
- WebSocket — real-time bidirectional communication
- Embedded web dashboard — open
http://<device-ip>/from any phone or laptop browser. Auto-renders all your switches, sliders, sensors, color picker and text fields with live WebSocket updates. No desktop app required, no install. - Live broadcasts — periodic sensor values + system telemetry
- Device logging — logInfo()/logWarn()/logError() sent to desktop app
- OTA ready — firmware updates from the desktop app (ESP32)
- System metrics — RSSI, free heap, uptime reported automatically
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
trellis/
├── app/ # Tauri 2 desktop app (Rust + React)
├── src/ # Arduino library source (ESP32 + Pico W)
├── examples/ # Arduino library examples
└── docs/ # Protocol spec + guides
The repo is a monorepo: the root doubles as the Arduino library (so Library Manager can index src/, examples/, library.properties at the repo root) while app/ holds the desktop app and docs/ holds protocol/guides.
Desktop App: Tauri 2 (Rust backend + React frontend). Local-first, no cloud dependency. SQLite for device history and metrics.
Library: Arduino-compatible C++ library. Works on ESP32 and Pico W/Pico 2 W with the same sketch. Handles WiFi, mDNS, HTTP, WebSocket, OTA internally.
Protocol: Devices serve a JSON capability declaration at /api/info and communicate in real-time over WebSocket. The app renders controls based on what the device reports.
| Board | Status |
|---|---|
| ESP32 (all variants) | Supported |
| Raspberry Pi Pico W | Supported |
| Raspberry Pi Pico 2 W | Supported |
| ESP8266 | Planned |
- App backend: Rust (Tauri 2)
- App frontend: React, TypeScript, Tailwind CSS
- App database: SQLite
- Library: C++ (Arduino framework)
- Discovery: mDNS / DNS-SD
- Communication: HTTP + WebSocket
- Build: Vite, Cargo
See CONTRIBUTING.md for setup instructions.
If you find Trellis useful, consider supporting development:
MIT — Joshua-Ovidiu Drobota






