PDF.js

Mozilla's HTML5-based library for parsing and rendering PDF documents in the browser and Node.js.

Library
npm
v6.4.299
54,038 stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
94 /100 Excellent
Development Activity 100
Maintenance 84
Community 92
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
88 /100 Excellent
Architecture 92
Code Quality 93
Innovation 88
Learning Curve 80

PDF.js is a community-driven, Mozilla-supported JavaScript library that parses and renders Portable Document Format (PDF) files entirely with web standards, requiring no native plugins. Distributed on npm as pdfjs-dist, it powers Firefox’s built-in PDF viewer and countless web applications that need to display, inspect, or extract content from PDFs.

The library exposes a document API for loading PDFs and rendering their pages to an HTML5 canvas, along with text-layer and annotation-layer building blocks for selectable text, links, and interactive form fields. Heavy parsing runs in a Web Worker so the main thread stays responsive, and the package ships both modern and legacy builds to support a wide range of browsers.

What You Get

  • A prebuilt distribution (pdfjs-dist) with pdf.js and a separate pdf.worker for off-main-thread parsing
  • A promise-based document/page API (getDocument, page.render) for loading and rendering PDFs to canvas
  • Text-layer and annotation-layer helpers for selectable text, hyperlinks, and interactive form fields
  • Modern and legacy build variants covering both current and older browser targets
  • A complete, ready-to-embed generic web viewer plus a large collection of usage examples

Common Use Cases

  • Embedding an in-browser PDF viewer without relying on native browser plugins
  • Rendering PDF pages to canvas or images for previews and thumbnails
  • Extracting text content from PDFs for search, indexing, or accessibility
  • Displaying and filling interactive PDF forms and annotations in a web app

Under The Hood

Architecture — PDF.js is split across three source layers under src/: core/ parses the raw PDF byte stream (objects, xref tables, fonts, CMaps, content-stream operators, image and stream decoders in files like document.js, parser.js, and crypto.js), display/ turns parsed operator lists into rendered output via api.js (the public getDocument/PDFDocumentProxy/PDFPageProxy surface) and canvas.js (the 2D canvas renderer), and shared/ holds constants and utilities used by both. The expensive parsing work runs inside a Web Worker (pdf.worker.js), communicating with the display layer over a structured message transport so the UI thread only receives operator lists to paint. Text and annotation layers (text_layer.js, annotation_layer.js) are rendered as DOM overlays aligned to the canvas.

Tech Stack — The library is written in modern JavaScript (ES modules, "type": "module") with no runtime dependencies in the published package. The build pipeline uses Gulp, Webpack, and Babel (with core-js polyfills for the legacy build) to bundle src/ into the production pdf.js/pdf.worker.js scripts; TypeScript declaration files are generated via tsc for typed consumers. Node.js 22.13+ or 24+ is required for development. Localization uses Fluent, and native canvas rendering for Node tests goes through @napi-rs/canvas.

Code Quality — The repository has an extensive test suite: 71 unit-test modules under test/unit/, plus Puppeteer-driven integration tests, reference (pixel-comparison) tests, and font tests, all wired into GitHub Actions with Codecov coverage tracking across three workflows. Code is linted with ESLint (including no-unsanitized and regexp plugins), formatted with Prettier, and style-checked with Stylelint. With over 23,000 commits and 500+ contributors over more than a decade, the codebase is mature and rigorously maintained.

API Design — The public API is deliberately small and promise-based: getDocument(src) returns a loading task resolving to a document proxy, doc.getPage(n) returns a page proxy, and page.render({ canvasContext, viewport }) paints it. Worker setup is handled by assigning GlobalWorkerOptions.workerSrc, the one piece of required boilerplate. The API is thoroughly documented at mozilla.github.io/pdf.js/api and backed by interactive examples and an examples folder covering components, image decoders, Node usage, and webpack integration, which flattens the otherwise steep learning curve of working with a format as complex as PDF.

Used by 47 apps in this directory

TypeScript
92%
Other

n8n

Automation · No Code Platforms

208,437

Code when you need it, UI when you don't — the workflow automation platform built for technical teams who refuse to choose.

View details
95
Repo Health
87
Technical
62
Dependency
Built with
TypeScript 92%
Updated 3 days ago
TypeScript
99%
Other

NocoBase

Low Code Platforms · No Code Platforms

24,686

Open-source AI + no-code platform that lets coding agents and people collaborate to build business systems fast on proven infrastructure.

View details
94
Repo Health
81
Technical
63
Dependency
Built with
TypeScript 99%
Updated 2 days ago
TypeScript
65%
Other

NocoDB

Databases · Low Code Platforms · No Code Platforms

65,340

Turn any SQL database into a collaborative no-code spreadsheet with automatic REST APIs and real-time views.

View details
91
Repo Health
77
Technical
63
Dependency
Built with
TypeScript 65%
Vue 30%
Updated 2 days ago
TypeScript
89%
GPL 3.0

NoteGen

AI Assistants · Knowledge Management · Note Taking

12,914

Capture anything first, then let AI transform your scattered records into polished, structured Markdown notes with RAG-powered knowledge retrieval.

View details
87
Repo Health
74
Technical
67
Dependency
Built with
TypeScript 89%
Updated 3 days ago
TypeScript
85%
GPL 3.0

Notesnook

File Storage · Note Taking · Security

14,822

End-to-end encrypted, open-source note-taking where your data stays yours — even from the server.

View details
91
Repo Health
84
Technical
60
Dependency
Built with
TypeScript 85%
JavaScript 12%
Updated 2 days ago
TypeScript
26%
AGPL 3.0

Omnivore

Bookmarks Archiving · Knowledge Management · Note Taking

16,356

Self-hosted read-it-later platform with highlights, newsletters, PDFs, and seamless Obsidian and Logseq integration.

View details
90
Repo Health
74
Technical
65
Dependency
Built with
TypeScript 26%
JavaScript 24%
HTML 20%
Updated 3 days ago
TypeScript
97%
GPL 3.0

OpenKnowledge

Code Editors · Knowledge Management · Note Taking

4,674

A beautiful, local-first markdown IDE that turns any git repo into a live collaborative workspace for humans and AI coding agents like Claude, Codex, and OpenCode.

View details
80
Repo Health
89
Technical
64
Dependency
Built with
TypeScript 97%
Updated 2 days ago
Python
38%
Other

Open WebUI

AI Agents · AI Assistants

156,607

The extensible, privacy-first AI platform that runs Ollama, OpenAI, and any LLM backend behind a polished, feature-packed web interface.

View details
92
Repo Health
75
Technical
66
Dependency
Built with
Python 38%
Svelte 35%
JavaScript 19%
Updated 2 days ago
PHP
62%
Other

OpnForm

Forms Surveys · Marketing

3,865

Build unlimited, embeddable forms with no code — powered by AI, logic rules, and real-time analytics

View details
91
Repo Health
75
Technical
65
Dependency
Built with
PHP 62%
Vue 28%
Updated 3 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers