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.
| Function | Key Binding: |
|---|---|
| Help | ? |
| Quit | q |
| Scroll down | DOWN j |
| Scroll up | UP k |
| Half screen up | C-u |
| Half screen dn | C-d |
| Page down | PGDN RIGHT SPC |
| Page up | PGUP LEFT |
| Next chapter | n |
| Prev chapter | p |
| Beginning of ch | HOME g |
| End of ch | END G |
| Open image | o |
| Search | / |
| Next Occurrence | n |
| Prev Occurrence | N |
| Toggle width | = |
| Set width | [count]= |
| Shrink | - |
| Enlarge | + |
| ToC | TAB t |
| Metadata | m |
| Mark pos to n | b[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.
| Function | Key Stroke |
|---|---|
| Quit | Esc q |
| Help | F1 |
| Table of Contents | Tab |
| Progress & metadata | i |
| Page Down | PgDn Right Space f l |
| Page Up | PgUp Left b h |
| Half Page Down | d |
| Half Page Up | u |
| Line Down | j |
| Line Up | k |
| Chapter Start | g |
| Chapter End | G |
| Previous Chapter | [ |
| Next Chapter | ] |
| Search Forward | / |
| Search Backward | ? |
| Repeat Search Forward | n |
| Repeat Search Backward | N |
| Set Mark x | mx |
| Jump to Mark x | ‘x |