A cross-platform desktop application that bundles ESPHome with Python and runs the dashboard as a background daemon with system tray integration.
- System Tray Integration: Runs in the background with a system tray icon
- Single-Instance: Only one instance runs at a time; launching again opens the browser
- Auto-Updates: Checks for ESPHome updates and notifies you
- Cross-Platform: Native installers for macOS (DMG), Windows (MSI/NSIS), and Linux (AppImage/deb)
- Bundled Python: Includes a full Python 3.13 runtime - no system Python required
Download the latest release for your platform from the Releases page.
| Platform | Installer |
|---|---|
| macOS (Apple Silicon) | ESPHome Desktop_x.x.x_aarch64.dmg |
| Windows | ESPHome Desktop_x.x.x_x64-setup.exe or .msi |
| Linux | esphome-desktop_x.x.x_amd64.AppImage or .deb |
On first launch, ESPHome Desktop will:
- Create a virtual environment with the bundled Python
- Install ESPHome and its dependencies
- Start the dashboard
- Open your browser to
http://localhost:6052
This initial setup may take a few minutes depending on your internet connection.
Simply launch ESPHome Desktop. It will:
- Start the ESPHome dashboard in the background
- Show a system tray icon
- Open your browser to the dashboard
Right-click (or left-click on some platforms) the tray icon to access:
- Open Dashboard - Open the dashboard in your browser
- Status - Shows if the daemon is running
- Port - Shows the configured port
- Check for Updates - Check for new ESPHome versions
- View Logs - Open the logs folder
- Open Config Folder - Open where your ESPHome configs are stored
- Restart Dashboard - Restart the ESPHome process
- Quit - Stop the daemon and exit
| Platform | Location |
|---|---|
| macOS | ~/Library/Application Support/ESPHome Desktop/ |
| Windows | %APPDATA%\ESPHome Desktop\ |
| Linux | ~/.local/share/esphome-desktop/ |
This directory contains:
venv/- Python virtual environment with ESPHomeconfig/- Your ESPHome configuration files (default location)logs/- Application logssettings.json- User preferences
- Rust (1.77.2 or later)
- Node.js (20.x or later)
- Platform-specific dependencies:
- macOS: Xcode Command Line Tools
- Windows: Visual Studio Build Tools
- Linux:
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev
-
Clone the repository:
git clone https://github.com/esphome/esphome-desktop.git cd esphome-desktop -
Install Tauri CLI:
cargo install tauri-cli --locked
-
Download bundled Python for development:
./build-scripts/prepare_bundle.sh
-
Build:
cargo tauri build
The installer will be in src-tauri/target/release/bundle/.
For development with hot-reload:
cargo tauri devSettings are stored in settings.json:
{
"port": 6052,
"config_dir": null,
"open_on_start": true,
"check_updates": true
}port- Dashboard port (default: 6052)config_dir- Custom config directory (null = use default)open_on_start- Open browser when app startscheck_updates- Check for ESPHome updates automatically
The app is code-signed and notarized. If you still encounter this message (e.g., from a development build), run:
xattr -c "/Applications/ESPHome Builder.app"Then try opening the app again.
- Check the logs in the logs folder (accessible via tray menu)
- Ensure port 6052 (or your configured port) is not in use
- Try restarting the dashboard from the tray menu
- Linux: You may need to add your user to the
dialoutgroup:Then log out and back in.sudo usermod -a -G dialout $USER
The app uses pip to update ESPHome. If updates fail:
- Check your internet connection
- Check the logs for specific error messages
Apache License 2.0 - see LICENSE for details.
Contributions are welcome! Please see the Contributing Guide for details.