v0.64.40 — Hardware catalog, per-hardware quickstart guides, secret-decrypt robustness
The first rolled-up release since v0.64.23 on June 24. Hardware gained a real data model, the per-hardware quickstart story is finally written down, and a handful of widget cache + secret-decrypt edges got smoothed out.
Hardware catalog: data over Python
[v0.64.32] New two-tier device model. Adding a panel that speaks an existing protocol (TRMNL BYOS, MQTT bin, MQTT PNG, REST pull) is now a single JSON file under hardware/<vendor>/<model>.json, not a forked devices/<id>/ folder. The loader walks hardware/ after the folder-based discovery and registers each SKU as a kind that borrows the protocol's parse + validate hooks but carries its own manifest. Folder-defined kinds always win on id conflict so existing installs see no behaviour change. Schema lives at schema/hardware.schema.json.
[v0.64.38] Six bundled catalog entries for previously-undeclared SKUs:
- Seeed reTerminal E1001 (7.5" mono, 800×480), E1002 (7.3" ACeP, 800×480), and the XIAO 7.5" ePaper panel , all on
trmnl_client. - Pimoroni Inky Impression 4" (640×400 Spectra 6) on
pi_bin_client. - Waveshare 4.2" B/W (400×300) on
esp32_bw_client. - TRMNL X (10.3" mono, 1872×1404) on
trmnl_client.
None claim verified status on real hardware; each notes_md says so explicitly. Intent: remove the "drop a JSON" step gating first-touch testing so a tester with the hardware can pair and report status without a code change.
[v0.64.39] Fixed: the bundled reTerminal E1003 manifest no longer claims the device speaks BYOS out of the box. The E1003 ships with Seeed's own ESP32-S3 UI; reflashing with TRMNL firmware is required first. The README always said so; the manifest now matches.
[v0.64.33] README cut from 379 to 138 lines. Per-row Client + Status columns now cover the Seeed reTerminal E Series, TRMNL OG / X, the TRMNL 7.5" OG DIY Kit, the XIAO 7.5" panel, the full Pimoroni Inky Impression lineup, and the Waveshare ESP32 panels.
Quickstart docs, per hardware family
[v0.64.40] New docs/quickstart/ section. Eight family-grouped guides mirroring the tesserae.ink four-step format (install / pair / compose / schedule), one per hardware family:
- Raspberry Pi + Pimoroni Inky Impression (4", 5.7", 7.3", 13.3", pHAT, wHAT).
- Pi Pico Plus 2 W + Inky 13.3".
- Waveshare 13.3" Spectra 6 (ESP32-S3).
- Waveshare 7.3" PhotoPainter (ESP32-S3).
- Waveshare 4.2" B/W (ESP32).
- TRMNL OG / TRMNL X (stock firmware, no flashing).
- Seeed reTerminal E-Series (E1001 / E1002 / E1003 / E1004).
- Seeed XIAO 7.5".
- Kindle Paperwhite + KOReader.
[v0.64.33] New docs/dev/adding-hardware.md walks contributors through the hardware-catalog schema with the bundled E1003 entry as a worked example. Covers the two-tier model, when to use the catalog vs writing a new protocol folder, schema reference, registration semantics, back-compat rules (folder wins on conflict, deprecated_aliases, orphan handling), and the per-protocol protocol_config notes.
Install paths
[v0.64.30] New docs/install/lxc.md covering Proxmox VE on x86 homelab hosts and Ubuntu MicroCloud on arm64 Pi. New scripts/cloud-init.yaml automates the same install end-to-end. Installs the venv, downloads Playwright's bundled Chromium so webpage widgets work out of the box, and registers the systemd unit.
[v0.64.37] LXC docs and scripts/cloud-init.yaml now use images:debian/trixie/cloud on the cloud-init launch command. The slim images:debian/trixie image used in the manual section does not include cloud-init, so the user-data block was silently ignored. The /cloud variant ships with cloud-init pre-installed and is the right pick for any automated provisioning. Manual setup keeps the slim image since cloud-init is not involved there. Also: 2 GB sizing on a CM4 is now confirmed (about 1 GB headroom after install) rather than testing pending, and a --storage <pool-name> troubleshooting tip for MicroCloud installs that don't auto-detect NVMe.
[v0.64.28] pillow-heif added to host dependencies. Registers a HEIF decoder with Pillow at import time so any picture-family widget can transcode iPhone HEIC originals to JPEG on the proxy path. Wheel-bundled libheif on every tier-1 platform; no system package step required.
Secrets + widget caches
[v0.64.24–v0.64.25] Two fixes for a stale-secret cascade reported in #29.
- v0.64.24: the editor entity picker now surfaces a "re-enter this secret" banner when a plugin's stored secret can't be decrypted, instead of silently rendering an empty dropdown.
SecretBoxErroris caught specifically; other exceptions still fall through to the empty-list treatment so a real network blip doesn't mis-blame decryption. - v0.64.25:
_unwrap_treeis now tolerant of per-value decryption failures. Each bad value is logged + replaced with an empty string, the rest of the section walk continues. One stale secret can't take out the wholeget_section()call. The manifest-awareget_for_runtimepath stays strict so a caller asking for a specific token still gets a loud error.
[v0.64.36] Two cache-hit hygiene fixes:
weather_forecastandweather_hourlywere missing the duplicateplacefield overlay on cache hits. A location rename on the same(lat, lon, units[, hours])cache key updatedlabelbut the variant template still showed the staleplace. Both fields now overlay together.news_rssandnews_wikipedia_otdnow includemax_itemsin the cache key. Previously, changing the size in the editor served the prior fetch's slice for up to the 10-minute TTL.
Editor + Settings polish
[v0.64.31] Duplicate dashboard. A copy button on the dashboards list and in the page editor header clones the current dashboard (cells, theme, style, font, device bindings, panel override, per-cell options) under <name> copy, falling back to <name> copy 2 / <name> copy 3 on collision. Page id and every cell id are regenerated so the copy is fully independent of the source. Per discussions#6.
[v0.64.27] New Settings → About tab. Carries the install's project meta (version, license, source / docs / discussions links), a prompt to fill out a six-question Tally survey on how people use Tesserae (since v0.64.22 ripped phone-home telemetry, asking is the only signal channel left), and a "Support the project" card linking to GitHub Sponsors. Survey is anonymous, optional per question.
[v0.64.27] Removed the "Test broker connection" diagnostics card on Settings → Server. Rarely used now that REST is the default transport; sitting next to the much taller Session card it produced a visible height mismatch at the bottom of the page. The underlying route is left in place.
[v0.64.26] README badges restyled to for-the-badge with inline base64-encoded Phosphor SVG logos (scales for license, tag for the latest release, check-circle for CI, chats-circle for Discussions, cloud-arrow-up for the Codespaces launcher, heart for Sponsor). Keeps the brand consistent with the rest of the project, which already uses Phosphor end-to-end.
[v0.64.34] docs/widgets/gallery.md regenerated. Was stale at 30 widget cards while the actual bundled set is 33. docs/credits.md gained the three missing OFL font credits: Archivo Narrow, Bodoni Moda, and Jost.
[v0.64.29] OpenAPI docs gained an install block showing pip install "openapi-generator-cli[jdk4py]" for users without a system JDK on PATH. Plus a short note flagging that openapi-generator's output is heavyweight by design and a poor fit for memory-constrained MCU targets, where a hand-written minimal client against the spec is the better path.