Counted motion
Type a number before a command to move exactly as far as you mean — a single page or a long jump. The default count is 1.
apvlv is a keyboard-first viewer for PDF, EPUB, TXT, FB2, MOBI, CBZ, HTML, DJVU, and images. Navigate pages, tabs, directories, and annotations with the rhythm of Vim — without ever reaching for the mouse.
$ apvlv ~/library/manual.pdf
✓ loaded manual.pdf (QtPdf · 248 pages)
✓ normal mode (j k h l · : / ?)
:tabnew chapter.epub
/keyboard shortcuts (search forward)
:42 (jump to page 42)
Designed for readers who stay on the keyboard.
Type a number before a command to move exactly as far as you mean — a single page or a long jump. The default count is 1.
Open a folder, move through entries with Vim keys, expand directories, and launch documents in tabs — the file tree behaves like a document outline.
Mark, comment, and underline without ever leaving the document-centered workflow. Notes are saved per document under a directory you choose.
Modal commands and completion let you find content, jump between files, split windows, and drive the viewer entirely from a colon prompt.
PDF, EPUB, TXT, FB2, MOBI, CBZ, HTML, DJVU, and images — one viewer for everything, with selectable rendering engines per format.
Open many documents in tabs, split windows horizontally or vertically, and use marks to return to any position later.
Each format can be rendered by a selectable engine — set it per file type in ~/.apvlvrc.
The default. Render with QtPdf, MuPDF, or Poppler — whichever you prefer per file.
.pdf:engine = QtPdf
Reflowable ebooks rendered through MuPDF or the built-in Web engine, with the same Vim motions.
.epub:engine = Web
Plain text and web pages, read with the very same keys, search, and command line as everything else.
.fb2:engine = MuPDF
Scanned books, comic archives, and image files — paged and navigable just like a PDF.
apvlv comics.cbz
Most commands accept a leading count where it is meaningful; count defaults to 1.
Display a file chooser to open a PDF, DJVU, EPUB, HTML, or TXT file.
Select a directory to display.
Open a PDF, DJVU, EPUB, HTML, or TXT file in a new tab.
Select a directory to display in a new tab.
Reload the current file.
Show the next tab.
Show the previous tab.
Show page number count.
Go forward count pages.
Go backward count pages.
Go forward count half pages.
Go backward count half pages.
Scroll to page head.
Scroll to page middle.
Scroll to page bottom.
Skip count pages.
Scroll down count units.
Scroll up count units.
Scroll left count units.
Scroll right count units.
Rotate the document clockwise by 90 degrees.
Search forwards for string.
Search backwards for string.
Toggle between fullscreen and window mode.
Zoom in.
Zoom out.
Zoom to fit window width.
Zoom to fit window height.
Mark the current position to char.
Return to the mark position char.
Return to the last position.
Toggle directory display.
Close the current window.
Quit the viewer, like Vim.
Write set setting = value in ~/.apvlvrc, Vim-style.
yes/no to enable or disable fullscreen.
Default window width as an integer.
Default window height as an integer.
Fixed window width.
Fixed window height.
Default directory for the open dialog.
yes/no to show pages continuously.
yes/no to scroll when hitting a page tail or head.
Disable or enable usage of ~/.apvlvinfo.
Maximum file information entries to save. Default is 100.
yes/no to show or hide the scrollbar.
yes/no to wrap searches.
mTsS controls menu, toolbar, status, and status tool display.
Tesseract pretrained languages such as eng+chi_sim.
Directory used to save ebook notes.
Number of seconds before auto reloading a document.
yes/no to use inverted mode for PDF pages.
Set the background color.
Let the application choose the default zoom value.
Fit pages to window width.
Fit pages to window height.
Use a scale such as 1.0 for 100% or 2.0 for 200%.
Choose MuPDF, Poppler, or QtPdf.
Choose MuPDF or Web.
Choose MuPDF or Web.
Select nothing.
Select the word under the cursor to the clipboard.
Select the line under the cursor to the clipboard.
Select the page under the cursor to the clipboard.
Prompt commands work like key commands, but start with a colon.
Display the help document.
Close the current window.
Open file.
Load file into the current window.
Translate file, or the current page, to a text file.
Print the current document.
Create a new tab.
Horizontally split the current window.
Vertically split the current window.
Go forward pages. Also :forwardpage [int].
Go backward pages. Also :prewardpage [int].
Go to page int. Also :goto int.
Set zoom to a configured zoom mode.
Go to page int.
Toggle directory display.
Qt6, Quazip, and CMake are required. Optional engines — Poppler, MuPDF, and Tesseract — add richer document and OCR support.
Configure with CMake into a build directory, then compile.
Install the binary, then open any document to start reading.
# 1. install dependencies
sudo dnf install qt6-qtbase-devel quazip-qt6-devel cmake gcc-c++ # Fedora
sudo apt install qt6-base-dev libquazip1-qt6-dev cmake g++ # Debian / Ubuntu
# 2. configure & build
cmake -B build -S .
cmake --build build
# 3. install & read
sudo cmake --install build
apvlv ~/library/manual.pdf
# 1. install Qt6 and vcpkg dependencies (quazip, etc.)
# 2. configure & build (Release)
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=<vcpkg>\scripts\buildsystems\vcpkg.cmake
cmake --build build --config Release
# 3. install & read
cmake --install build
.\apvlv.exe manual.pdf
apvlv is free software (GPL-2.0). Read the source, file an issue, send a patch, or just download a build and start reading.