Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host ESPHome
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A system to control ESP32, ESP8266, BK72xx, RP2040 and similar microcontrollers from simple configuration files and manage them from home-automation systems such as Home Assistant, a project of the Open Home Foundation. The Docker image runs the ESPHome dashboard (Device Builder), the web UI for managing device configurations.
Runs on a VPS from $10/mo (Vultr 2 GB, 2 GB RAM) · prices checked Oct 2026
Our recommendation
Pick ESPHome when your smart-home hardware is cheap microcontrollers you program yourself: it controls ESP32, ESP8266, BK72xx and RP2040 chips from simple configuration files and integrates them with home-automation systems such as Home Assistant, as an Open Home Foundation project. The Docker image runs the ESPHome dashboard (Device Builder), the web UI where you create and manage those device configurations. The licence is split: the Python code and everything else is MIT and the C++ runtime is GPL-3.0. Our snippet is the install docs' Compose example with the image pinned to a release tag, the configs in a volume and a generated dashboard password, and with a published port instead of host networking. We did not find an upstream RAM minimum, so our 512 MB floor is an estimate. The catalog's Home Assistant is the usual front end for ESPHome devices, and Eclipse Mosquitto is the MQTT broker some setups put between them.
What you need
Any VPS with at least 512 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
ESPHome's Docker documentation flags these before you rely on the container:
non-negotiableThe docs' Compose example runs the container with privileged: true and network_mode: host. Without host networking .local names do not resolve, so only devices with a fixed address (use_address or manual_ip) get a status in the dashboard; our snippet publishes port 6052 instead, so use fixed addresses or switch to host networking.
non-negotiableSign-in comes from ESPHOME_USERNAME and ESPHOME_PASSWORD, which replace the legacy USERNAME and PASSWORD variables because those collided with the shell's $USERNAME; the docs recommend an environment file with restricted permissions over putting the password on the command line. Our snippet generates one into .env. Port 6052 is plain HTTP, so keep it on your LAN or behind a TLS reverse proxy.
non-negotiableDevice configurations and secrets live in /config, which our esphome_config volume holds; back it up, because your Wi-Fi credentials and API keys sit in those YAML files.
non-negotiableThe image tags are latest and stable (the docs say not to use them for automatic updates), YEAR.MONTH such as 2026.10, beta and a daily dev build; we pin 2026.10.0. Firmware built by one release may need a matching dashboard version, so move devices and the dashboard together and read the release notes.