Igor
nopdf.md
+

project · c# · avalonia · vim

NoPDF

A PDF viewer and editor that speaks vim. No toolbars, no dialogs, no mouse — just a command line and your muscle memory.

NoPDF — the-tao-of-programming.pdfchromeless
:zoomfit-width

I open a lot of PDFs. Contracts, papers, manuals, scanned forms someone needs signed “by end of day.” And for years every PDF app I tried made the same trade: to do anything beyond scrolling, I had to reach for the mouse, hunt through a ribbon of tiny icons, and click through a modal or two. The reader was bloated. The editor was worse — and half of them wanted a subscription to let me rotate a page.

Meanwhile every other tool I actually enjoy using is keyboard-first. My editor is vim. My browser is qutebrowser. My window manager barely has buttons. So I kept asking the obvious question: why is the thing I spend the most time reading in the one that fights my hands the hardest?

##The frustration

The problem isn't that PDF viewers can't do things — it's that they bury every action behind chrome. Toolbars steal vertical space. Panels pop in and out. The same operation lives in a different menu in every app. And the moment you want to edit — highlight, annotate, reorder pages, sign — you're either paying, exporting to some other format, or fighting an interface designed for a 2009 desktop.

I wanted the opposite of all that: a distraction-free, chromeless window where the document is the whole screen, and where anything I need is one : command or a two-key hotkey away. So I built it.

##The idea

NoPDF borrows its whole feel from vim and qutebrowser. The document takes the full window. There are modes — you're in normal mode by default, tap : to drop into a command line, / to search, Esc to come back. Navigation is j k gg G. Everything is remappable through a single YAML config that hot-reloads the moment you save it.

Under the hood it's a proper native app, not a browser wrapper:

C# / .NET 10AvaloniaPDFiumPDFsharpYAML config

It renders with Google's PDFium, handles annotations through PDFsharp, and runs on Windows, macOS and Linux from a single .NET 10 codebase. Annotations are written as standard PDF objects, so anything you mark up opens cleanly in Acrobat or any other viewer afterward.

##What it does

Multi-tab viewing
Session restore, drag-and-drop, one window for everything.
Annotate anything
Highlights, sticky notes, callouts, arrows, boxes, polylines.
Page surgery
Rotate, reorder, delete, insert and merge pages from a thumbnail panel.
Digital signatures
Reusable presets with optional certificate-based signing.
Bookmarks
PDF outlines plus your own custom page bookmarks in a side panel.
Real undo/redo
Across every edit type — because a PDF editor should have this.

##The keys

This is the part I'm proudest of. Hover a binding to see it on the status line below — it's the actual muscle memory you'd build:

And the command line, for the things that take an argument. Tab-complete works, and you can rebind or script any of them:

:openpath.pdf# open a file in a new tab
:page42# jump to a page number
:zoomfit-width# set the zoom mode
:findpattern# search, then :findnext
:rotate90# rotate the current page
:sign # apply a signature preset
:bindgg :page 1# remap a key
:config # edit the YAML, hot-reloaded
:save # write the PDF to disk

##Get it

It's early — a beta, and honestly still a little rough at the edges — but it already replaced every other PDF app on my machine. Grab a self-contained build for your platform:

download · v0.0.2-betawin · macOS · linux
# grab the latest self-contained build
$ get nopdf --release v0.0.2-beta.00
↓ Download from GitHub Releases →

The source lives on GitHub — issues, ideas and pull requests are all welcome. If you've ever wished your PDF reader would just get out of the way, I'd love to know what you'd bind gg to.

~ Built in the open, with a lot of help from Claude Code. :wq

NORMALnopdf.mdkeyboard-first · chromeless · yoursutf-81:1100%