- TRMNL X support: 1872×1404 16-level (4-bit) grayscale rendering, with
automatic OG/X model detection from device-reported resolution
- Touch-bar advance-on-tap playlists (TRMNL X): middle tap advances to the next
screen; timed screens auto-advance, untimed screens stay until tapped
- Calendar widget: localized month/weekday names, diacritic stripping, dividing
lines, weekend highlight, configurable font size and week start
- Custom widget grid cells now wrap long text instead of clipping to one line
- Seed default models + widget templates on every boot (idempotent upsert) so
existing installs pick up new widgets/models on upgrade without data loss
- Fix malformed image on Seeed OG DIY kit by serving BMP (#31)
- Fix spurious firmware update note (#28)
- Remove PostgreSQL support; SQLite only
* Fix weather icons not rendering on device (#23)
The device render path (renderDesignAsHtml -> Puppeteer ->
generateWeatherContent) embedded the raw SVG primitives returned by
getWeatherIconSvg() directly into an HTML <div>, without an enclosing
<svg> element. Browsers only render SVG primitives inside an <svg>, so
the weather icon was invisible on the device while still showing in the
frontend designer preview (which uses a proper <svg> wrapper).
Wrap the icon markup in a sized <svg> element (matching the existing
battery/wifi widget pattern) and add font-family to the snow glyphs for
robust text rendering.