GPL-2.0 · Qt6 · Linux & Windows

Read every document
the Vim way.

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.

Features

Fast commands, calm pages.

Designed for readers who stay on the keyboard.

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.

Directory navigation

Open a folder, move through entries with Vim keys, expand directories, and launch documents in tabs — the file tree behaves like a document outline.

Annotations

Mark, comment, and underline without ever leaving the document-centered workflow. Notes are saved per document under a directory you choose.

Search & command line

Modal commands and completion let you find content, jump between files, split windows, and drive the viewer entirely from a colon prompt.

Many formats

PDF, EPUB, TXT, FB2, MOBI, CBZ, HTML, DJVU, and images — one viewer for everything, with selectable rendering engines per format.

Tabs & splits

Open many documents in tabs, split windows horizontally or vertically, and use marks to return to any position later.

Formats

One viewer for every document.

Each format can be rendered by a selectable engine — set it per file type in ~/.apvlvrc.

PDF

The default. Render with QtPdf, MuPDF, or Poppler — whichever you prefer per file.

.pdf:engine = QtPdf

EPUB · FB2 · MOBI

Reflowable ebooks rendered through MuPDF or the built-in Web engine, with the same Vim motions.

.epub:engine = Web

TXT · HTML

Plain text and web pages, read with the very same keys, search, and command line as everything else.

.fb2:engine = MuPDF

DJVU · CBZ · Images

Scanned books, comic archives, and image files — paged and navigable just like a PDF.

apvlv comics.cbz
Keyboard map

Commands that keep your hands on the keys.

Most commands accept a leading count where it is meaningful; count defaults to 1.

o

Display a file chooser to open a PDF, DJVU, EPUB, HTML, or TXT file.

O

Select a directory to display.

t

Open a PDF, DJVU, EPUB, HTML, or TXT file in a new tab.

T

Select a directory to display in a new tab.

R

Reload the current file.

gt

Show the next tab.

gT

Show the previous tab.

G

Show page number count.

C-fPageDown

Go forward count pages.

C-bPageUp

Go backward count pages.

C-d

Go forward count half pages.

C-u

Go backward count half pages.

H

Scroll to page head.

M

Scroll to page middle.

L

Scroll to page bottom.

s

Skip count pages.

jC-nDown

Scroll down count units.

kC-pUp

Scroll up count units.

hBackspaceLeft

Scroll left count units.

lSpaceRight

Scroll right count units.

r

Rotate the document clockwise by 90 degrees.

/ string

Search forwards for string.

? string

Search backwards for string.

f

Toggle between fullscreen and window mode.

zi

Zoom in.

zo

Zoom out.

zw

Zoom to fit window width.

zh

Zoom to fit window height.

m char

Mark the current position to char.

' char

Return to the mark position char.

''

Return to the last position.

c

Toggle directory display.

q

Close the current window.

ZZ

Quit the viewer, like Vim.

Configuration

Shape the viewer from ~/.apvlvrc.

Write set setting = value in ~/.apvlvrc, Vim-style.

fullscreen

yes/no to enable or disable fullscreen.

width

Default window width as an integer.

height

Default window height as an integer.

fix_width

Fixed window width.

fix_height

Fixed window height.

defaultdir

Default directory for the open dialog.

continuous

yes/no to show pages continuously.

autoscrollpage

yes/no to scroll when hitting a page tail or head.

noinfo

Disable or enable usage of ~/.apvlvinfo.

max_info

Maximum file information entries to save. Default is 100.

scrollbar

yes/no to show or hide the scrollbar.

wrapscan

yes/no to wrap searches.

guioptions

mTsS controls menu, toolbar, status, and status tool display.

ocr:lang

Tesseract pretrained languages such as eng+chi_sim.

notes:dir

Directory used to save ebook notes.

autoreload

Number of seconds before auto reloading a document.

inverted

yes/no to use inverted mode for PDF pages.

background

Set the background color.

Zoom modes

zoom = normal

Let the application choose the default zoom value.

zoom = fitwidth

Fit pages to window width.

zoom = fitheight

Fit pages to window height.

zoom = float

Use a scale such as 1.0 for 100% or 2.0 for 200%.

Engines & double click

.pdf:engine

Choose MuPDF, Poppler, or QtPdf.

.epub:engine

Choose MuPDF or Web.

.fb2:engine

Choose MuPDF or Web.

doubleclick = none

Select nothing.

doubleclick = word

Select the word under the cursor to the clipboard.

doubleclick = line

Select the line under the cursor to the clipboard.

doubleclick = page

Select the page under the cursor to the clipboard.

Colon commands

Command-line control inside the viewer.

Prompt commands work like key commands, but start with a colon.

:h[elp]

Display the help document.

:q[uit]

Close the current window.

:o[pen] file

Open file.

:doc file

Load file into the current window.

:TOtext [file]

Translate file, or the current page, to a text file.

:pr[int]

Print the current document.

:tabnew

Create a new tab.

:sp

Horizontally split the current window.

:vsp

Vertically split the current window.

:fp

Go forward pages. Also :forwardpage [int].

:bp

Go backward pages. Also :prewardpage [int].

:g int

Go to page int. Also :goto int.

:z[oom] mode

Set zoom to a configured zoom mode.

:int

Go to page int.

:directory

Toggle directory display.

Build from source

Qt6, CMake, and a straight path to install.

1

Install dependencies

Qt6, Quazip, and CMake are required. Optional engines — Poppler, MuPDF, and Tesseract — add richer document and OCR support.

2

Configure & build

Configure with CMake into a build directory, then compile.

3

Install & read

Install the binary, then open any document to start reading.

bash · Fedora / Debian / Ubuntu
# 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
PowerShell · Windows
# 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

Put your hands on the keys.

apvlv is free software (GPL-2.0). Read the source, file an issue, send a patch, or just download a build and start reading.