Skip to content

BeePub v0.7.0

Choose a tag to compare

@oalieno oalieno released this 12 Jul 08:30
389c1ad

Highlights

  • 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).