Repository navigation
Changelog
[2.5.0] — 2026-10-07
Added
-
Bento home screen theme — New grid-layout home screen in two variants, Bento Cover and Bento Text. A large left panel shows the current book (its cover, or its title and author), with quick-access cells for All Books, Recent, Series, Stats and Settings. Selectable from Settings > Look.
-
Customisable selector style — New "Selector" setting in Settings > Look switches the home-screen selection indicator between Block (default), Dot and Corner. Applies to Chronicle, Stele, Minimal, Codex, Lyra, Lyra Extended and Bento; sub-lists (All Books, Recent, Series, Hidden Books, Settings, Reader Options) always use Block.
-
Settings tooltip reflects focus — The Settings button hint bar now changes with focus: Back / Next Tab / Enter on the tab bar, Back / Select / Down / Up in the list.
-
Confirmation for destructive System actions — Clear Cache, Rebuild Book Index, Rebuild SPIFFS and Switch to app0/app1 now open a Cancel / Confirm picker (Cancel preselected) instead of running on a single press.
Improved
- UI sizes now follow the screen — Lyra Extended cover slots, the Bento cover panel, Lyra and Stats thumbnails and the full-screen sleep cover are sized from the panel instead of a fixed 480 × 786. Groundwork for Xteink X3 support; no visual change on X4.
Fixed
-
Reader images respect the "Show Images" toggle when cached — Images already cached on the SD card (
.binfiles) kept rendering after "Show Images" was turned off, because the cache read path bypassed the toggle. The toggle is now checked before the cache is read. -
Failed conversions no longer break a book permanently — An interrupted conversion left a half-written
book.mrbthat looked valid, so the book showed "Failed to open book" forever. The partial file is now deleted on failure and leftover placeholders are rejected, so the book converts again on next open. -
Some table-of-contents entries no longer crash the reader — TOC entries pointing outside the book's reading order crashed the device or opened the wrong chapter. They are now dropped at conversion; older books keep the current page instead of crashing.
-
A corrupt book can no longer cause a boot loop — Damaged paragraph data could crash the device on open, and since the last book reopens at boot, on every start. Paragraph data is now bounds-checked, and after a crash the device boots to the library.
-
Settings and the book index recover after power loss — Backups were written on every save but never read back, so a power cut mid-save reset settings or the library. Loading now falls back to the latest complete copy.
-
Reading position survives power loss — The
.posfile was rewritten in place on every page turn. It is now written to a temporary file and swapped in. -
Titles and authors with
&or special characters display correctly — Metadata was not entity-decoded, so titles showed&or’. Fixed for books converted or reindexed after updating. -
Chapters with spaces or non-English characters in file names no longer disappear — URL-encoded references such as
Chapter%201.xhtmlnever matched the file in the book. References are now decoded before lookup; affected books need re-converting. -
Numeric CSS font weights now render bold —
font-weight: 600,700,bolderand!importantvalues were ignored. -
Text ending in a stray
&stays in its paragraph — Text likeAT&Tat the end of a paragraph moved into the next one, or was lost at the end of a chapter. -
Hyphenation setting applies as soon as a book opens — With hyphenation off, the first pages were still hyphenated until Reader Options was visited.
-
Reading time uses real elapsed time — Each frame counted as a fixed 50 ms, so slow page refreshes were undercounted in reading stats.
-
Custom sleep images put the display fully to sleep — Custom
.mgrand BMP sleep images never sent the display its deep-sleep command. -
Oversized sleep images can no longer corrupt memory — A
.mgrimage wider than the screen wrote past each display row. Images are now clipped to the panel. -
Book-cover sleep screen now shows in landscape — A 640 px row limit made the cover sleep screen fall back to the logo when the UI was rotated to landscape.
-
Repeated font changes no longer exhaust memory mappings — Each font change mapped the font partition again without releasing the old mapping, until fonts stopped loading.
-
Interrupted font installs are detected — SD-card and USB font installs wrote a valid header before the data, so a failed install looked like a good font. The header is now written last, and a failed install falls back cleanly.
-
Failed USB uploads no longer delete the existing file — Uploads now go to a temporary file and replace the original only after verification. A full SD card reports an error instead of "OK", and file names with folder separators are rejected.
-
A
|in a title, author or series no longer corrupts the library index