All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.7.0 - 2026-08-08
invert_conditionoption on the Tile and Entity widgets: a list of Lovelace condition dicts, same format asvisibility. When the conditions are met the widget renders inverted (solid black card, white text/icon) as an e-ink "needs attention" signal.font_diranduse_system_fontsdisplay settings: use a directory of custom font files, or resvg's own system font fallback, to render scripts the bundled Roboto font doesn't cover (e.g. Hebrew, Arabic, CJK).- Localized forecast/calendar day labels: weekday, month, and relative-date ("today"/"tomorrow"/"in N days") labels in the Weather forecast and Waste Schedule/Calendar widgets now follow the display's configured language instead of always English.
- Graph widget:
start_timeto anchor the window to a fixed time of day,state_font_sizeto control header text size,show_legendto hide the per-entity legend independently, andsecondary_upper_bound/secondary_lower_boundto pin the secondary Y-axis range. Multi-entity headers now show every entity's state instead of only the first. heading_alignoption on the Heading widget to right-align the title.- Config flow: the "Copy dashboard YAML" export now isolates oversized displays into their own full-width Lovelace section instead of squeezing them into a row with much smaller displays.
- Entity widget redesigned: icon now sits on the left with the value/unit as the primary black text and a repositionable, alignable gray name, matching the Tile widget's visual priority.
display_levels(renamed fromgrayscale_levels; existing configs are migrated automatically) now affects widget rendering independent of e-ink optimization, and moved out of the collapsed "Advanced" section to a top-level Display Settings field.
- Seeed reTerminal E1003 device preset now declares its correct native landscape orientation, fixing a spurious 90° rotation that produced a portrait PNG for the default landscape setup. Existing dashboards are fixed automatically on upgrade via a config entry migration; no manual reconfiguration is needed.
- Entity icons defined via
icons.json(e.g. themoonintegration's state-dependent icons) are now resolved instead of falling back to a plain letter. - Graph widget legend: a name override on the primary entity is no longer dropped, and long names are truncated instead of overlapping adjacent entries.
0.6.0 - 2026-07-07
- Color e-ink palette support: displays with a
color_schemeconfigured (BWR, BWY, BWRY, BWGBRY) are now rendered and dithered in RGB instead of grayscale. - Seeed reTerminal E1002 device preset (800×480, Spectra 6-color / BWGBRY).
dither_algorithmdisplay setting: choose between Floyd-Steinberg, Atkinson, Stucki, and Burkes dithering, powered by the newepaper-ditheringlibrary (replaces Pillow's built-in Floyd-Steinberg quantization).measured_palettedisplay setting: use a photographically calibrated color/gray palette fromepaper-ditheringinstead of the idealized default.exposureandsaturationdisplay settings, replacingsharpnessandcontrastas pre-dithering image adjustments.hide_nameoption on the Entity and Sensor widgets to show only the value with no name label.bold_valueoption on the Entity, Sensor, Entities, Tile, Gauge, Graph, Device Battery, Waste Schedule, and Calendar widgets.- Attribute-based data source for the Graph widget: plot a time-series list from an entity attribute (e.g. solar production or price forecasts) instead of only recorder state history.
- Display settings:
grayscale_levels, and the newexposure/saturationsliders are now grouped under a collapsed "Advanced" section in the config flow. - Entity, Sensor, and Entities widgets: the state value is now the dominant, black, bold-weight element and the name/label is smaller and gray, matching at-a-glance e-ink dashboard priorities.
- Tile, Waste Schedule, and Calendar widgets: values render in solid black and names in gray (previously the reverse).
- Seeed reTerminal E1001/E1003 presets no longer double-dither:
optimizedefaults to off for these devices since HA Core's OpenDisplay integration already dithers before sending over BLE; the Display Settings UI now explains why the toggle is disabled. - Graph widget history fetches now go through the recorder's own executor, eliminating repeated "detected blocking call" warnings from Home Assistant.
sharpnessandcontrastdisplay settings, superseded byexposureandsaturation(existing configs are migrated automatically).
0.5.0 - 2026-06-30
- Graph widget: time-series line chart for one or more numeric entities,
with configurable
hours_to_show,smoothing, axis labels, grid lines,group_byaggregation,extremamarkers,min_bound_range, and multi-entity overlay support. - Bar chart mode for the Graph widget (
chart_type: "bar"). - Color threshold styling for the Graph widget: segments change color based on configurable value thresholds.
- Gauge widget: arc-style gauge for a single numeric entity with
configurable
min,max, and optional color thresholds. - Frame widget: decorative card with rounded corners for visual grouping, with no entity data of its own.
- Calendar widget: upcoming-events list sourced from HA calendar entities.
- Custom sensor overrides for the Weather widget: replace the built-in temperature, humidity, or wind sensors with arbitrary entity IDs.
hide_iconoption on the Entity and Tile widgets to suppress the icon circle entirely.hide_fillandhide_stateoptions on the Sensor widget sparkline.- Seeed reTerminal E1001 and E1003 device presets in the config flow.
- Widget SVG backgrounds are now transparent, enabling correct compositing when widgets overlap or when the dashboard background shows through.
- Config flow:
grayscale_levelsis now coerced tointbefore validation, preventing a type error when the value arrives as a string.
- Frontend editor skips redundant SVG renders instead of queuing them, reducing unnecessary server round-trips during rapid widget edits.
0.4.1 - 2026-05-21
- Fixed release pipeline
0.4.0 - 2026-05-21
- Sensor widget: single-entity sensor card with optional sparkline history
graph (
graph: "line"), configurablehours_to_show,detaillevel, and fixed Y-axislimits. - Entities widget: multi-entity list card with optional title, inline
divider rows (
type: "divider"), and section rows (type: "section"). - Entity widget: large-value single-entity card showing state and unit, mirroring HA's Entity card.
- Heading widget: section heading with optional MDI icon and entity badges, superseding the deprecated Text widget.
- Locale-aware number formatting: per-device decimal and thousands separator override (decimal comma, decimal point, or HA default) settable in the integration options.
- Visibility conditions: all widgets now support a
visibilitylist to show or hide based on entity state or other HA conditions. - Editor drag-and-drop reordering: widget order can be changed by dragging rows in the widget list, replacing the previous up/down arrow buttons.
- Editor live SVG preview scaling: the preview panel scales proportionally while a widget is being resized.
- Row dividers in Entities, Waste Schedule, and Weather widgets now render in
light gray (
#b4b4b4) instead of medium gray, improving visual hierarchy on 16-level grayscale displays. No change on 2-level (TRMNL) displays. - Entity and Sensor widget header icon enlarged for better legibility on e-ink screens.
- Design tool default dashboard (no
--widgetflag) now previews all key widget types: Weather, Tile, Entity, Sensor (with sparkline), Waste Schedule, and Device Battery.
- Deprecated widget types
text(useheading),sensor_rows, andstatus_iconsremoved from the renderer and widget picker. Existing configs that reference these types will no longer render.
- Entity and Sensor header icon circle now has consistent padding from the top card border (previously the circle clipped the border line).
- Heading widget had double padding below the title under
card_style: "border". - Weather and Device Battery widgets: content soft-padding now applied
consistently when
card_style: "none". - Widget picker showed raw MDI icon strings instead of glyphs for Entities and Sensor card types.
- Waste Schedule, Tile, and Heading icon circle strokes are now widened on 2-level (TRMNL) displays to prevent dithering artifacts.
recorderintegration declared inafter_dependenciesso history data is available when the Sensor widget fetches it at startup.- Translation selector keys for date format settings corrected to lowercase.
0.3.0 - 2026-05-16
- Media Source platform exposing rendered dashboard PNGs in HA's Media Browser, enabling delivery to screens running OpenDisplay.
- TRMNL battery level support in the
device_batterywidget. - Snap-to-widget-edges in the Lovelace editor: hold Shift while dragging a widget to align it to the nearest edge of any other widget.
- Design tool: interactive resize handles on the Raw SVG preview panel. Corner handles resize width and height; left/right edge handles resize width only. A dashed blue outline tracks the widget bounds, and handles snap to the widget's actual rendered content area.
- Editor resize model: corner handles (nw/ne/sw/se) resize width and height; left/right edge handles (w/e) resize width only. Font size scales proportionally on corner resize for text and weather widgets.
- Bumped
resvg-pyto 0.3.2 for fontdb caching support. - Weather widget: main temperature is now rendered in bold.
- Spurious
RuntimeErrorlogged during HA shutdown when the image refresh executor is already stopped is now suppressed. device_batterywidget resize box now matches the rendered content width instead of a hardcoded 200 px default.
0.2.0 - 2026-05-15
- SVG rendering pipeline: all widgets are now rendered as Jinja2 SVG templates
rasterised by
resvg-py, replacing the PIL drawing infrastructure. - WebSocket commands
eink_dashboard/render_widgetandeink_dashboard/render_widgetsfor fetching server-rendered SVG previews from the Lovelace editor. - Shared SVG macro library (
_macros.svg.j2) for card borders, dividers, and other reusable layout primitives. mdi_svgandweather_svgJinja2 filters for inlining MDI and weather icons directly into SVG templates.- State circle indicator on
status_iconswidget, controlled by the newshow_iconandshow_stateoptions. - Card container (
card_style) support for thetextwidget. - Standalone design tool (
tools/design_widget.py) for iterating on widget layouts outside of Home Assistant. - CI job publishing JUnit test results to GitHub Actions.
- Editor canvas preview replaced by server-rendered SVGs; drag and resize interactions rewritten accordingly.
status_iconswidget redesigned from pill chips to icon-and-text labels.- Config flow screen-portion selection step restricted to TRMNL devices only.
- TRMNL documentation URL standardised to
trmnl.com. - Build tooling migrated from tox to
uv.
LINEwidget type.- PIL drawing infrastructure (
render.pyPIL helpers). - cairosvg icon build pipeline.
- Widget SVG viewport clipped to the widget's content dimensions, preventing overflow into adjacent widgets.
- Card border inset now included in the
device_batterynatural-width calculation. - Weather forecasts are now fetched in the SVG preview WebSocket handlers so the editor shows live forecast data.
- Config flow orientation indicator shown in the screen-portion step title.
0.1.0 - 2026-05-05
- Initial release.