Skip to content
ToolStash

PDF Viewer

Open a PDF and read it in a full-screen reader — continuous scrolling, zoom, and a dark surface by default. The file is opened by your own browser, so it is never uploaded, which makes this safe for contracts, statements and scans you would not hand to a website.

Runs entirely in your browser — nothing is uploaded

Drop a PDF here to view it

Opens full screen. Nothing is uploaded — your browser does the reading.

How to use it

  1. Drop a PDF onto the box above, or click Choose a file. The reader opens full screen.
  2. Scroll to read. Pages run continuously, one after another, like any document viewer.
  3. To jump somewhere specific, type a page number in the toolbar and press Enter. The indicator also follows your scrolling, so it always says where you are.
  4. Use and + to zoom. 100% means fitted to the width of the reader.
  5. Use ☀ / ☾ to switch between the dark and light reading surface. Dark is the default.
  6. Click ← Close or press Escape when you are done — that releases the file from memory and returns you to this page.

How it works

This viewer is built on pdf.js, the PDF rendering engine Mozilla develops and ships inside Firefox. It is written entirely in JavaScript and WebAssembly, which is what makes a genuinely local PDF viewer possible: the parsing, font handling and rasterising all happen in your browser rather than on a server that returns page images.

When you open a file, its bytes are read into memory and handed to pdf.js, which parses the document structure in a background worker thread — that is why the interface stays responsive on a large file. Opening the document only reads its catalogue and page tree, not the page contents.

Continuous scrolling without rendering everything

Scrolling through a whole document and rendering a whole document are different things, and conflating them is how browser-based readers run out of memory. A single A4 page rasterised at a modern screen’s pixel density is around 18 MB of canvas. Painting four hundred of them would ask for several gigabytes.

So the reader separates the two. Every page immediately gets a correctly sized box — measured from the document’s own page geometry, which is metadata rather than content — so the scrollbar tells the truth about how long the document is and jumping to page 380 lands in the right place. But only the handful of pages near your scroll position are actually painted onto canvases. The browser reports which pages are approaching the viewport, those get rendered, and pages that scroll away have their canvases released back to the browser. Memory therefore stays flat: a four-hundred-page document costs the same as a four-page one.

Because each page’s box is white before its canvas paints, scrolling never flashes — you see paper, then the content appears on it. A render still in progress is cancelled if you scroll past it or change the zoom, so a fast scroll cannot leave half-drawn pages behind or queue up work you no longer want.

Zooming does not touch the document at all. Page geometry was measured once at open time, so a new zoom level is arithmetic on numbers already in memory; only the visible canvases are repainted at the new scale.

The dark surface

Dark is the default because a reader is something you look at for a while, and a black surface around white paper is easier on the eyes than a bright field. The pages themselves are always rendered white in both themes. Inverting the actual page content is a different feature from a dark interface — it wrecks photographs, logos, charts and scanned documents — so the theme changes the surrounding surface and leaves your document looking like your document.

Self-hosted supporting assets

Two extra pieces are fetched from this site when a document needs them. Character maps translate the encodings used by CJK text, and font metrics cover the fourteen standard PDF fonts for documents that reference rather than embed them. Most viewers load these from a public CDN; they are served from our own origin here so that viewing a document does not tell a third party anything.

Tips

  • The page indicator is two-way: it follows your scrolling, and typing a number scrolls there. Out-of-range numbers clamp to the last page rather than erroring.
  • Zoom is fit-relative, so 100% means “fitted to the reader’s width”. For reading fine print on a scan, jump to 200% or higher — the reader scrolls sideways when a page is wider than the window.
  • If a page stays blank, give it a moment: a scanned page carrying a very large image takes longer to paint than a page of text. Some PDFs also place content outside the declared page box, where zooming can help find it.
  • Viewing does not modify the file. If you need pages rotated or removed, the changes have to be made and saved with a tool that edits the document.

Frequently asked questions

Is my PDF uploaded to a server?
No. The file is read into your browser’s memory and rendered by pdf.js, the same open-source engine Firefox uses for its built-in PDF viewer, running as JavaScript in this tab. No part of the document is transmitted. Open your browser’s Network tab while you view a file — you will see requests for the viewer code and for font data, and none carrying your document.
Why use this instead of my browser’s built-in PDF viewer?
For a file already on your computer, the built-in viewer is fine and usually faster. This tool is useful when the built-in one is disabled or missing — some managed work machines and older Android browsers download PDFs instead of displaying them — and when you want to check a file, then move straight to merging, splitting, rotating or watermarking it without switching sites. It is also handy for confirming a PDF you just produced with another tool here actually looks right.
Is there a file size limit?
No limit we set. Because only the few pages near your scroll position are rasterised, and their canvases are released once you scroll past them, a 400-page document opens about as quickly as a 2-page one and uses about as much memory. The real constraint is the file itself: the whole thing is held in the tab, so very large scanned documents — several hundred megabytes — can strain a phone. The tool warns you above 50 MB or 300 pages rather than silently struggling.
Can it open password-protected PDFs?
Not currently. A protected file is detected and reported rather than failing obscurely, but you will need to open it in a reader with the password and save an unprotected copy to view it here. This is deliberate for now — the same limitation applies to every PDF tool on the site, so behaviour is consistent.
Why does text in some PDFs look slightly different from my desktop reader?
Because of font substitution. A PDF can either embed its fonts or reference standard ones and assume the reader has them. For the second kind, this viewer uses the metrics that ship with pdf.js — served from this site, not a CDN — so layout stays correct, but glyph shapes may differ subtly from what a desktop reader with the real font installed would draw. PDFs that embed their fonts, which is most modern ones, render exactly as intended.
Can I edit, annotate or fill in forms?
No — this is a viewer only. It renders pages to an image and does not modify the file. Interactive form fields display as they were last saved but cannot be typed into, and there is no highlighting or commenting. For changing a document, use the other PDF tools here: merge, split, rotate, reorder, or add a watermark.
Can I read in dark mode?
Yes, and it is the default. The reader opens full screen on a black surface with dark chrome, and the toolbar has a toggle if you prefer light — your choice is remembered for next time. The pages themselves stay white in both themes. Inverting page content is a separate thing from a dark interface: it ruins photographs, logos, charts and scanned documents, so the theme changes what surrounds your document rather than the document.
Can I select and copy text from the page?
Not yet. Each page is drawn to a canvas, which produces a faithful picture of the page but no selectable text layer. If you need the words, opening the file in a desktop reader is the quickest route for now.
Does it work offline?
Mostly. Once the page and viewer code have loaded, rendering happens locally. A PDF that needs character maps or standard font data may request those files from this site the first time they are needed, so a fully offline session can render such documents with substituted fonts. Everything else works with the connection off.

Browse every tool in PDF Tools.

Found a bug or want a feature? Tell us — ToolStash is built from user requests.