An e-reader app for PocketBook e-ink readers (InkPad 3), written in pure Go, that reads EPUB books, comics and manga (CBZ) and recipes from your self-hosted Komga, Calibre-Web and Mealie servers.
This is a fun project: I wrote it to discover how EPUBs are handled (XHTML, CSS, line breaking, pagination, fonts…) and how a PocketBook works under the hood (framebuffer, e-ink refresh, firmware). I also plan to port it to Kobo and Kindle readers, just to understand how they work.
I also wanted to see whether a PocketBook app could do without the official SDK: no cgo, no libinkview, just Go drawing into the framebuffer and talking to the firmware itself. It can.
It was written with Claude Code, but I still tried to keep the code intelligible and easy to read: the goal is to learn, not to offer a production app. If you want a solid, mature reader, use KOReader.
Screenshots from the emulator, with fake servers; the book being read is Project Gutenberg's Alice's Adventures in Wonderland.
You're welcome to use it. Download the zip of the
latest release, connect the reader
over USB, unzip it at the root of the reader, then write applications/inkshelf/config.json
with your servers. How to configure it, or build it from source, is in
docs/reference/usage.md; how it works inside starts at
docs/reference/architecture.md.
To learn how it works from scratch, with animations of e-ink refreshes, dithering, EPUB
layout and the app's threads, read the documentation site
(or run make docs and open http://localhost:3000/inkshelf/): the
learning chapters go from the big picture down to the algorithms.
.devcontainer holds everything make verify, make icons and make docs need,
and Claude Code: open the folder in VS Code and choose Reopen in Container. Its firewall lets
through only Anthropic's API, GitHub, the Go proxy and npm. To run make emu against your own
servers, list their hosts, space-separated, in INKSHELF_ALLOWED_DOMAINS on the host before you
open it. make deploy needs the reader mounted over USB, so it runs on the host.
I don't maintain it on a regular basis, only when I feel like it. Pull requests are welcome, and so are forks.




