Prebuilt web frontend for the ESPHome Device Builder Dashboard
Project description
ESPHome Device Builder Dashboard — Frontend
A web-based dashboard for managing, configuring, and deploying ESPHome IoT device firmware. Built with Lit web components and TypeScript.
This repository contains the frontend source only. The dashboard runs as part of the ESPHome Device Builder Dashboard, which ships a prebuilt copy of this frontend bundled in. End users should follow the install / run instructions in the backend repo — there's nothing to deploy from here on its own.
Screenshots
Configured devices in the table view, with the discovered-devices banner above:
Discovered devices expanded — each card surfaces the project metadata and offers a one-click "Take control" adoption flow:
Create-device wizard's board picker — searchable, filterable by chip family, with curated featured boards up front:
Tech stack
- Lit — Web components framework
- TypeScript — Strict mode throughout
- Rspack — Rust-based bundler
- Web Awesome — UI component library (Home Assistant variant)
- CodeMirror — YAML editor with syntax highlighting
- Sonner — Toast notifications
Backlog
Before filing anything, take a look at the shared backlog — it lists everything that's already planned, in progress, or shipped for the dashboard. Saves duplicates and gives you a feel for where the project is heading.
Issues and feature requests
The new-issue chooser on this repo only surfaces redirect links — there's no way to file a generic issue here.
- 🐛 Bugs → backend issue tracker. UI bugs go there too so we can triage everything in one place.
- 💡 Feature ideas → ESPHome org discussions or the dashboard Discord channel where the new UI is actively discussed and feedback is being collected. Once a request is shaped enough to be actionable a maintainer adds it to the backlog above.
Contributing — local development
The rest of this README is for developers working on the frontend itself. If you just want to run the dashboard, head over to the backend repo and follow its setup.
Prerequisites
- Node.js 22+ (with npm)
- A running ESPHome Device builder backend on
localhost:6052— clone and run device-builder in dev mode in a separate terminal
Install
npm install
Dev server
npm run dev
Starts an HMR dev server at http://localhost:5173. WebSocket and REST traffic are proxied to the backend at localhost:6052.
Production build
npm run build
Outputs the bundled assets into esphome_device_builder_frontend/ — that directory doubles as the Python package source for the wheel that ships with the backend release. The __init__.py exposing the asset path is sourced from public/__init__.py and copied into place by the bundler.
To produce the wheel locally (matches what CI builds on release):
npm run build
python3 -m build --wheel
# wheel ends up in dist/
Other scripts
| Script | Description |
|---|---|
npm run lint |
TypeScript type-check (tsc --noEmit) |
npm test |
Run the Vitest suite once |
npm run test:watch |
Run tests in watch mode |
npm run format |
Format src/ with Prettier |
Project structure
src/
├── api/ # WebSocket/HTTP API client and types
├── components/ # Lit web components
│ ├── device/ # Device editor, navigator, component catalog
│ └── wizard/ # Device creation wizard steps
├── pages/ # Routed page components (dashboard, device, secrets)
├── context/ # Lit Context definitions
├── common/ # i18n / localization
├── util/ # Helpers (debounce, YAML parsing, icons, ...)
├── styles/ # Theme and shared styles
├── translations/ # Language files (en, fr, nl)
└── entrypoint.ts # App bootstrap
public/
├── __init__.py # Python package entry — copied into the build
│ # output at bundle time so the wheel exposes a
│ # `where()` helper pointing at the static assets.
├── index.html # HTML shell
└── static/ # Static assets (favicons, ...)
esphome_device_builder_frontend/ # Build output (gitignored)
Releases
Releases are produced by GitHub Actions:
release.yml— manual trigger (or called fromauto-release.yml). Tags the version, drafts release notes from PR labels, builds the Python wheel, attaches it to the GitHub release, then opens or updates a single bump PR on the backend repo so it can pick up the new wheel URL.auto-release.yml— nightly cron that auto-releases when ≥ 2 commits have landed since the last release.dependabot.yml+auto-approve-dependabot.yml— weekly npm + Actions bumps with auto-approve.
The backend's pyproject.toml references the wheel by GitHub release URL (no PyPI), so a release here is everything needed to ship a new dashboard build.
Status
Disabled features
The frontend is wired up for some features the backend doesn't expose yet. Anything in this list is gated behind a flag in src/feature-flags.ts — flip the flag to re-enable once the backend lands.
- Automations (
AUTOMATIONS_ENABLED) — the navigator's "Automations" group is still visible and lists existing automations parsed from the YAML, but the "+ Add automation" action button is greyed out (and the underlying dialog isn't mounted). The ESPHome WebSocket API doesn't yet expose the endpoints the UI needs to add new ones (catalog of triggers / conditions / actions, schema lookups, save-back hooks). Re-enable by settingAUTOMATIONS_ENABLED = trueonce those land.
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file esphome_device_builder_frontend-0.1.56.tar.gz.
File metadata
- Download URL: esphome_device_builder_frontend-0.1.56.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2eea47bd35e6991350ef29acfca900c71c8bb99c250211e876bf824356abb5cf
|
|
| MD5 |
b85518cd93b36f54976983fd83fb8a6a
|
|
| BLAKE2b-256 |
b68d653828196ba916a2666671d47fb964973dc2c00a6d98a6fee7b9b4c64453
|
Provenance
The following attestation bundles were made for esphome_device_builder_frontend-0.1.56.tar.gz:
Publisher:
release.yml on esphome/device-builder-frontend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
esphome_device_builder_frontend-0.1.56.tar.gz -
Subject digest:
2eea47bd35e6991350ef29acfca900c71c8bb99c250211e876bf824356abb5cf - Sigstore transparency entry: 1496581031
- Sigstore integration time:
-
Permalink:
esphome/device-builder-frontend@bf18548d8e6b679e997f819e3aed863234514613 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/esphome
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bf18548d8e6b679e997f819e3aed863234514613 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file esphome_device_builder_frontend-0.1.56-py3-none-any.whl.
File metadata
- Download URL: esphome_device_builder_frontend-0.1.56-py3-none-any.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d1a03ee007749ee625c4354cfc5ee5f91e2bfc0adec55b0ac7b8087844ce692
|
|
| MD5 |
3d29c46cbe5547cff28ad4b1141731cf
|
|
| BLAKE2b-256 |
5d9cef2d7f497b25e5ca6f5159fc33db19caf325a89988d529db18aab3f5ca2c
|
Provenance
The following attestation bundles were made for esphome_device_builder_frontend-0.1.56-py3-none-any.whl:
Publisher:
release.yml on esphome/device-builder-frontend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
esphome_device_builder_frontend-0.1.56-py3-none-any.whl -
Subject digest:
9d1a03ee007749ee625c4354cfc5ee5f91e2bfc0adec55b0ac7b8087844ce692 - Sigstore transparency entry: 1496581410
- Sigstore integration time:
-
Permalink:
esphome/device-builder-frontend@bf18548d8e6b679e997f819e3aed863234514613 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/esphome
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bf18548d8e6b679e997f819e3aed863234514613 -
Trigger Event:
workflow_dispatch
-
Statement type: