You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Library "Unshelved" filter — Added an "Unshelved" quick filter option to
both desktop and mobile library filter menus to easily find books that are not
assigned to any shelf or collection.
Google Play Books-style jump navigation — Following links, citations,
footnotes, TOC chapters, or bookmarks now features location undo/redo controls
(<Undo2 /> / <Redo2 />) directly in the top titlebar when controls are
revealed, along with Alt+Left / Alt+Right keyboard shortcuts. The reading
viewport remains 100% clean and distraction-free with zero floating badges.
Fixed
Centralized back navigation & mobile gestures — Fixed the Android hardware
and gesture back button navigation via a centralized LIFO handler stack.
Back actions cleanly dismiss open modals and overlays, step back through
reading jumps, and exit back to the library or OS at the root.
Reader Titlebar Back Button — Clicking the top-left back button in the
reader titlebar now directly flushes progress and returns to the Library
instead of stepping backward through previous page turns.
Desktop blank page on TOC / menu navigation — Fixed an issue in the Foliate
paginator runtime where navigating to a chapter from the Table of Contents or
menu on desktop landed on a blank padding page (page 0), requiring a manual page
turn before text rendered. Paged navigation now anchors directly to content
page $\ge 1$.
Shelves responsive grid alignment — Synchronized Shelves and Shelf Detail
column calculations and CSS responsive grid breakpoints with the Library page
(2xl:grid-cols-8, xl:grid-cols-7, lg:grid-cols-5, md:grid-cols-4, sm:grid-cols-3, grid-cols-2), unifying view mode preferences and fixing
grid collapsing to 2 columns on search.
Startup diagnostics & logging — Added explicit startup lifecycle
breadcrumbs and structured file logging targets to aid troubleshooting early exits.
Yearly Book Goal undercounted — The yearly goal showed far fewer books
than were actually completed because the counter was only incremented on the
reader's auto-completion path; books marked "Finish" manually (library
context menu, batch bar, shelves) or completed earlier/synced-in were never
counted. The yearly count is now derived from the library itself (books with
a completedAt in the current year), so it is always accurate and can't
drift. Applied to the Statistics "Yearly Book Goal" bar, the page subtext,
and the Share Stats card.
Metadata edits did not sync — After editing a book's info, the changes
did not propagate to devices that already had the book. The peer merge kept
its own (old) values for description, publisher, language, ISBN, published
date, and category (match.X || inc.X), and title/author only adopted
longer values. The merge now adopts the incoming metadata, so edits made
after an initial sync reach other devices.
Cover edits did not sync — Changing or removing a cover showed only on
the editing device. data: cover paths were stripped from the sync payload
(and coverBlobHash was never used to transfer the bytes), so peers kept
the old cover. Covers (already downsampled to ≤200×300 webp) are now
serialized into the book payload, and the merge adopts an incoming data:
cover, so cover changes propagate.
Changed
Settings "Current Progress" removed — The Yearly Book Goal progress bar
in Settings duplicated the Statistics page, so it was removed to avoid
confusion.
Settings storage now shows only downloaded books — The Books row in
Data & Storage previously summed fileSize over the whole synced library
(including books synced from another device whose files aren't stored
locally) and showed the total book count. It now shows only the books
actually downloaded to the device and their on-disk size, with a note for
any sync-only books that aren't downloaded yet. The Library page continues
to show the total library count.
Statistics "Books Completed" no longer shows a fake target — The bar
previously implied a goal by rendering 26 / 31 where the /31 was just
"completed + 5", not a real goal. It now renders as a plain count.