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
98%
Other

LobeHub

AI Assistants · Automation · Productivity

83,455

Your Chief Agent Operator — build, schedule, and collaborate with an entire AI team in one self-hostable workspace.

View details
92
Repo Health
81
Technical
65
Dependency
Built with
TypeScript 98%
Updated 2 days ago
Clojure
71%
AGPL 3.0

Logseq

Knowledge Management · Note Taking

45,349

A privacy-first, open-source knowledge graph platform combining Markdown, Org-mode, bidirectional linking, and local-first storage for building your second brain.

View details
92
Repo Health
82
Technical
65
Dependency
Built with
Clojure 71%
OCaml 12%
Updated 3 days ago
JavaScript
55%
Other

Lokus

Knowledge Management · Note Taking

829

Local-first note-taking with graph view, canvas & AI plugins—your Markdown files, zero telemetry, blazing-fast Rust performance.

View details
75
Repo Health
75
Technical
64
Dependency
Built with
JavaScript 55%
HTML 21%
Rust 12%
Updated 2 months ago
TypeScript
51%
Other

Mattermost

Collaboration · Devops · Team Chat

39,418

Open core, self-hosted team collaboration with chat, AI agents, voice calling, and deep DevOps integrations — all under your control.

View details
96
Repo Health
87
Technical
65
Dependency
Built with
TypeScript 51%
Go 40%
Updated 2 days ago
Python
45%
GPL 3.0

MaxKB

AI Development · Knowledge Management

23,022

Build enterprise-grade AI agents with RAG, workflows & multi-modal support

View details
92
Repo Health
68
Technical
66
Dependency
Built with
Python 45%
Vue 37%
TypeScript 17%
Updated 3 days ago
Rust
86%
Apache 2.0

mesh-llm

AI Agents · AI Development

3,551

Mesh LLM pools GPUs and memory across every machine you own into one OpenAI-compatible API, so agents tap distributed compute instead of a single GPU box or a metered cloud bill.

View details
85
Repo Health
91
Technical
69
Dependency
Built with
Rust 86%
TypeScript 10%
Updated 2 days ago
TypeScript
96%
AGPL 3.0

Midday

Invoicing Finance · Productivity

15,091

All-in-one AI-powered business operations platform for freelancers and solo entrepreneurs to manage invoicing, time tracking, banking, and financial intelligence.

View details
51
Repo Health
78
Technical
67
Dependency
Built with
TypeScript 96%
Updated 4 months ago
Python
58%
Apache 2.0

MLflow

AI Development · Monitoring

28,512

The open source AI engineering platform for debugging, evaluating, monitoring, and optimizing production LLMs and agents at scale.

View details
96
Repo Health
86
Technical
67
Dependency
Built with
Python 58%
TypeScript 35%
Updated 2 days ago
Python
66%
Other

Morphik

AI Development · Databases · Search

3,717

Morphik is an AI-native ingestion and retrieval engine that lets developers store, search, and reason over visually rich documents — scanned PDFs, manuals, slides, and video — without duct-taping together OCR, an embedding model, and a vector database.

View details
64
Repo Health
71
Technical
67
Dependency
Built with
Python 66%
TypeScript 23%
Updated 5 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