Jailbreaking a Kindle Paperwhite, installing KOReader and syncing reading progress with Readest on iPhone, without Amazon.
The goal
I wanted to read an EPUB on my Kindle and then carry on listening to it on my iPhone with text-to-speech, picking up from the same place, without relying on Amazon.
A stock Kindle only syncs positions through Amazon's cloud. So the setup is:
- KOReader on a jailbroken Kindle, which reads EPUB natively
- Readest on the iPhone, which reads EPUB, has built-in text-to-speech and supports KOReader sync
- A KOReader sync server that both apps use to share reading positions
- Calibre to manage the library and send the same EPUB to both devices
Checking the model and firmware
Turn on Airplane Mode straight away. If the Kindle connects to Wi-Fi it can install a firmware update in the background, which could close the jailbreak window.
Then find the exact model and firmware version
Settings → Device Options → Device Info
Mine is a Paperwhite Signature Edition (11th gen, also known as PW5) on firmware 5.19.2.
Jailbreak methods are published on kindlemodding.org and each one covers a specific range of firmware versions. When I did this the options were
- SpiderCat covers firmware
5.16.3–5.19.5and is the easiest method - Véra covers firmware up to
5.19.6and is a good backup - Older methods like WinterBreak and Sanctuary cover earlier firmware
Note: Amazon patches these exploits regularly, so check the current status for your firmware before starting.
Preventing automatic updates
SpiderCat needs Wi-Fi to run, so the Kindle needs to be stopped from downloading an update while it's online. The way to do this is to fill the storage until there is no room for an update.
The prevent auto-update guide has a script for this, but it doesn't support 11th generation and newer Kindles. Instead the filler files have to be copied over manually until only 50–90 MB is free.
On my Mac the Kindle showed up as a drive, so I could copy files to it directly and eject it afterwards.
First check the root of the Kindle for any file named update…bin or update.bin.tmp.partial and delete it, as that would be an update which has already started downloading.
Download the filler files that match your Kindle's storage (mine is 32 GB, showing 29.32 GB capacity) and unzip them.
Note: the extracted files take up about as much space as the Kindle's storage, so make sure the Mac has enough free disk space to unzip them.
Create a fill_disk folder on the Kindle and copy the large files into it, then add the smaller ones a few at a time until you reach 50–90 MB free.
Note: copying 28 GB to the Kindle is slow and can't be sped up by duplicating files on the Kindle itself. Drag all the large files in one go and leave it running.
Jailbreaking with SpiderCat
Follow the SpiderCat guide exactly, as it's kept up to date. The general steps are
- Download the SpiderCat file and copy it into the Kindle's
documentsfolder - Eject the Kindle and turn off Airplane Mode so Wi-Fi is on
- Open the SpiderCat book from the library, it may show a blank page for a while
- Keep Wi-Fi on and wait until it says the final step is complete
SpiderCat blocks updates once it's finished and also installs KPM (Kindle Package Manager). Once the jailbreak is done, delete the fill_disk folder to get the storage back.
If you need to restart the Kindle at any point, swipe down and go to All Settings → Device Options → Restart, or hold the power button until the power menu appears.
Installing KOReader
KOReader can be installed using the package manager, the "What's Next" pages on kindlemodding.org walk you through it.
KOReader then appears in the Kindle library, and books bought from Amazon still open in the normal Kindle reader. EPUBs, however, need to be opened in KOReader, as it's the only part that talks to the sync server.
A few settings that make it nicer to use day to day
Settings → Start with → Last fileopens straight to the book you were reading- The History view (the clock icon) lists recent books
Menu → Exitreturns to the normal Kindle interface
Note: the bottom menu (font, margins, line spacing etc.) only exists when a book is open. Tap slightly above the bottom edge in the middle, tapping the status bar itself just cycles what it shows.
Organising books with Calibre
KOReader reads EPUB, so there's no need to convert books to MOBI any more. Keeping the same EPUB on both devices is also what makes sync work reliably.
A separate books folder
Rather than using Amazon's documents folder I created a books folder at the root of the Kindle, then in KOReader's file browser long pressed it and chose Set as HOME folder.
Switching the file browser to the cover (Mosaic) display mode makes it feel more like a library.
Sending books wirelessly
Sending books from Calibre over Wi-Fi avoids copying over the cable.
In Calibre
Connect/share → Start wireless device connection
and under Configure this device
- Tick Enable connections at startup
- Tick Use fixed network port and keep
9090 - Untick Use sub-folders and set the save template to
{authors} - {title} ({id})
In KOReader
Tools → Calibre → Wireless settings → Inbox folder
set to the books folder, then connect with
Tools → Calibre → Connect
It should find Calibre automatically, if not enter the Mac's address and port 9090 in the wireless settings.
The format isn't set in Calibre's device dialog, KOReader tells Calibre which formats it accepts. When a book has an EPUB that's what gets sent, which you can confirm by checking the file extension in the books folder.
Then just use Send to device → Send to main memory as usual.
Adding books to Readest on iPhone
iPhones don't show up as a device in Calibre, so books can't be sent directly. The best option is Calibre's content server, which Readest can browse over OPDS.
In Calibre
Connect/share → Start Content server
and to have it always available
Preferences → Sharing over the net → Run server automatically when calibre starts
Then in Readest add an OPDS catalog with the address
http://Your-Mac-Name.local:8080/opds
Using the Mac's local hostname (found in System Settings → General → Sharing) rather than its IP address means it keeps working when the IP changes. The alternative is a DHCP reservation on the router.
Note: for a one-off book you can also AirDrop the EPUB to the iPhone, or save it into an iCloud Drive folder, and use + → Import from Files in Readest.
Syncing progress
The official KOReader sync server was down when I tried to register (Cloudflare error code: 522), so I looked for an alternative. kosync.eu was recommended but I couldn't log in to it (Invalid CSRF token), so I ended up using
https://sync.techy-notes.com
First impressions are really good, there's a nice interface to see the synced books, their progress and the connected devices.
On the Kindle
Open a book in KOReader then
Tools → Progress sync → Custom sync server
enter https://sync.techy-notes.com, then register or log in and turn on Auto sync.
Note: Wi-Fi needs to be on for sync to happen. Progress is pushed when you close the book or the Kindle goes to sleep.
On the iPhone
In Readest's settings find KOReader Sync, enter the same server address and log in with the same account.
How books are matched
The sync protocol never sends a book's title or author, only a document ID (a hash of the file by default) along with the position, percentage and device name. So it's expected that the server's dashboard doesn't show a correct title or author for synced books.
What matters is both apps produce the same ID for the same book
- One entry for the book, updated by both devices, means it's matching correctly
- Two entries for the same book means the files differ, so positions won't carry over
Calibre can write slightly different metadata into each copy it sends. If that happens, switch both KOReader and Readest to match by filename instead, and make sure the file has the same name on both devices.
Testing it
Read a few pages on the Kindle and close the book, then open it in Readest, it should jump to the same position. Then try the other way round.
Note: community sync servers are run by individuals with no guarantees. If one disappears you only lose the sync positions, not the books, and you can switch server at any time.
Text-to-speech in Readest
Readest's default voice is quite mechanical, but it can use the better Enhanced and Premium voices built into iOS once they're downloaded
Settings → Accessibility → Spoken Content → Voices
Then in Readest, change the voice by tapping the cover on the mini player. So far the Jamie (Premium) voice seems to be the best option, and it works pretty well.
This is definitely something to look into further. I'm wondering whether a Readest premium account would be worth it for the better voices, or whether I could sync a real audiobook to the EPUB somehow (something like Storyteller might do this).
Resources
Jailbreaking
- Kindle Modding
Community wiki with up-to-date guides for each jailbreak method - SpiderCat jailbreak guide
- Preventing auto-updates
- Kindle Filler Disk (MTP)
Filler files for 11th generation and newer Kindles - New SpiderCat Kindle Jailbreak is the Easiest Method Yet
- New "Véra" Jailbreak Released for Latest Kindles
Apps
- KOReader
- Readest
- Readest text-to-speech docs
- Calibre
- Storyteller
Self-hosted tool for syncing audiobooks with EPUBs
Sync
- sync.techy-notes.com
KOReader sync server I ended up using