Skip to content

Kobo Sync

Kobo sync starts as a device pairing, but the useful part is what happens after the first sync. BookOrbit becomes the account endpoint your Kobo talks to: it offers the books you chose, serves covers and downloads, accepts Kobo reading state, and can feed newer BookOrbit or KOReader progress back to the device.

Use Kobo sync when you want a real Kobo library fed from BookOrbit, with optional three-way progress and highlight movement between Kobo, BookOrbit, and KOReader.

Kobo Sync settings page showing the add-device form and a registered Kobo device

A user with kobo_sync opens Settings > Kobo, adds a device, and gives it a friendly name. BookOrbit creates a private sync URL for that device:

https://books.example.com/api/v1/kobo/{deviceToken}

Kobo does not provide a screen for entering a custom sync server. Set the URL by editing the device configuration over USB.

  1. Keep the sync URL visible or copy it somewhere private. It is shown only when the BookOrbit device entry is created.

  2. Connect the Kobo to a computer with a USB data cable and choose Connect on the Kobo if it asks.

  3. Open .kobo/Kobo/Kobo eReader.conf on the Kobo storage. The .kobo folder is hidden on macOS and Linux, so enable hidden-file viewing if necessary.

  4. In the [OneStoreServices] section, replace the existing api_endpoint value with the complete BookOrbit sync URL. Do not add a trailing path, quote marks, or a second api_endpoint line.

    [OneStoreServices]
    api_endpoint=https://books.example.com/api/v1/kobo/{deviceToken}
  5. Save the file, safely eject the Kobo from the computer, and disconnect the cable. Connect the Kobo to Wi-Fi and start a sync from the device.

On its next sync, the Kobo sends its native Kobo Sync requests to BookOrbit. The device token in api_endpoint identifies the BookOrbit user and paired device, so a Kobo username and password are not used for this connection.

Changing this setting does not remove the Kobo account stored on the device. BookOrbit handles the sync requests for its paired books and forwards Kobo API requests it does not handle to Kobo’s store service.

When BookOrbit is behind a reverse proxy, the Kobo connects to the public address in api_endpoint, but BookOrbit must also learn that same public host, protocol, and port. It uses that information to return cover, metadata, download, and sync URLs that the Kobo can reach.

Set APP_URL to the public HTTPS address used by the Kobo. Then configure the proxy to pass the forwarded headers below with every request. This example is the contents of an Nginx location block; keep your normal TLS and proxy_pass settings around it.

location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}

If TLS terminates before this Nginx instance or the public port differs from Nginx’s listening port, set X-Forwarded-Proto and X-Forwarded-Port to the public values instead. For example, a Kobo reaching https://books.example.com must receive URLs with https and port 443, even if BookOrbit itself listens on port 3000.

Kobo sync requests can carry large headers. If Nginx reports a request-header error during sync, add these directives in the applicable http or server block and reload Nginx:

proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
large_client_header_buffers 8 32k;

For Caddy, Traefik, or another proxy, use the equivalent forwarded-host, forwarded-protocol, and forwarded-port settings. The public URL entered in api_endpoint, the APP_URL value, and the URLs generated by the proxy must all describe the same externally reachable address.

ActionEffect
Add deviceCreates a device token and shows the one-time sync URL.
RenameChanges the label in BookOrbit. It does not change the Kobo device.
RevokeDeletes the token. That Kobo cannot sync again until it is paired with a new device entry.
Last syncUpdates when the device contacts BookOrbit.
PermissionAccess
kobo_syncOpen Kobo settings, manage paired devices, update sync preferences, and allow device-token sync requests.

Devices and settings are scoped to the BookOrbit user. If the user is disabled or loses kobo_sync, existing Kobo tokens stop working.

Kobo sync is driven by collections. Add books to a collection, turn on Sync to Kobo for that collection, then run a sync on the device. BookOrbit sends the eligible books and also sends the synced collections as Kobo tags, so your shelves stay grouped on the device.

A book is eligible only when all of these are true:

  • The user has access to the book’s library.
  • The book is present.
  • The user’s content filters do not exclude it.
  • The book is in at least one collection with Sync to Kobo enabled.
  • The book’s primary file is EPUB.

If a book has an EPUB file but a different primary file, Kobo sync will skip it. Set the EPUB as the primary file before expecting it on the device.

BookOrbit keeps a per-user library snapshot so the Kobo receives deltas instead of the whole library every time.

Change in BookOrbitWhat Kobo receives on the next sync
New eligible bookA new entitlement with metadata, cover, download URL, and reading state.
File or delivery setting changesA new download is offered for the book.
Title, author, series, cover, or metadata changesUpdated Kobo product metadata.
Book leaves all synced collectionsA removal from the Kobo library.
Synced collection membership changesUpdated Kobo tag membership.

Sync responses are paged, so a large change set may take several device sync passes in the same Kobo sync operation.

Removing a book on the Kobo does not delete it from BookOrbit. If the book still belongs to a synced collection, BookOrbit can offer it again on a later sync.

Kobo Sync preferences with progress sync, highlight sync, KEPUB conversion, and thresholds

Preferences apply to the current BookOrbit user and must be saved before they change device behavior.

SettingBehavior
Two-way progress syncLets Kobo progress update BookOrbit’s shared reader position, and lets newer BookOrbit or KOReader progress update the Kobo bookmark. Kobo reading state and status thresholds are still stored when this is off. Precise restore requires KEPUB delivery.
Sync BookOrbit highlights to KoboSends BookOrbit and KOReader highlights to Kobo when they can be placed in the KEPUB. Kobo highlights still import into BookOrbit when this is off.
Convert to KEPUBServes eligible EPUBs as KEPUB downloads. This is on by default and is forced on when two-way progress sync or BookOrbit-to-Kobo highlight sync is enabled.
Force hyphenationRegenerates KEPUBs with kepubify hyphenation enabled.
Mark as ReadingKobo progress at or above this percentage can move the BookOrbit book status to Reading.
Mark as FinishedKobo progress at or above this percentage can move the BookOrbit book status to Finished.
KEPUB conversion limitEPUBs above this size are sent as regular EPUBs, which prevents BookOrbit from sending precise Kobo restore positions or outbound highlights for those files.

The reading threshold must be lower than the finished threshold. These thresholds control library status only; they do not decide whether Kobo reading state is stored.

BookOrbit uses KEPUB as the bridge format for Kobo-specific positions. When conversion is enabled and the EPUB is under the configured size limit, the first Kobo download creates a cached .kepub.epub using kepubify. Later downloads reuse the cache until the source file identity or hyphenation setting changes.

If conversion fails, BookOrbit falls back to the original EPUB so the book can still download. That fallback is readable on Kobo, but precise BookOrbit-to-Kobo progress restore and BookOrbit-to-Kobo highlights depend on the KEPUB path.

When you enable progress sync, highlight sync, hyphenation, or change the KEPUB size limit, BookOrbit marks affected books for re-delivery. On the next Kobo sync, the device may offer those books again as downloads. If Kobo keeps opening an older EPUB copy, remove the old copy from the device and download the BookOrbit KEPUB.

With Two-way progress sync enabled, BookOrbit connects the Kobo reader to the same progress record used by the web reader and KOReader.

DirectionBehavior
Kobo to BookOrbitKobo reading state is stored. If two-way progress sync is enabled and the bookmark includes a KoboSpan location, BookOrbit converts it to the canonical web-reader and KOReader position when a matching KEPUB context is available.
BookOrbit to KoboNewer web-reader progress can be converted back into a KoboSpan bookmark when the Kobo asks for reading state.
KOReader to KoboKOReader progress lands in BookOrbit first. If Kobo two-way progress sync is enabled, that progress can advance the Kobo bookmark on the next Kobo sync.
Status updatesKobo progress can update the BookOrbit book status using the Reading and Finished thresholds.

That is the powerful part of the feature: Kobo, KOReader, and the BookOrbit web reader do not have to be separate progress islands. Read on the Kobo, sync, and BookOrbit can move KOReader forward later. Read in KOReader, sync, then let Kobo pick up the newer position during its next sync. BookOrbit keeps newer state from being overwritten by older device state, and KEPUB delivery is what makes the Kobo side precise instead of percent-only.

Kobo highlight import is accepted for synced books. Highlights and notes made on the Kobo are written into BookOrbit annotations, with Kobo positions converted into BookOrbit and KOReader-friendly positions when the KEPUB context is available.

The Sync BookOrbit highlights to Kobo switch controls the opposite direction. When it is on, highlights made in BookOrbit or KOReader can be offered to Kobo. When it is off, BookOrbit still imports Kobo highlights, and annotations already linked to Kobo can continue syncing edits and deletes instead of becoming duplicates.

For outbound highlights, the book on the Kobo needs to be the KEPUB downloaded from BookOrbit. If the device is reading a regular EPUB, a manually copied file, or a file above the conversion limit, BookOrbit may not be able to place the highlight back on Kobo.

Kobo sends more than bookmarks. BookOrbit ingests Kobo analytics events for synced books:

Kobo eventBookOrbit result
Opening and leaving a bookCreates a reading session with duration, end progress, and progress delta when Kobo provides enough data.
Rating a bookUpdates the user’s BookOrbit rating. A zero-star Kobo rating clears the rating in BookOrbit.

Reading sessions use the active reading time Kobo reports. If Kobo reports idle time, BookOrbit subtracts it before saving the session.

Analytics are tied back to the synced EPUB-primary BookOrbit book. If a device event cannot be resolved to a BookOrbit-served book the user can access, BookOrbit skips that event instead of guessing.

Kobo Activity Log showing reading-position updates, library checks, highlights, and a book download

Open Settings > Kobo > Activity Log to inspect recent device activity. It records BookOrbit’s view of library checks, book downloads, reading-position updates, highlights received from Kobo, and highlights offered to Kobo.

Use Failures to show only unsuccessful operations. An entry includes the device, time, outcome, and, when available, the error class and message. Use Refresh after another device sync to reload the list. A successful library check with no updates means BookOrbit had no pending library changes for that device.

SymptomCheck
Kobo still syncs with Kobo instead of BookOrbitConnect it over USB and confirm that .kobo/Kobo/Kobo eReader.conf, in [OneStoreServices], has exactly one api_endpoint line containing the BookOrbit sync URL. Save and safely eject the device before syncing again.
The Kobo cannot reach BookOrbitConfirm the full sync URL includes /api/v1/kobo/{deviceToken} and is reachable from the Kobo’s Wi-Fi network. localhost and 127.0.0.1 point to the Kobo itself, not the BookOrbit server.
The sync URL was lostRevoke the device and add it again. BookOrbit intentionally shows the token once.
No books appearConfirm the user has kobo_sync, the books are in a Sync to Kobo collection, the books are present, content filters allow them, and the primary file is EPUB.
A shelf is missing or incompleteConfirm that collection has Sync to Kobo enabled and contains eligible EPUB-primary books.
Deleted books keep returningRemove the book from synced collections in BookOrbit, or disable Sync to Kobo for that collection. Deleting the local Kobo copy does not delete the BookOrbit book.
Kobo progress stores status but does not move reader positionEnable Two-way progress sync and make sure the book is delivered as KEPUB.
BookOrbit or KOReader progress does not reach KoboEnable Two-way progress sync, download the BookOrbit KEPUB on the Kobo, then run another Kobo sync.
Kobo highlights import but BookOrbit highlights do not appear on KoboEnable Sync BookOrbit highlights to Kobo and use the BookOrbit KEPUB copy of the book.
KEPUB conversion is skippedCheck the conversion limit. Files above the limit are served as regular EPUBs.
A changed KEPUB is not openingRemove the older EPUB or KEPUB copy from the Kobo and download the book again from the BookOrbit account.