This article is one of the vault series of articles about productivity application using the terminal. Note: See the parent document: Using the Terminal as a Daily Driver for more about terminal productivity applications.

I don’t know whether an EPUB reader counts as a productivity tool. But, I ran across these and they work for reading .epub files. Since I use Calibre as an ebook library manager, it is able to convert files into the .epub format.

[!tip] If you are seriously going to use a terminal based ebook reader, look into changing your terminal font to something that you like. That will make the reading experience better.

Epr-reader

The GitHub page includes installation instructions. I was able to use uv tool install epr-reader.

This isn’t real fancy, but it works. It remembers your last book and location. Here are the key bindings listed in the help screen.

FunctionKey Binding:
Help?
Quitq
Scroll downDOWN j
Scroll upUP k
Half screen upC-u
Half screen dnC-d
Page downPGDN RIGHT SPC
Page upPGUP LEFT
Next chaptern
Prev chapterp
Beginning of chHOME g
End of chEND G
Open imageo
Search/
Next Occurrencen
Prev OccurrenceN
Toggle width=
Set width[count]=
Shrink-
Enlarge+
ToCTAB t
Metadatam
Mark pos to nb[n]
Jump to pos n`[n]
Switch colorsch[default=0, dark=1, light=2] c

Epy

Note: Not recommended at this time.

Unfortunately, there is an error "No module named 'imghdr'" when installed with uv tool install epy-reader. This did not work for me because ‘imghdr’ has been deprecated and removed in python 3.13. There is a GitHub pull request that appears to fix this issue, but it has not been incorporated.

Epy is a fork of Epr with additional features.

Installed with uv tool install epy-reader.

Supports:

  • Epub (.epub, .epub3)
  • FictionBook (.fb2)
  • Mobi (.mobi)
  • AZW3 (.azw, .azw3)

It also allows reading books directly from the internet. Here is an example from epy’s documentation.

$ epy https://www.gutenberg.org/files/2701/2701-h/2701-h.htm

Interesting concept. I may play around with getting this to work by either changing the source code or running it under an older version of python.

bk

Installed with cargo install bk.

No, it’s not Burger King. But, it is a terminal EPUB reader written in Rust. It supports EPUB v.2 and v.3 and has vim bindings for navigation.

It also can store bookmarks and allows incremental searching in an opened EPUB book.

Here is a list of the defined keystrokes as listed in the help page. Press F1 to open help.

FunctionKey Stroke
QuitEsc q
HelpF1
Table of ContentsTab
Progress & metadatai
Page DownPgDn Right Space f l
Page UpPgUp Left b h
Half Page Downd
Half Page Upu
Line Downj
Line Upk
Chapter Startg
Chapter EndG
Previous Chapter[
Next Chapter]
Search Forward/
Search Backward?
Repeat Search Forwardn
Repeat Search BackwardN
Set Mark xmx
Jump to Mark x‘x