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
The iOS app now works standalone — no server required. Import EPUBs straight into an on-device library and read them with progress and highlights stored locally. Connect a BeePub server later, or never; the app is now a full local-first reader on its own.
Two-way sync for local books. Device-local books link to server books by content digest (the same KOReader partial-md5 used for kosync) and merge reading progress and highlights in both directions — last-write-wins with tombstoned deletes, so edits and removals from either side converge. Deleting and re-uploading a book on the server heals the link automatically, and e-reader positions bridged through /kosync reach local iOS books too.
Built-in OPDS client. Add any OPDS 1.2 catalog — calibre-web, Project Gutenberg, another BeePub — with optional Basic auth. Browse, search, and paginate feeds, and download EPUBs directly into the local library with live progress; downloads auto-link to a connected server when the digests match.
External kosync client. In serverless mode the app can sync reading positions with any kosync server (e.g. sync.koreader.rocks): it pulls on open (with the same jump prompt and paragraph-level landing as the server bridge), pushes on close and backgrounding, and offers manual pull/push buttons plus an auto/manual toggle in the reader settings. When a BeePub server is connected, BeePub itself is your kosync server and the external settings lie dormant until you disconnect.
Setup notes
Zero migrations — upgrading is just pulling the new images and restarting.
On iOS, serverless mode starts from the "use without a server" option on the setup screen; local library, OPDS catalogs, and progress sync all live under Local Books.
Internal
Local books ride the BookSource/SyncBackend abstractions introduced in v0.6.0; the external kosync and OPDS transports use explicit CapacitorHttp calls only (the global fetch patch stays off).
The kosync wire client was validated against the canonical koreader-sync-server implementation (register/conflict/empty-record/round-trip semantics, including the vendored Accept header).