Mark up a PDF entirely in your browser — add text notes, highlight areas, draw rectangles and circles, and drop sticky notes, then download the annotated PDF. No upload, powered by pdf-lib.
Drag and drop a PDF file here, or click below to browse.
Text places a short note or label anywhere on the page — useful for adding a comment, a correction, or a label pointing at something specific. Highlight overlays a semi-transparent colored area, the direct digital equivalent of a highlighter pen dragged across a printed page. Rectangle and Circle draw outlined shapes to call out or frame a specific region without obscuring it. Sticky Note combines a small visible icon with its message printed alongside it, useful for a longer comment that benefits from being visually distinct from the rest of your markup.
The page you're viewing is rendered to an image using pdf.js (the same engine behind Chrome's built-in PDF viewer), and your annotations are displayed as an overlay on top of that image using percentage-based coordinates relative to the page — this keeps their position accurate regardless of your screen size. Text and Sticky Note are placed with a single click at a fixed default size; Highlight, Rectangle, and Circle are sized by clicking and dragging, letting you draw an area exactly as large as you need for that specific mark.
PDF pages use a coordinate system with its origin at the bottom-left corner and y-values increasing upward, while the on-screen preview places its origin at the top-left with y increasing downward. When you download, each annotation's on-screen position and size (stored as percentages of the page) are converted into the equivalent PDF point coordinates, accounting for this vertical flip, so what you see in the preview lines up precisely with where each annotation lands in the final downloaded PDF.
Every annotation this tool creates is drawn directly into the page's content stream using pdf-lib — the same mechanism used to draw any text or vector graphic in a PDF — rather than as a separate PDF annotation object (the kind that can be toggled visible/hidden or repositioned by a PDF editor later). This tradeoff is intentional: content-stream drawing renders identically and reliably across every PDF viewer with zero compatibility risk, while native annotation objects can render inconsistently (or not at all) depending on the viewer's own feature support.
Reading your PDF, rendering the page previews, and writing every annotation into the final document are all performed by JavaScript libraries running directly in your browser — pdf.js for rendering and pdf-lib for writing — with no server-side processing step at any point. This means there's no file size limit imposed by an upload restriction, no wait for a network round-trip, and your document's content is never transmitted anywhere.
PDF Annotate pairs naturally with these PDF tools for finishing and sharing documents.