Changelog
All notable changes to PyHMI. The format follows Keep a Changelog and the project adheres to Semantic Versioning.
0.2.0 2026-09-27
First tagged release. PyHMI is an open-source, royalty-free Python graphics library for building graphical user interfaces that run natively on desktop Linux (framebuffer), embedded microcontrollers (CircuitPython with SPI LCD), and can be emulated in a window on macOS, Linux, and Windows.
Added
- Multi-runtime architecture — one codebase runs on desktop Linux (
/dev/fb0framebuffer), microcontrollers (CircuitPython SPI LCD), and an SDL2 emulation window on macOS/Linux/Windows. - PyHML declarative UI language — an indented, Python-adjacent syntax inspired by Qt QML, with component hierarchy, property binding (
{{ }}), signal handlers (on<Signal>), id references, and layout declarations. QML import loads and renders existing Qt QML designs. - 50+ widgets covering the uGUI, LVGL, TouchGFX, emWin, and Qt/Quick catalogs: basic, input, container, chart/gauge, media, navigation, and specialized widgets, plus user-defined custom elements via class inheritance.
- Layout engine — Flex (row/column with alignment, spacing, stretch) and Grid (rows/columns with span, alignment).
- Core engine — widget tree, event loop, animation engine (easing curves, keyframes), style templates (cascading widget/class/theme), data binding (one-way and two-way, circular-dependency detection), gesture recognizer (swipe, pinch, tap, long-press), scene manager, and dialog manager.
- Graphics abstraction — double-buffered canvas, painter primitives, bitmap + TrueType font rendering (Arimo default, 4-bit grayscale AA), PNG/BMP/GIF image decoding, and desktop JPEG/MP4/MJPEG.
- Display backends — Linux framebuffer (mmap, full color-format matrix), CircuitPython SPI LCD (ST7735/ST7789/ILI9341/HX8357), and SDL2 emulation.
- Input backends — Linux evdev (touchscreen, keyboard, mouse), CircuitPython tinyusb, and SPI/I2C touch controllers.
- C/C++ runtime variant (
src/pyhmi_cpp/) — a C++11 implementation with full feature parity (72 widgets, core modules, backends, parsers), built with CMake for x64/arm64/arm32. - C-accelerated memory graphics core (
src/pyhmi_fb/) — a portable C99 core providing fast memory-graphics primitives as a MicroPython C module, a CPython extension, and shared with the C/C++ runtime. The pure-Python Painter is the always-correct reference; accelerators advertise a capability set and are pixel-identical. - UI Scene Editor — a cross-platform (macOS/Linux/Windows) visual editor for designing PyHML scenes, with a widget-screenshot palette, tree, properties pane, canvas with snap guides, a theme system, and live emulation in a separate window.
- PyHMI Runner — a drag-and-drop app for running
.py/.pyhmlscenes. - Pyodide web variant — PyHMI runs in the browser via a WebCanvas backend and a non-blocking tick architecture.
- Project generator — a CLI that scaffolds a complete project (simple and advanced modes) with VS Code integration.
- HTML to PyHML converter.
- 100+ examples covering every widget, feature, and concept.
- Documentation — API reference, PyHML language reference, widget gallery, backend guides, tutorials, architecture guide, and an agent-readable API index.
- Packaging — Debian packages (Python + C++), Yocto recipes, and 4-platform PyInstaller app builds (editor + runner) in CI.
Added
- i18n module (
src/pyhmi/i18n.py) — internationalization support for multi-language HMI displays. - Alpha blending —
blit_piland the C coreblit_imagesupport per-pixel alpha compositing; newOP_BLIT_IMAGEaccelerator op. - Button image — Button widget renders a Pillow RGBA image when
sourceis set. - TXT 4.0 demo — a complete demo application with custom widgets, PyHML scenes, a Fischertechnik-inspired theme template, and Barlow TTF fonts.
- Windows Docker build —
scripts/build_windows_docker.sh+Dockerfile.windows-buildbuild a single-file Windows.exevia Docker + Wine64. - 43 new widgets completing the 50+ widget catalog.
Fixed
- ScrollView: content clipping, border gating, 2px offset, and double-render ghost.
- Button: drag tracking and click-after-scroll.
- Canvas: content clipping.
- RadioButton: checked-state rendering.
- Editor: scene dimensions, title field, screenshot capture.
- Double-render architecture:
WidgetBase._renders_own_childrenguard for ScrollView, StackView, SwipeView, TileView (C++ parity).
Changed
PyHmi.init()accepts athemekeyword argument;Engine.themeattribute for runtime theme switching.- Parser gained
WidgetBase.registryfallback for custom element lookup. - Bumped the project version from 0.1.0 to 0.2.0 across all source-of-truth files and renamed the Yocto
.bbrecipe files to_0.2.0.bb. - Added a final
bundlestage to the GitLab pipeline that zips all build artifacts into a singlepyhmi-<version>-<commit-short>.zip.
0.1.0
Initial development version: core engine, widget set, PyHML parser, SDL2 backend, C/C++ runtime, and hardware test firmware. Never tagged; superseded by 0.2.0.