Release Highlights
- Text-to-Speech: Added Readest Voice premium read-aloud voices for Plus and Pro, you can now connect your own OpenAI-compatible voice service, and Edge voices work again
- Annotations: You can now handwrite and draw on your pages, and share passages as quote card images
- Library: Books now show their page count with a new Pages sort and filter that syncs across devices, and numbered titles sort in natural order
- Sync: Custom fonts download when you need them and can be removed from the cloud, custom theme edits now sync, and deleted books no longer come back
- Sync: KOReader progress sync and WebDAV sync are more reliable, and signing out only logs out the current device
- Reading: Very large or link-heavy chapters no longer freeze the reader, and fixed layout issues with headings, blockquotes, footnotes, and background textures
- Audiobooks: Audiobookshelf playback now works in the web app, chapters are detected more reliably, and you can pair audiobooks with books streamed from Audiobookshelf
- Linux: Fixed a freeze with two open windows, the main window reopens maximized, and Reveal in Folder works again
- PDF: You can hide page thumbnails in the PDF table of contents
- More: The share sheet opens again on iOS 16, with polish for the drawing tools, bottom sheets, and bookshelf header
What's Changed
- chore(android): link WebView APK downloads in the outdated-WebView dialog by @chrox in #6649
- chore(deps): bump DeterminateSystems/determinate-nix-action from 3.22.5 to 3.23.0 in the github-actions group by @dependabot[bot] in #6679
- ui: place the "Log out" item in the second sub menu by @5w5 in #6645
- fix(reader): stop link-heavy single-file sections from hanging by @chrox in #6678
- refactor(ai): drop write-only indexingStates map in ragService by @irontaek in #6687
- Use music-metadata for audiobook chapters by @Borewit in #6686
- feat(reader): render huge sections in chunks by @chrox in #6680
- fix(koreader): reliable progress sync with hardened auth and error handling by @ivanovsergey93 in #6684
- fix(linux): stop the CEF focus loop that froze two-window sessions by @chrox in #6691
- fix(bookorbit): stamp the chapter on synced notes and bookmarks (#6655) by @bianyukun1213 in #6658
- fix(reader): read section text when a non-CJK lang hides CJK content by @k6G52m4Dz75W in #6672
- fix(library): stamp deletes so the sync merge cannot undelete the book, closes #6663 by @itsmunzir in #6682
- fix(opds): keep the feed scroll position after opening a book by @jadhavgaurav in #6683
- fix(library): use natural sorting for numbered titles by @kelvinalfaro in #6693
- fix(nix): refresh pnpmDeps hash for music-metadata by @chrox in #6688
- fix(kosync): keep the server path when proxying KOSync requests by @chrox in #6698
- fix(build): keep music-metadata out of the web server bundle by @chrox in #6699
- fix(reader): offer Pair Audiobook for EPUBs streamed from Audiobookshelf (#6695) by @ts-eva in #6697
- feat(reader): share passages as quote card images by @chrox in #6701
- fix(send): poll the inbox every 5 minutes instead of every minute by @chrox in #6706
- feat(tts): Readest Voice, premium read-aloud voices for Plus and Pro by @chrox in #6720
- fix(tts): connect Edge TTS to the new api.msedgeservices.com endpoint by @chrox in #6722
- fix(tts): count queued Readest Voice downloads against the listening quota by @chrox in #6721
- Support handwriting annotation by @esmaeelE in #6674
- perf(api): verify access tokens locally with getClaims by @chrox in #6724
- chore(agent): update agent memories by @chrox in #6725
- fix(auth): limit explicit logout to the current session by @hulkbig in #6709
- chore(auth): point clients at the Supabase project URL by @chrox in #6729
- feat(tts): move Readest Voice into its own service by @chrox in #6732
- fix(tts): make Readest Voice downloads responsive and tell users about quota by @chrox in #6736
- fix(tts): Readest Voice downloads that resume and follow the voice, and read aloud that survives a slow engine by @chrox in #6738
- fix(tts): resume queued downloads with the session's voice by @chrox in #6739
- fix(sync): decode XML entities in WebDAV PROPFIND hrefs by @smist37 in #6741
- fix(reader): keep the CJK widow/orphan lift alive under Use Book Layout by @k6G52m4Dz75W in #6711
- fix(rss): rebuild feed book TOC on every open instead of using the nav cache by @christi4nity in #6718
- fix(android): resolve Temp to the app cache so narration and file staging work on older Android by @ChristophWally in #6714
- fix(reader): honor justification overrides in footnote popups by @kelvinalfaro in #6708
- fix(audiobook): request Audiobookshelf audio with CORS on the web app (#6696) by @ts-eva in #6707
- docs(tts): drop the RunPod settings from the web env example by @chrox in #6744
- fix(library): retire re-keyed book hashes with a tombstone row (last import wins) by @k6G52m4Dz75W in #6703
- fix(tts): send Sec-MS-GEC v2 tokens to Edge TTS by @chrox in #6751
- feat(tts): custom OpenAI-compatible TTS services by @chrox in #6746
- fix(reader): suppress the webview context menu in the desktop app by @chrox in #6752
- fix(linux): make Reveal in Folder work again, closes #6660 by @chrox in #6754
- feat(reader): add a toggle to hide PDF page thumbnails in the TOC, closes #6650 by @chrox in #6756
- fix(linux): restore the maximized main window on launch, closes #6657 by @chrox in #6757
- fix(layout): give inline-only blockquotes the paragraph margin under Override Book Layout by @chrox in #6759
- fix(settings): reset the animation style to Push with Reset Behavior, closes #6753 by @chrox in #6760
- fix(tts): keep Read Aloud and its highlights intact after the sign-in detour by @chrox in #6758
- feat(sync): download synced custom fonts on demand, delete them from the cloud by @chrox in #6761
- fix(layout): let a more specific left-align beat a centered heading rule, closes #6723 by @chrox in #6763
- fix(metadata): allow 0 as a series index by @chrox in #6764
- fix(reader): keep the progress label in place while dragging the slider, closes #6646 by @chrox in #6766
- fix(style): keep Override Book Color working over a background texture, closes #6712 by @chrox in #6765
- fix(reader): measure image tap zones on its column in a two-page spread, closes #6745 by @chrox in #6769
- feat(calibre): add multi-language support by @GOSENGWONG in #6768
- fix(reader): keep the image long-press menu working on Android PDF pages by @chrox in #6771
- fix(ios): open the share sheet on iOS 16 for files with spaces or non-ASCII names, closes #6719 by @chrox in #6770
- build(android): ship per-ABI APKs (arm64, armv7, legacy) instead of universal by @chrox in #6772
- feat(library): count pages at import, add Pages sort and filter, closes #6662 by @chrox in #6774
- feat(sync): sync the import-time page count across devices by @chrox in #6775
- chore(agent): update agent memories by @chrox in #6776
- fix(sync): detect in-place custom theme changes by @anirudhqwerty in #6777
- fix: iOS reader polish for drawing dock, short sheets, bookshelf header and read aloud by @chrox in #6778
- release: version 0.12.16 by @chrox in #6779
New Contributors
- @5w5 made their first contribution in #6645
- @irontaek made their first contribution in #6687
- @Borewit made their first contribution in #6686
- @ivanovsergey93 made their first contribution in #6684
- @bianyukun1213 made their first contribution in #6658
- @ts-eva made their first contribution in #6697
- @esmaeelE made their first contribution in #6674
- @smist37 made their first contribution in #6741
- @christi4nity made their first contribution in #6718
- @ChristophWally made their first contribution in #6714
- @GOSENGWONG made their first contribution in #6768
- @anirudhqwerty made their first contribution in #6777
Full Changelog: v0.12.12...v0.12.16