Skip to content

v3.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 13:32
· 225 commits to master since this release

3.4.0 (2026-10-27)

Features

  • landing: list KOReader progress sync and say it works offline (dca4f97)
  • landing: say oboku's reader syncs with KOReader too (edc9fa9)
  • web: open a book where another KOReader device left it (7689f7a)
  • web: push KOReader positions moved offline after a restart (4140f70)
  • web: take a newer KOReader position as the book's bookmark (0c207e6)
  • web: take KOReader progress sync out of debug mode (1047c09)

Bug Fixes

  • api: open a book's archive by its signature, not its content type (6219905)
  • api: open RAR files that Node reads into its Buffer pool (065d5c0)
  • landing: say how oboku's reader joins KOReader sync (cdb7873)
  • web: abort a fromAbortable run only while it is pending (7979df6)
  • web: check the KOReader position only for accounts that sync (3da493f)
  • web: explain and test why a sign-in sets the id before the reset (4799c2b)
  • web: forget plugin sessions when the account changes (2f58ba3)
  • web: forget the Google Drive token in its plugin's sign-out (471fc7f)
  • web: forget the sessions before a sign-in sets the next account (2231775)
  • web: guard plugin sign-outs and test what an account change forgets (2aa7d9f)
  • web: keep a bookmark that moves while the check writes (f3e177e)
  • web: keep a KOReader move until handled, under the profile that made it (43f1533)
  • web: keep authenticated queries to the account they rendered for (6b50349)
  • web: keep one waiting KOReader move per document (e02ec4b)
  • web: keep the retry policy out of the service worker's imports (3aaf2ce)
  • web: open at the check's bookmark, and stop waiting on a hung lookup (3972a5a)
  • web: point the KOReader sync server screen to progress sync (0d9c780)
  • web: reset the other tabs' session queries when the account changes (b8c67cf)
  • web: send no KOReader push once its pull has failed (40674e0)
  • web: tell other tabs about the active profile once it is stored (53edc94)

Code Refactoring

  • api: log missing archive covers, always remove the tmp file (3fc6cfa)
  • api: name the cover in the missing-file warning (57f8f78)
  • api: save archive covers through the prose-reader archive (3a983e1)
  • metadata: read book metadata in prose-reader's shapes (d975c4b)
  • web: build the app's reader in a module of its own (6575569)
  • web: define the KOReader position query with its key (ae607cb)
  • web: drop the restated half of the KOReader write's comment (15974dd)
  • web: forget account sessions where the account changes (12cf946)
  • web: get forgetAccountSessions from a hook (24b691c)
  • web: give the reader screen one state for opening a book (8b4f3a8)
  • web: hand useCreateReader the book to open (dde6ece)
  • web: handle other tabs' profile changes in an Effect Event (3265ffd)
  • web: keep the newer-position rule with the position query (ce34c24)
  • web: keep the position check's pull helper (47e3c6d)
  • web: move retryOnFailure next to the network helpers (97f991a)
  • web: move retryOnFailure next to the other RxJS operators (298b056)
  • web: move the KOReader position query to its own file (20c4ba8)
  • web: open at the server's answer instead of keeping it on the book (8eb566f)
  • web: read the book to open once the KOReader check is done (3c1b82f)
  • web: resolve the app's light or dark mode in one hook (eec8cd1)
  • web: retry KOReader pushes with retryOnFailure (372786f)
  • web: run a request that stops on unsubscribe with fromAbortable (8a28733)
  • web: run uploads through fromAbortable (d189a82)
  • web: share the slow-wait timer of the loading screens (dada95a)
  • web: take a newer KOReader position through a book patch (65f9963)

Chores

  • deps: upgrade metadata-fetcher to 30.3 (067f701)

Build System

  • couchdb: build the CouchDB image on 3.5.3 (ee157d7)

Continuous Integration

  • check that the built service worker registers (1ec5fbf)
  • run the service worker check before a release (7d8065a)

Documentation

  • shared: say where a bookmark only in KOReader's form comes from (ef03b42)

Tests

  • web: cover an account switch for a query not keyed by account (9c05fbb)
  • web: mock the app's reader as one module in useCreateReader's test (be06fac)
  • web: pin what the account guard skips and when it fetches again (beeacf3)