Repository navigation
Release Highlights
- Vocabulary: You can now build a vocabulary list, mark words as Learning or Mastered for Word Lens hints, and sync with Anki
- Statistics: Added a reading statistics dashboard so you can see your reading habits at a glance
- Reading: Added Page Flip and paper curl page turns, a page preview while dragging the progress slider, a straight-line reading ruler, and keyboard-only text selection
- Styling: You can now ignore publisher fonts, make white image backgrounds transparent, and adjust dialogue highlighting
- Text-to-Speech: You can now preview voices, pick a default voice per language, and sync downloaded read-aloud audio across devices
- Library: You can now import pasted text and Word or RTF files, share collections as bundles, search for covers in the app
- Sync: Added Grimmory, Obsidian, and CrossPoint 2.0 highlight sync, a new view of where your reading data goes, and a switch for servers with self-signed certificates
- Dictionary: You can now resize the dictionary popup, customize AI context lookups, edit word hints, and choose your lookup app on Android
- PDF: Text is now sharper, especially on iOS and Android, with smoother pinch zoom, panning, and gapless horizontal scrolling
- More: The KOReader plugin can sign in with a QR code, iPhone Duo gets book mode on its inner display, and stylus annotation and sync are more reliable
What's Changed
Click to expand
- feat(library): show the full book or group title on hover by @chrox in #6785
- fix(reader): keep the footer bar off the horizontal scrollbar when zoomed by @chrox in #6786
- fix(sync): keep imported annotations through the next sync (#6762) by @chrox in #6787
- fix(reader): release closed reader views from the cached book document, closes #6710 by @chrox in #6788
- fix(tts): skip bare superscript note markers when reading aloud by @chrox in #6791
- chore(agent): maintenance loops with a Reply Desk, lessons and acceptance rules by @chrox in #6796
- fix(reader): let the battery percentage follow a custom footer text color by @chrox in #6798
- fix(layout): clip nowrapped lines along the line only, keeping footnote icons whole by @chrox in #6801
- fix(sync): push a highlight made right after a notes sync by @chrox in #6802
- chore: declare tsx for the worktree scripts and clean up merged worktrees in the triage loop by @chrox in #6807
- chore(deps): bump the github-actions group with 8 updates by @dependabot[bot] in #6812
- fix(deps): resolve open Dependabot alerts by @chrox in #6813
- fix(reader): highlight long and nested quoted dialogue by @chrox in #6814
- fix(layout): keep the indent on paragraphs with a footnote icon by @chrox in #6828
- fix(android): tighten the e-ink device identity whitelist by @k6G52m4Dz75W in #6833
- fix(i18n): improve Turkish translations and add missing keys by @AlBPanda in #6830
- fix(android): force light native chrome on e-ink devices by @k6G52m4Dz75W in #6799
- fix(bookshelves): list filter values only from books still in the library by @jadhavgaurav in #6835
- ci: guard the e-ink identity whitelist against Rust/Kotlin drift by @k6G52m4Dz75W in #6834
- fix(reader): leave a footnote marker out of a double-click or long-press word by @chrox in #6808
- fix(annotator): run quick actions on a selection made in the footnote popup by @chrox in #6809
- fix(koplugin): give the Readest Library menu KOReader's UI for CoverBrowser by @chrox in #6845
- fix(annotations): import ReadEra backups that split documents across docs_N.json by @chrox in #6846
- fix(tts): hold the view still while a note is being typed during Read Aloud by @chrox in #6849
- fix(tts): keep the sentence being read across the paragraph look-ahead by @chrox in #6860
- fix(reader): open external links with their query string by @chrox in #6861
- fix(reader): follow a link inside a table instead of zooming the table by @chrox in #6862
- fix(reader): don't make a table that fits scroll because of a link at its edge by @chrox in #6882
- fix(annotator): look up the next word in the footnote popup on desktop by @chrox in #6886
- fix(md): render $ and $$ math in Markdown books by @chrox in #6887
- fix(reader): break the page for page breaks in inline styles by @chrox in #6888
- fix(reader): keep book colors that only start like #000 by @chrox in #6883
- fix(reader): let a book's own hover style underline its links by @chrox in #6884
- fix(reader): show the toolbar on a center tap in a scrolled comic by @chrox in #6885
- fix(tts): keep a note's focus when a navigation ends during Read Aloud by @chrox in #6889
- fix(desktop): drag the window from an unfocused title-bar search field by @chrox in #6893
- fix(epub): bound native zip entry reads during import by @chrox in #6817
- fix(api): validate DeepL and AI gateway request limits by @chrox in #6818
- chore(agent): lessons from 2026-10-14 to 10-15 by @chrox in #6842
- fix(reader): normalize section media types before sanitizing by @chrox in #6819
- fix(library): park a finished book as unread when an updated build is re-keyed by @k6G52m4Dz75W in #6871
- fix(reader): keep the chosen sidebar tab while Read Aloud plays by @chrox in #6847
- fix(reader): sanitize book markup rendered in the app window by @chrox in #6815
- fix(reader): don't fail opening a book whose section is still loading by @chrox in #6903
- fix(kosync): send and read FB2 positions in crengine's FictionBook form by @chrox in #6905
- feat(sync): per-server switch for self-signed certificates by @chrox in #6822
- refactor(sync): share the note merge rule between Readest Cloud and file sync by @chrox in #6843
- fix(sync): verify a redirect off a self-signed server's origin by @chrox in #6931
- fix(tts): support Xiaomi MiMo chat-completions speech synthesis by @izengyx in #6863
- fix(tts): accept a pasted speech endpoint as a custom TTS base URL by @chrox in #6906
- fix(reader): drive the percent readout from the continuous reading fraction by @k6G52m4Dz75W in #6876
- fix(nix): stabilize the dev shell and share Linux runtime dependencies by @Kasifrasi in #6851
- fix(storage): check the quota after reserving the row and keep clients off files writes by @chrox in #6820
- fix(translate): keep long sentences whole for Yandex and retry rate-limited chunks by @Columpio in #6919
- fix(reader): limit pdf zoom in preview to MAX_ZOOM_LEVEL by @jelly-afk in #6904
- fix(tts): prepare the next paragraphs' first sentence while one plays by @smist37 in #6910
- fix(eink): master scrim switch for capture-blocking overlays by @k6G52m4Dz75W in #6922
- fix(proxy): normalize hostnames and validate resolved addresses by @chrox in #6821
- fix(opds): drop decoded-body headers from proxied error responses by @chrox in #6942
- fix(opds): vary cached proxy feeds on the Authorization header by @chrox in #6946
- fix(metadata): reject impossible publication dates by @kelvinalfaro in #6937
- fix(reader): pinch a PDF spread without jumping sideways on release by @chrox in #6943
- fix(reader): show the every-occurrence toggle's state on e-ink by @chrox in #6948
- fix(hardcover): preserve legacy mappings when migration writes fail by @kelvinalfaro in #6938
- fix(reader): keep word-final apostrophes inside single-quoted dialogue by @chrox in #6950
- fix(reader): detect the language of Markdown and HTML books with none declared by @chrox in #6952
- fix(reader): keep the bars hidden when the window gives focus back by @chrox in #6954
- fix(tts): read PDF words across line breaks, and hyphenated words whole by @chrox in #6955
- fix(sync): say when the device clock keeps changes from syncing by @chrox in #6956
- fix(kosync): send and read MOBI positions in crengine's HTML form by @chrox in #6951
- fix(translate): leave ruby readings out of the text sent to the translator by @chrox in #6953
- fix(pdf): keep PDF text sharp at fractional display scales by @chrox in #6949
- fix(reader): keep word-final apostrophes before a dash inside single-quoted dialogue by @chrox in #6957
- fix(tts): read a PDF aloud in the language of its page by @Armone0 in #6944
- fix(reader): dismiss the selection toolbar on a click beside the text by @chrox in #6961
- fix(reader): keep the mouse Back button in the book when it's released off the page by @chrox in #6963
- fix(pdf): don't select text while a drag pans the page by @chrox in #6962
- fix(reader): add touch-accessible web fullscreen by @kelvinalfaro in #6964
- fix(reader): use the correct form of 2 in Chinese footer numbers by @RaphaelFakhri in #6966
- fix(reader): pinch a PDF spread with one finger on each page by @chrox in #6968
- fix(reader): keep the tabular-nums utility effective below Chromium 119 by @k6G52m4Dz75W in #6970
- fix(reader): give the remaining-info readout tabular-nums like its siblings by @k6G52m4Dz75W in #6971
- fix(android): keep the reading position when the screen wakes by @chrox in #6972
- fix(library): wrap the select-mode action bar instead of clipping it by @chrox in #6973
- fix(library): keep the title bar draggable in select mode by @chrox in #6978
- fix(reader): turn a fixed-layout page by a drag across the page, not the cell by @chrox in #6983
- chore(deps): bump the github-actions group with 6 updates by @dependabot[bot] in #6981
- fix(ios): play narration and TTS through the native player on iPad by @chrox in #6979
- fix(reader): hide the bars when the pointer crosses their edge strip into the book by @chrox in #7005
- feat(library): add .rbooks collection bundle export and import by @Armone0 in #6945
- fix(reader): show selection toolbar after off-text mouse release by @kelvinalfaro in #6988
- fix(import): name the files a mixed drag-drop skips by @k6G52m4Dz75W in #6991
- fix(reader): dismiss footnote popup in Paragraph mode by @kelvinalfaro in #6996
- fix(reader): keep Russian prepositions with quoted words by @kelvinalfaro in #6998
- chore(deps): bump webpki chain for the emSign/eMudhra intermediate CA distrust by @k6G52m4Dz75W in #7002
- fix(tts): play stored narration audio in place instead of copying it by @chrox in #7004
- fix(deps): resolve open Dependabot alerts by @chrox in #7007
- fix(import): map a ZIP with no book inside to "format not supported" by @kelvinalfaro in #6997
- chore(deps): bump the dompurify override floor to 3.4.17 by @k6G52m4Dz75W in #7003
- fix(android): play stored narration audio in place from the book file by @chrox in #7010
- fix(handwriting): keep undo history and new strokes when a drawing syncs by @chrox in #7014
- fix(pdf): keep a pan going past the page edge and turning at the end by @chrox in #7012
- feat(stats): add reading statistics dashboard by @realdanvanth in #6986
- fix(docker): bump node base image to 24.22.1 for the 2026-10 Node security releases by @k6G52m4Dz75W in #7016
- fix(reader): keep the header with the pointer on the top edge of a maximized window by @chrox in #7017
- fix(ios): play stored narration audio in place from the book file by @chrox in #7019
- fix(koplugin): connect over IPv4 in forked sync workers on macOS by @chrox in #7021
- Import pasted text into the library by @kelvinalfaro in #6992
- feat(notion): colour highlight quotes and send notes as callouts by @chrox in #7029
- fix(rsvp): keep Bengali vowel signs and conjuncts with the focus letter by @chrox in #7028
- fix(handwriting): re-measure the page after a push page turn by @chrox in #7030
- fix(deps): bump next to 16.4.2 for the open Dependabot alerts by @chrox in #7032
- fix(annotator,notion): keep a highlight's colour on Annotate; Notion note template; working sync links by @chrox in #7031
- fix(reader): fit cover image to page in paginated mode and preserve aspect ratio by @Armone0 in #7027
- ci(android-e2e): retry the emulator system image install by @chrox in #7036
- Add native Android paper curl and stabilize page turns by @sadikh94 in #7001
- fix(audiobook): stream paired local audio through the media proxy on desktop (#6848) by @chrox in #7037
- feat(ios): turn pages with the native paper curl by @chrox in #7046
- fix(tts): resume a mid-sentence pause in place from media keys by @chrox in #7069
- feat(tts): keep the chosen sleep timer for the rest of the app launch by @chrox in #7070
- fix(sync): keep a position read just before closing the book by @chrox in #7071
- fix(layout): keep a percentage-width image next to text at its size by @chrox in #7072
- feat(library): accept docx and rtf imports via silent EPUB conversion by @k6G52m4Dz75W in #7050
- fix(reader): jump to a typed page when the field loses focus by @chrox in #7080
- fix(storage): delete a book file uploaded under its hash name by @chrox in #7063
- feat(library): Manage Cache on desktop by @chrox in #7066
- fix(build): turn off the Turbopack build cache that Next 16.4 enables by @chrox in #7082
- fix(dictionaries): create the database folder before opening it by @chrox in #7076
- fix(tts): step back into the previous page at its last sentence by @chrox in #7077
- fix(library): sort a subgroup by its own name inside a parent group by @chrox in #7081
- fix(annotator): keep a dragged selection handle on its line by @Armone0 in #7053
- fix(tts): open the Workers Edge TTS socket over cloudflare:sockets by @smist37 in #7056
- fix(library): open a .zip of images as a comic by @chrox in #7078
- feat(reader): calibrate the page-number readout with real screen counts by @k6G52m4Dz75W in #7060
- fix(reader): keep native curl pages when a turn redraws unchanged highlights by @chrox in #7112
- feat(reader): preview the page under the progress slider while dragging by @chrox in #7110
- fix(handwriting): keep the pen fine on wide desktop pages by @chrox in #7109
- fix(reader): keep the screen awake after the window is refocused on Linux by @chrox in #7108
- fix(novel): recognize 第N頁 and traditional chapter units in chapter titles by @chrox in #7107
- fix(reader): keep a note's own styling in the footnote popup by @chrox in #7111
- fix(reader): compare curl overlay markup in paint order and check new overlays by @chrox in #7114
- fix(reader): keep native curl pages when progress sync starts by @chrox in #7115
- fix(library): retry a synced cover whose download failed by @chrox in #7116
- fix(reader): never open the media viewer for note-reference markers or chapter-length tables by @doublex640 in #7083
- fix(build): make pnpm preview serve pages and rewrites again by @chrox in #7141
- fix(reader): stamp sections loaded after a theme switch with the live theme by @chrox in #7121
- fix(reader): show the page's own rendering in the image viewer by @doublex640 in #7096
- fix(reader): give volume keys back when Use Volume Keys is turned off by @chrox in #7140
- ci: pin the Playwright jobs to ubuntu-24.04 by @chrox in #7151
- chore(deps): bump the github-actions group with 7 updates by @dependabot[bot] in #7149
- feat(reader): Page Flip page-turn style on Android, iOS and desktop by @chrox in #7160
- fix(crosspoint): link a reader's copy to an Audiobookshelf ebook (#7086) by @ts-eva in #7087
- test(reader): unmount each image-gallery test's viewer by @chrox in #7163
- fix(kosync): sync an Audiobookshelf ebook under its file's id (#7088) by @chrox in #7161
- fix(hardcover): reuse journal entries already on Hardcover instead of duplicating them by @chrox in #7162
- fix(hardcover): sign in through Readest's own Hardcover OAuth app by @chrox in #7165
- fix(reader): stop translation DOM work after the hook unmounts by @chrox in #7167
- feat(library): page count badge on covers as a per-bookshelf option (#6909) by @Armone0 in #7142
- feat(ios): book mode on iPhone Duo's inner display by @wemcdonald in #7137
- feat(tts): let custom TTS services set their audio format and voices by @sunnymodi21 in #7155
- fix(annotations): save exports to storage on Android and clear the bottom inset by @chrox in #7169
- fix(ios): keep the orientation lock when the scene is resizable by @wemcdonald in #7146
- fix(tts): upload existing downloaded packs when sync is on, skip listening cache by @chrox in #7176
- fix(nix): add missing build/runtime dependency by @dastarruer in #7170
- fix(kosync): read xpointers with explicit [1] steps from newer crengine by @bercedev in #7172
- test(kosync): check both xpointer forms against crengine at two DOM versions by @chrox in #7178
- feat(reader): swipe past a zoomed PDF page's edge to turn, like Photos by @sunnymodi21 in #7175
- fix(sync): stop opening a "Sync failed" dialog for file-sync errors by @chrox in #7183
- fix(ui): stop the plan cards clipping on iOS 16, closes #7181 by @chrox in #7184
- fix(tts): stop caching, packing and syncing the same sentence twice by @chrox in #7187
- fix(desktop): reopen the in-app browser window at its last size and position by @NeilN1 in #7185
- fix(tts): give up on a silent Edge connection after 30s on every transport by @chrox in #7188
- feat(sync): sync downloaded read-aloud audio through Readest Cloud and every file-sync backend by @chrox in #7177
- fix(android): keep the page-turn cover below the keyboard, closes #7171 by @chrox in #7191
- feat(sync): record each book's synced read-aloud packs in its config by @chrox in #7190
- feat(koplugin): sign in with a QR code; fix the logged-out label and global logout (#7186) by @chrox in #7192
- fix(sync): list every page of a book's cloud files for synced data by @chrox in #7199
- fix(reader): disable separate cover in scroll layouts by @kelvinalfaro in #7195
- fix(reader): hide dismissed footer immediately by @kelvinalfaro in #7197
- fix(reader): keep the screen awake while speed reading plays by @chrox in #7200
- fix(reader): wrap long text in scroll mode by @kelvinalfaro in #7196
- ci: run the web browser tests in their own job by @chrox in #7202
- chore(agent): update agent memories by @chrox in #7203
- fix(android): continue recorded narration while screen locked by @kelvinalfaro in #7194
- feat(settings): search the font lists in Font settings by @chrox in #7204
- fix(library): keep two FB2 documents that share a title and author (#7150) by @chrox in #7205
- fix(tts): keep the page when Read Aloud reads text the book hides by @chrox in #7207
- feat(reader): improve stylus annotations and finger navigation by @chrox in #7213
- fix(koplugin): wait for Wi-Fi before pulling on wake by @chrox in #7215
- feat(reader): choose tap or long press to open the image viewer per book by @chrox in #7208
- fix(library): add stable colored placeholder covers by @chrox in #7222
- fix(opds): allow trusted private catalogs at runtime by @chrox in #7225
- fix(tts): start Storyteller narration at the current text by @chrox in #7223
- fix(windows): make Explorer thumbnails opt-in by @chrox in #7220
- fix(android): open linked images on touch hold by @chrox in #7221
- fix(tts): publish downloaded audio records without a page turn by @chrox in #7224
- fix(opds): match equivalent trusted IPv6 literals by @chrox in #7226
- fix(reader): navigate paragraphs with volume buttons by @chrox in #7227
- fix(reader): allow gapless horizontal PDF scrolling by @chrox in #7232
- fix(tts): keep skipped utterances from aborting replacement speech by @chrox in #7233
- fix(tts): show a custom TTS voice's listed name instead of its id by @onedge in #7229
- test(novel): make failed image placeholders deterministic by @chrox in #7236
- fix(sync): ignore stale duplicate reading positions by @chrox in #7231
- fix(reader): highlight continued multi-paragraph dialogue by @chrox in #7238
- test: use four workers for unit tests by @chrox in #7242
- fix(tts): play local AAC narration natively on Linux by @chrox in #7240
- fix(ios): capture readable shared pages when loading stalls by @chrox in #7241
- feat(dictionary): customize context prompts and response limits by @chrox in #7244
- fix(security): remediate Dependabot dependency alerts by @chrox in #7248
- fix(library): preserve original filenames and use PDF filename titles by @chrox in #7237
- fix(reader): release volume keys while reader controls are open by @chrox in #7254
- fix(reader): highlight long punctuated single-quoted dialogue by @chrox in #7255
- feat(reader): add dialogue highlighting weight options by @chrox in #7256
- feat(kosync): support original filename checksums by @chrox in #7253
- feat(library): add searchable history dropdown by @chrox in #7261
- fix(account): require explicit confirmation before deleting account by @chrox in #7258
- fix(ios): decode imported file URL basenames once by @chrox in #7263
- test(reader): handle cancelled paginator previews in browser tests by @chrox in #7267
- feat(ios): add fullscreen system dictionary setting by @chrox in #7269
- fix(library): ignore leading English articles in title sorting by @chrox in #7271
- feat(reader): make white image backgrounds transparent by @chrox in #7270
- feat(reader): show background textures in footnote popups by @chrox in #7268
- feat(android): choose the system dictionary lookup app (#4937) by @chrox in #7272
- perf(web): run the web Worker near Supabase with Smart Placement by @chrox in #7273
- perf(api): stop hot sync routes loading the TTS engine and DOMPurify by @chrox in #7274
- feat(translator): add a Thinking setting to custom LLM translators, fix translator field sync by @chrox in #7275
- fix(sync): sign bucket-root listings with a trailing slash by @gilgamesh-tkh in #7278
- fix(dictionary): stream context dictionary responses by @chrox in #7285
- fix(sync): support provider downloads and generic transfer history by @chrox in #7289
- feat(reader): add a straight-line reading ruler by @chrox in #7288
- feat(vocabulary): vocabulary builder and Learning/Mastered marks for Word Lens by @chrox in #7284
- feat(metadata): search for book covers in app by @chrox in #7290
- fix(koplugin): collect sync workers before KOReader exits by @chrox in #7293
- fix(reader): keep the sidebar button top-left on tablets, tidy the transparent-image row by @chrox in #7294
- chore(agent): update memories by @chrox in #7295
- fix(bookorbit): let the web proxy run on Cloudflare Workers by @chrox in #7296
- feat(reader): vim-style find to start and extend a selection from the keyboard by @you-gao in #7282
- fix(library): refresh external sources without a Readest login by @chrox in #7297
- fix(reader): use platform-specific spread defaults by @chrox in #7299
- perf(reader): subscribe the vim command line to the store fields it uses by @chrox in #7301
- feat(reader): ignore publisher font names by font category by @chrox in #7298
- fix(reader): draw PDF text at the screen's full resolution on iOS and Android by @chrox in #7300
- fix(reader): preserve publisher font lists and category fallbacks by @chrox in #7302
- fix(bookdrop): keep received file names inside the inbox by @chrox in #7304
- fix(auth): keep the sign-in callback URL out of logs by @chrox in #7305
- fix(annotator): line the note card up with its popup box by @chrox in #7310
- feat(annotator): draw a global annotation's copies as a dashed underline by @chrox in #7309
- fix(send): allow PATCH through CORS so the apps can approve a sender by @chrox in #7312
- fix(sync): sync a re-enabled or cleared custom TTS field to other devices by @BEMELON in #7307
- feat(tts): read aloud with Speech Dispatcher voices on Linux by @chrox in #7314
- feat(vocabulary): redesign the mobile header by @chrox in #7315
- feat(crosspoint): sync CrossPoint 2.0 clippings with Readest highlights by @chrox in #7317
- fix(annotator): clear a moved highlight's old anchors on the server too by @chrox in #7319
- fix(sync): give HTML chapter files their own sync identity by @chrox in #7321
- fix(reader): reach the last page when a book ends partway into a spread by @chrox in #7320
- feat(tts): preview voices and pick a default voice per language by @chrox in #7322
- feat(library): remove selected books from the device only by @chrox in #7324
- fix(sync): stop idle notes pushes and keep what a push leaves out by @chrox in #7326
- chore(deps): bump actions-rust-lang/setup-rust-toolchain from 2.0.0 to 2.0.1 in the github-actions group by @dependabot[bot] in #7331
- fix(kosync): follow a percentage-only position on PDFs and push 1-based pages by @chrox in #7334
- feat(vocabulary): sync with Anki on Android by @chrox in #7328
- feat(reader): vim-style find selects text in PDFs too by @chrox in #7333
- ci(codeql): use advanced setup and skip Rust analysis on PRs without Rust changes by @chrox in #7335
- fix(reader): shrink default list indent under Override Book Layout by @chrox in #7338
- chore(tts): shorten Readest Voice download windows to 16 sentences or 512 chars by @chrox in #7339
- fix(wordlens): hint a word that ends where an inline element starts or ends by @chrox in #7340
- feat(sync): add a Grimmory integration (#7337) by @chrox in #7341
- fix(tts): preview voices at the player's speed by @chrox in #7345
- fix(reader): keep native curl pages in step with the toolbars and panels by @chrox in #7343
- feat(reader): move menu options to Settings and add Vocabulary to the view menu by @chrox in #7348
- fix(sync): match books for Grimmory stats alone, and undo a failed connect by @chrox in #7347
- fix(tts): play Media Overlay clips whose text target is an image by @chrox in #7352
- feat(dictionary): resize the dictionary popup from a corner grip (#7344) by @chrox in #7354
- feat(integrations): sync highlights into an Obsidian vault on desktop and Android by @chrox in #7349
- fix(wordlens): hint Learning phrases of two or more words by @chrox in #7350
- fix(auth): send password sign-in through a Worker on readest.com by @chrox in #7355
- fix(dictionary): give the popup's resize grip a 32px hit area by @chrox in #7357
- test(dictionary): drag the resize grip from a hit-tested point outside the popup by @chrox in #7359
- feat(dictionary): edit a Learning word's hint in the dictionary popup by @chrox in #7356
- fix(wordlens): match phrases on token edges, retry after a rejected match by @chrox in #7358
- fix: reader search, e-ink paging, cache and koplugin delete from user reports by @chrox in #7360
- fix(reader): apply Open Images to every book and to tables by @chrox in #7363
- chore(agent): update agent memories by @chrox in #7365
- feat(integrations): show where reading data flows and what is working by @chrox in #7366
- fix(tts): stream staged narration audio so a long chapter can't kill the app on Android by @chrox in #7367
- release: version 0.12.20 by @chrox in #7368
New Contributors
- @AlBPanda made their first contribution in #6830
- @izengyx made their first contribution in #6863
- @Kasifrasi made their first contribution in #6851
- @jelly-afk made their first contribution in #6904
- @Armone0 made their first contribution in #6944
- @RaphaelFakhri made their first contribution in #6966
- @realdanvanth made their first contribution in #6986
- @sadikh94 made their first contribution in #7001
- @doublex640 made their first contribution in #7083
- @wemcdonald made their first contribution in #7137
- @sunnymodi21 made their first contribution in #7155
- @bercedev made their first contribution in #7172
- @NeilN1 made their first contribution in #7185
- @onedge made their first contribution in #7229
- @gilgamesh-tkh made their first contribution in #7278
- @you-gao made their first contribution in #7282
- @BEMELON made their first contribution in #7307
Full Changelog: v0.12.16...v0.12.20