~ 6 min read
OK, Reader
Written by Brie Carranza

Photographed above is my physical copy of Fahrenheit 451, a book I recently re-read on my PocketBook.
🌊 Hello, world!
When I first learned about KOReader, I was super excited to give it a try because of all the cool features. While I could have just used KOReader on my phone and computer, I decided to invest a little bit in hardware for this experiment. I have been reading quite a bit this year and I haven’t had an e-ink device in a long time (since my 2011 Kobo). After a lot of research, I decided on the PocketBook Verse Pro.
With new hardware and software at hand, I set out to build a workflow that would replace and improve the one I had built with Google Play Books. One month in, it’s going well enough that I uninstalled the Google Play Books app from my phone while writing this blog post.
Keep reading for an overview of how KOReader and PocketBook and an SQL query with lots of emoji help me to happily say goodbye to Google Play Books.
💌 Getting books to the device
I usually transfer books to PocketBook via email using calibre
(pronounced “caliber” and not “ca-libre”!). I am making use of the Send-to-PocketBook
service for this.
I also often use cp
, rsync
or similar to transfer books when the PocketBook is connected via USB. While it is possible to transfer books wirelessly via calibre
or SFTP, I tend to use a cable to make sure my PocketBook has an opportunity to get charged! When I connect my e-reader with a cable, I sync my notes and screenshots along with the SQLite databases containing reading statistics and the vocabulary builder.
I expect this part of my workflow to evolve over time as there are KOReader features I haven’t experimented with yet — like the SSH server! I try to balance how much time I spend actually reading with how much time I spend tinkering with my reading workflow.
🔄 Sync reading progress across devices
I can use the KOReader app on my Linux machine, my phone and my PocketBook and keep my progress synced between devices!
Syncing can happen using sync.koreader.rocks
or with a self-hosted KOReader sync server. There’s no iOS support for KOReader but Readest looks cool and plans support for syncing with KOReader. I don’t read often enough on my iPad — especially now that I have the PocketBook — for this to be a real blocker.
📣 Tracking reading progress socially
KOReader integrates with hardcover.app (an alternative to The StoryGraph or Goodreads) thanks to the KOReader plugin. Once I’ve linked a book and marked it as Currently Reading, KOReader will happily update my profile with my progress in the book automatically as I read! I can also add quotes on hardcover.app
directly from my PocketBook. The quotes appear in the reading journal and can be set individually to private
, friends only
or public
.
🌟 I am happy with how this works.
📝 Highlighting and note-taking
I love taking notes as I read — even works of fiction! Google Play Books can save all bookmarks and notes in a Google Doc. With KOReader, I am exporting my bookmarks and notes to .html
, .json
, .md
and to Readwise. This is a definite improvement and I expect to iterate on this bit of my workflow over time.
📸 Screenshots
As hinted above, KOReader supports taking screenshots. In addition to syncing the screenshots to my computer, I’ve configured the screenshot folder to be the folder that PocketBook uses to sync with Dropbox. These screenshots permit me to showcase some of the cool functionality in KOReader, like the Book map. When reading a physical book, I can feel how much of the book is left in my hands. KOReader’s Book map is the coolest way I’ve seen this approached with ebooks. Here’s an example from Mirrorshades (a cyberpunk anthology):
The vertical black bars demonstrate my reading pace through the book. The icons show where I highlighted, bookmarked and left notes. In addition to helping me see how the rest of the book is structured, the Book map also lets me understand my reading activity as I read.
🔭 Note the lack of any activity or notes in “Freezone”. I skipped that selection as it’s the opening portion of a novel that I would prefer to read in its entirety.
📊 Reading stats
Another nice visualization powered by KOReader’s in-app statistics is this one showing my progress as I finished re-reading Fahrenheit 451 this morning:
Having the data in an SQLite database is really exciting. I like using Datasette to explore this data a bit further. I am still very happy with uv
so that’s what I am using to launch datasette
:
uv tool run datasette ~/koreading/statistics.sqlite3
We now arrive at the query I mentioned in the introduction:
SELECT
title as "📛 Name of Book",
total_read_pages as "📖 Pages Read"
highlights as "🔖 Highlights",
notes as "🤓 Notes",
FROM
book
ORDER BY
"📖 Pages Read"
DESC
LIMIT
10;
…to get results like this:
💖 From the Heart
While it’s been a lot of fun learning Lua and getting all kinds of stats about my reading habits, part of my motivation was deeper than just finding a nerdier approach to reading. As a child, free and open source software was my gateway to technology. The philosophy behind open source software was critical to my coming-of-age. I started to notice how frequently I have taken the convenient route which also happened to be the proprietary route. There is no shame in that especially when it’s an informed, deliberate decision: we all must decide what we will do with our time and with our data. However, recent events have inspired me to liberate myself a bit from big tech and return to my own first principles. Rebuilding my reading workflow without Google Play Books represents one incomplete step on that path.
I am thankful to Manu for telling me about KOReader in the first place. I had been toying with the idea of publishing this blog post; this toot prompted me to actually go ahead and publish.
Photographed above is my PocketBook nestled among a selection of books I have read and particularly enjoyed over the years.