// GOOD TERMINAL PDF VIEWER

v0.2.6 | MIT LICENSE | RUST

~ /dev/pdf

$ gtpv paper.pdf

GTPV rendering a PDF in terminal

> THE_PROBLEM

# Current state of PDF viewing in terminals:
$ brew install imagemagick ghostscript lua luarocks
$ luarocks install magick
$ convert -density 150 doc.pdf[0] -quality 90 /tmp/page.png
$ kitty +kitten icat /tmp/page.png

# Dependencies: 847 packages
# Disk usage: 2.3 GB
# Time to first page: 4.7 seconds
# Maintenance burden: HIGH

> THE_SOLUTION

# GTPV:
$ gtpv doc.pdf

# Dependencies: 0 (zero)
# Binary size: 5.6 MB
# Time to first page: ~150ms
# Maintenance burden: NONE

> FEATURES

[0] ZERO_DEPENDENCIES

Single static binary. No ImageMagick. No Ghostscript. No runtime libraries. Download. Run. Done.

[1] NATIVE_PERFORMANCE

Rust + PDFium (statically linked). GPU-optimized rendering. ~150ms to first page. ~30ms cached navigation.

[2] UNIVERSAL_TERMINAL

Kitty graphics, iTerm2 inline, Sixel protocol. Falls back to Unicode art. Works EVERYWHERE.

[3] STREAM_API

First-class Neovim integration. Stdin/stdout protocol. LRU cache. Prefetch. Memory control.

[4] CROSS_PLATFORM

macOS (ARM + Intel), Linux (x64 + ARM), Windows. Pre-built binaries. Native everywhere.

[5] MEMORY_CONSCIOUS

Configurable LRU cache. Explicit eviction. ~3MB per page at 150 DPI. You control the footprint.

> QUICK_START

// Try GTPV in 30 seconds - no installation required:

bash

# Download binary (macOS ARM)

$ curl -L https://github.com/Eris-Margeta/good-terminal-pdf-viewer/releases/latest/download/gtpv-macos-arm64 -o gtpv && chmod +x gtpv

# Download sample PDF

$ curl -L https://raw.githubusercontent.com/Eris-Margeta/good-terminal-pdf-viewer/main/tests/fixtures/testing.pdf -o test.pdf

# View it

$ ./gtpv test.pdf

KEYS: j/k navigate | g/G first/last | q quit

> BENCHMARKS

METRIC TARGET ACTUAL STATUS
Time to first page < 200ms ~150ms [PASS]
Cached navigation < 50ms ~30ms [PASS]
Memory per page < 5MB ~3MB [PASS]
Binary size < 30MB 5.6MB [PASS]
Runtime dependencies 0 0 [PASS]

> TERMINAL_SUPPORT

// Graphics Protocols (Best Quality)

  • Kitty kitty-graphics
  • WezTerm kitty-graphics
  • Ghostty kitty-graphics
  • iTerm2 iterm2-inline
  • foot sixel
  • mlterm sixel

// Text Fallback (Universal)

  • halfblock truecolor/256
  • braille monochrome
  • block grayscale

Works in: Alacritty, Terminal.app, Windows Terminal, SSH, tmux, screen...

> NEOVIM_INTEGRATION

// Stream API for memory-efficient editor integration

GTPV Neovim Integration - PDF preview in split pane
METRIC TRADITIONAL GTPV STREAM
Time to first page 2-5 seconds ~150ms
Page navigation 1-2 seconds ~30ms (cached)
Memory management Uncontrolled Explicit LRU
Temp file I/O Yes (slow) None
Process spawning Per page Single instance
stream protocol

$ gtpv stream document.pdf

> goto 5

> render

> prefetch 1-10

> evict 20-30

> info

> quit