pdf.js (pdfjs-dist) 6.3.289 https://github.com/mozilla/pdf.js Apache License 2.0 - see LICENSE in this directory. Taken from the npm registry on 21 September 2026: https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.3.289.tgz sha256 06f25e887adc6489f04c9fcb14198c77e4e5623a59a0bba5c4cea5838a4f1241 Only two files out of that package are here: pdf.min.mjs 458,705 bytes sha256 f80490490320511e5df18c580b9edd6b5db8058dceebaf6f161992e0a964b9e2 pdf.worker.min.mjs 1,265,413 bytes sha256 8ab0e5e30031b4a06ecfddd5ae9562f0227f830ee7ec9ed1a968b134243d2386 Vendored rather than loaded from a CDN so that a visitor's browser never announces to a third party that they are reading a PDF. WHY A LIBRARY AT ALL, when everything else here is hand-written. Writing a PDF is a page of code and lib-pdf.js does it with nothing downloaded - a header, some objects, a table of byte offsets, a trailer. READING one is a different job entirely: object streams, cross-reference streams, eight compression filters, encryption, embedded and substituted fonts, CID encodings, and thirty years of files that do not quite follow the specification. A partial implementation would not fail cleanly; it would open some files and silently show the wrong thing for others, which is the worst outcome this site has a rule about. So the three pages that READ a PDF use Mozilla's implementation - the one Firefox itself ships - and the pages that WRITE one use no library. That split is stated on every page, because "nothing is downloaded" is a promise the rest of the site keeps and these three cannot. WHAT IS DELIBERATELY NOT HERE. standard_fonts/ (about 1 MB) supplies replacements for the fourteen fonts a PDF is allowed to reference without embedding. Without it, a file relying on those falls back to whatever the browser has. It is left out until something is measured that actually needs it, rather than shipped on the assumption that it does. cmaps/ (about 2 MB) is needed for CJK text in files using predefined character collections. Same reasoning, and the same note on the page: if Chinese, Japanese or Korean text comes out wrong, that is why.