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:
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
##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:
##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:
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