Hi all ![]()
I’ve been working on a new open-source project called ESPCompose, and I’d love to get feedback from this community early on.
What problem is this solving?
If you’ve worked with ESPHome + LVGL, you’ve probably felt some of this:
- UI definitions can get verbose and hard to maintain
- Binding data to widgets (especially dynamic Home Assistant entities) feels clunky
- Iterating on UI often requires flash → test → repeat
- Tooling is much more limited than what many of us are used to in modern frontend development
What is ESPCompose?
ESPCompose is a toolkit for building ESPHome UIs using a TypeScript + TSX (React-like) authoring model.
Instead of writing large, YAML-heavy UI definitions, the goal is to let you write something more declarative and composable, like this:
<Label text={() => `${temperatureSensor.state}°`} />
<Button onClick={() => light.toggle()} />
Under the hood, this is compiled into ESPHome-compatible output.
Key ideas behind the project
-
React/TypeScript-inspired authoring
- Build UI using familiar TSX-style patterns
- Compose reusable pieces instead of repeating blocks of YAML
-
Better data binding
- Make it easier to connect UI widgets to changing state and Home Assistant entities
-
Reactive concepts under the hood
- Inspired by modern reactive UI systems
- The intent is to make dynamic UI behavior easier to express
-
Modern developer tooling
- TypeScript-based workflows
- Stronger editor support and better opportunities for code completion and validation
-
Improved UI development experience
- Long term, I’d like to improve the iteration loop for UI work and reduce the pain of repeatedly flashing firmware just to test small changes
Current status
This project is still early and not fully done yet, but it has reached the point where I think it’s worth sharing.
Some areas are still actively being worked on:
- LVGL widget coverage
- Schema and metadata generation
- Tooling and docs
- Better development and preview workflows
Why I’m posting now
I’d really like feedback before the project gets too far along.
I’m interested in hearing things like:
- Does this direction sound useful?
- What are your biggest pain points with ESPHome UI development today?
- Would you use something like this?
- Does the TypeScript/TSX approach feel appealing, or does it feel like unnecessary complexity?
- What would make a project like this worth trying?
What I’m looking for
At this stage I’m mainly looking for:
- Feedback on the overall direction
- Interest from potential users
- Suggestions for features or priorities
- Contributions from anyone interested in ESPHome, LVGL, TypeScript, tooling, or docs
Project links
- GitHub: GitHub - espcompose/espcompose: ESPHome Compose provides a JSX authoring layer that compiles to valid ESPHome YAML. You get full type safety, reusable components, IDE autocompletion, and the expressiveness of TypeScript — all while producing standard ESPHome configurations that work with Home Assistant. · GitHub
- Website: https://espcompose.io
Final thoughts
My goal is not to replace ESPHome, but to improve the developer experience for people building more advanced, UI-driven ESPHome devices.
If this sounds interesting, I’d really appreciate your thoughts, criticism, ideas, or contributions.
