CLion · IntelliJ IDEA · PyCharm · 2024.2+

ESPHome, right in your IDE.

Context-aware completion — down to individual LVGL widget properties — live validation from the real esphome config, hover docs, go-to / rename / find-usages, and one-click compile, run & flash. All inside the JetBrains IDE you already use.

Free & open source (Apache-2.0). Bring your own esphome, or let the plugin run it in a managed venv or Docker.

Works in CLionIntelliJ IDEAPyCharmGoLandWebStormRider and other 2024.2+ IDEs

Everything ESPHome, with IDE smarts

The plugin models the full ESPHome component catalog, so completion and docs match what the compiler actually accepts.

⌨️

Context-aware completion

Top-level keys, nested component keys, platform: values, list items, enums and booleans — plus ${substitution} names, triggers (on_*) and automation actions. Works in package-only configs too.

🧩

Full LVGL support

The complete lvgl: tree: every widget type, its properties, and nested widgets — driven by ESPHome's own language schema, resolved lazily so recursive layouts complete correctly.

Real validation

Runs the actual esphome config in the background and underlines reported errors on the exact lines — no second-guessing from a hand-written schema.

🔎

Navigation

Go-to-definition, find-usages and rename for component id:s and substitutions. Id-reference completion offers only the in-scope ids of the right type.

📖

Hover documentation

Type, requiredness, default, range, units and allowed values for any field — with a link straight to the ESPHome docs — on hover or Ctrl+Q.

Compile, run & flash

Run configurations that invoke ESPHome to compile, run, upload, logs or clean — with output in the Run console. More below ↓

📟

Live device window

Connect to a running device over the native API and watch its entities update live — with icons and on-off toggles for switches, lights and fans. Plaintext and encrypted (encryption:) APIs, no extra dependency.

Completion

Context-aware, with docs inline

Type a key and the plugin offers exactly what fits the context — with each option's value type and a one-line description from the catalog, so you pick the right thing without leaving the file.

  • Keys, platform: values, enums, booleans, ids
  • Inline type (string, boolean, …) and docs
  • Works in package-only configs too
Completion popup under a wifi_signal sensor offering name (string) and internal (boolean) with descriptions
Context-aware completion with inline docs and types

LVGL

Completion that knows your widgets

Start typing inside an lvgl: block and the plugin offers the right keys for the context — widget triggers, properties, and their value types — all the way down the nested widget tree.

  • Every widget type and property from the language schema
  • Nested widgets resolved recursively
  • Value type shown inline (boolean, string, …)
LVGL completion popup showing resume_on_input (boolean) and scroll_on_focus (string) under an lvgl on_ trigger
LVGL trigger completion in the editor

Validation

The compiler's own verdict, inline

Instead of approximating ESPHome's rules, the plugin runs esphome config and maps each reported problem back to the offending line — so what the editor flags is exactly what a build would reject.

  • Background ExternalAnnotator, no editor lag
  • Errors mapped to precise line/column
  • Runs on the same backend as your runs (local / venv / Docker)
  • Unresolved-id & unresolved-substitution inspections, with quick-fixes
An editor error on type: gray reading: Unknown value 'GRAY', did you mean 'GRAYSCALE'?
A bad value flagged on the line, with a suggestion

Navigation & docs

Jump, rename, and read the docs in place

Ids and substitutions become first-class symbols: Ctrl-click to their definition, rename them everywhere at once, or list every usage. Hover any key for its type, default and a docs link.

  • Go-to / find-usages / rename for ids & substitutions
  • Type-aware id completion (only valid targets)
  • Field docs sourced from the catalog
Hover documentation popup for an ESPHome config field
Field documentation on hover, from the catalog

Live device window

Watch — and control — a running device

Connect over the native API (plaintext or encrypted) and see every entity update live — grouped by type, each with an icon. Toggle switches, lights and fans, or press a button, right from the IDE.

ESPHome Device tool window showing Sensors, Switches and Text sensors in columns, with values, units and on/off toggles
The ESPHome Device tool window — live entities, grouped, with controls

Compile, run & flash — without leaving the IDE

Right-click any config (top-level esphome: or packages:) → Run, or build an ESPHome run configuration by hand. Output streams to the Run console with stop / re-run.

ESPHome run configuration dialog: command, backend, device, state reporting and options
An ESPHome run configuration — command, backend and options

Commands

  • compile
  • run
  • upload
  • logs
  • clean

Per-run options

  • --device — OTA host/IP or serial port
  • State reporting (--states / --no-states)
  • Reset device before logs (--reset)
  • Free-form extra arguments
  • Emulate a terminal — in-place compile/OTA progress

Three ways to run ESPHome

🖥️ Local

The esphome on your PATH (or set under Settings → Tools → ESPHome). Full capability, including serial flashing.

📦 Managed venv

A plugin-managed Python venv created with one click. Pick a version — blank = latest, beta = latest pre-release, dev or a branch/tag = from git, 2025.7.0 = that release. No global install, full serial support.

🐳 Docker

The official ghcr.io/esphome/esphome image — great for compile and OTA, with an optional shared cache. Serial flashing doesn't work in Docker on macOS (the VM has no USB passthrough) — use Local or the venv there.

Get started in two minutes

  1. Install the plugin

    From Settings → Plugins → Marketplace, search ESPHome, install and restart. (Or grab the zip from Releases → Install Plugin from Disk.)

  2. Pick a backend

    Under Settings → Tools → ESPHome, choose how ESPHome runs: Local (your PATH esphome), a managed venv, or Docker. Both runs and background validation use it, so there's nothing else to wire up.

  3. Open a config & go

    Open any file with a top-level esphome: (or packages:) key. Completion, hover docs and validation light up immediately. Right-click → Run to compile or flash.

Ready to try it?