Skip to content
dialegein

MuPDF.js

Artifex's WebAssembly build of the MuPDF engine for JavaScript and browsers.

Operated by Artifex Software, Inc.

Visit MuPDF.js

Opens the vendor's own site.

Jobs covered

Open a task to see exactly what the vendor documentation supports.

Edit Browse all edit tools

editing annotations and PDF structure with MuPDF.js, where the annotations documentation documents creating annotations with page.createAnnotation() and deleting them with page.deleteAnnotation(), with creation supported for Text, Link, FreeText, Square, Circle, Line, Polygon, PolyLine, Highlight, Underline, Squiggly, StrikeOut, Redact, Stamp, Caret, Ink and FileAttachment types, and where the README capability list documents reading and writing form widget values, metadata and outlines, page insert, delete, reorder, rotate and crop, and the Redact annotation plus page.applyRedactions() path that permanently removes marked content as our test confirmed; the scope covers annotations, widgets, metadata, outlines and page operations, does not claim general rewriting of existing body text, and leaves the permanent-removal verdict to the redaction field

Protect Browse all protect tools

protecting PDFs with MuPDF.js, where the README API overview lists PDFDocument operations for save and encrypt, and the capability list documents opening password-protected PDFs and checking and setting permissions, with save options covering encryption and permission settings; the scope records the documented password opening, permission checking and encryption save options and makes no reader-enforcement, algorithm or key-management guarantee beyond the documented API

Merge Browse all merge tools

merging and rearranging PDFs with MuPDF.js, where the README API overview documents PDFDocument operations for save, encrypt, merge, graft, journal and layers, and the capability list documents document merging by grafting pages from one PDF into another and page insert, delete, reorder, rotate and crop operations; the scope records the documented merge, graft and page operations and makes no claim about preserving signatures, forms, links or annotations across a merge

Compress Browse all compress tools

compressing PDFs with MuPDF.js, where the README capability list documents save options for incremental updates, garbage collection and compression; the scope records the documented save-time compression and makes no lossless, fidelity or specific size-reduction guarantee because the result depends on the options and the document

View Browse all view tools

rendering PDF pages with MuPDF.js, where the page documentation documents loading a page, getting its bounds, and converting it to a pixmap with page.toPixmap(matrix, colorSpace, alpha, annots), controlling resolution through the matrix, colour space, background transparency and whether annotations are rendered, and then exporting the pixmap as PNG, JPEG, PAM or drawing it to a canvas; the scope is rendering pages and images, not an interactive viewer, and makes no fidelity guarantee beyond the engine's documented high-fidelity rendering claim

Extract Browse all extract tools

extracting text with MuPDF.js, where the page documentation documents page.toStructuredText() with asText() for plain text and asJSON(preserve-spans) for a structured object containing blocks, lines, spans, positional data and font data, and the README capability list documents text extraction, text search and link extraction from pages; the scope records the documented text, structure, search and link extraction, makes no OCR claim because the library has no OCR capability, and claims no image-extraction or accuracy guarantee beyond the documented APIs

Convert Browse all convert tools

image output

Where your files are processed

No server involved

The MuPDF C engine compiled to WebAssembly and shipped inside the package, so parsing, rendering and editing happen in your own browser or Node process. That is a property of the library itself: what an application built with it does with your file depends on that application, not on this.

Inherent to the technology rather than a vendor claim: the MuPDF C engine is compiled to WebAssembly and shipped inside the package, so parsing, rendering and editing happen in your own browser or Node process. Caveat: the binary is large and the project notes the app must be served over HTTP rather than opened from the filesystem.

What it does

Artifex's official JavaScript and TypeScript binding to the MuPDF C engine, published on npm as `mupdf` and compiled to WebAssembly so the same code runs in browsers and in Node, Bun or Deno. It renders pages to PNG, JPEG, PAM or an HTML5 canvas, extracts plain or structured text with positions, searches text and reads links, creates and edits annotations including permanent redaction, merges and rearranges pages, reads and writes form field values, metadata and outlines, and can save with encryption, permission and compression options.

The current npm release is 1.28.1. There is no OCR and no signing API documented.

Best for

Teams that need high-fidelity rendering plus genuine editing - redaction, annotation, merging, encryption - in one client-side or server-side JavaScript stack, and that can either comply with the AGPL or buy a commercial licence.

Worth knowing

Licensing is the real decision: the engine is AGPL-3.0-or-later or a commercial licence from Artifex, and the vendor's distinction is that a commercial licence is required where AGPL compliance is not possible, which is a statement about the licence rather than legal advice for a particular product. The official npm package is `mupdf` at version 1.28.1, published on 6 September 2026; the older, similarly named community `mupdf-js` package with a hyphen is deprecated, so which package a project depends on matters.

The examples cover both browser processing and a Node REST server, so this is a browser and Node deployment rather than a no-server one, and running the engine locally says nothing about what the application hosting it uploads or stores. There is no vendor-hosted processing endpoint in the library itself.

The WebAssembly binary adds to a client bundle and its transfer and unpacked sizes have not been measured here, so no size figure is published. The documented capabilities do not include OCR or a signing API: text extraction reads text already in the file, and no certificate-signing surface was found.

Redaction is the exception among editing operations: a Redact annotation plus page.applyRedactions() permanently removes marked content, as our 17 September 2026 test confirmed on version 1.28.1, but that is the annotated redaction path rather than a claim that every editing operation alters content destructively. Save-time compression, encryption and permission settings are documented at README level and depend on the options supplied; no lossless, fidelity, reader-enforcement or algorithm guarantee is made.

Details, and where each comes from

Vendor statements, our own reading of their pages, and the things nobody has established yet, each answered separately. Where we have not confirmed something it says so rather than guessing, and a row nobody has established is greyed out.

Versions covered
Web · Self-hosted
Website
mupdfjs.readthedocs.io
Requires an account
Not applicable
Watermark on the free tier
Not verified
Maximum file size
Not verified
Batch processing
Yes
Data residency
Self-hosted
Open source
Yes
Self-hostable
Yes
Licence
AGPL-3.0-or-later or commercial.

AGPL-3.0-or-later or commercial. The official npm package `mupdf` is published under AGPL-3.0-or-later, and the README badges the project as AGPL or Commercial.

Artifex's licensing page says most of its products are dual-licensed under the GNU AGPLv3 or commercial licence agreements, with commercial OEM and subscription options charged per copy with a quarterly minimum fee and no published figures; the page identifies Artifex Software Inc. as the company but does not publish a street address. No price is asserted.

The official package is `mupdf`; the older community package `mupdf-js` with a hyphen is deprecated.

Redaction
Removes the content
Programmatic access
Embeddable library · Browser JavaScript
Last availability check
Responded in 348 ms 21 October 2026

Checked automatically by our own runner, not reported by the vendor. 100% of our last 30 checks got a response.

What the redaction verdict rests on

Tested by us on 17 September 2026, on our own canary document rather than read off a product page.

What that does not establish

Tested on our own canary document. Deletes the marked text from the page structure and paints a fill; the saved file contains no image.

Verified on one document and one build.

What the vendor says

Claims are labelled rather than repeated as fact. Where we have checked something ourselves, it says so and shows when. Checked means we read the vendor's own page and it says what we recorded - not that we tested the behaviour, unless the note says we did.

  • “MuPDF.js is the official JavaScript and TypeScript library for reading, rendering, and manipulating PDF documents.”

    Checked by us - the source says this Read 22 September 2026

    Confirmed verbatim: the sentence is the README's opening line, and it continues with the detail that matters technically - "It wraps the MuPDF C engine in WebAssembly, so the same high-fidelity rendering runs in Node.js, browsers, Bun, and Deno - with no native dependencies." The word "official" is doing real work here: MuPDF.js is published by Artifex, the maker of MuPDF, which distinguishes it from a third-party wrapper, and it is the same vendor whose AGPL terms are recorded in the licensing tier.

    So the licensing claim and this capability claim describe the same product from the same source, and a reader weighing the AGPL obligation should read them together.

    Standing: Re-read and matched byte for byte

    Check it yourself: the source, the SHA-256, and how we checked
    From
    the text a browser renders
    SHA-256
    eb594a116224d246ef6f9b9901f599ab04866dfddd4c24a9fab65371a518d64c

    How we checked

    Re-verified verbatim on 2026-09-22: https://github.com/ArtifexSoftware/mupdf.js re-rendered in headless Chrome with scripts/render-page.mjs and the claim's wording found in the rendered text. Originally verified on 2026-09-21. sourceHash is the SHA-256 of the re-rendered text, held as rv-github-com-ArtifexSoftware-mupdf-js-eb5fba1b.txt.

    What this hash proves, and what it does not

  • “AGPL v3: Free for open-source projects. If you distribute software using MuPDF.js or provide it as a network service, you must release your source code under AGPL.”

    Checked by us - the source says this Read 21 September 2026

    Confirmed verbatim: under a question reading "What license is MuPDF.js under?", the answer states "AGPL v3: Free for open-source projects. If you distribute software using MuPDF.js or provide it as a network service, you must release your source code under AGPL." The same answer gives the commercial alternative for "proprietary applications, SaaS products, or when you can't comply with AGPL" and adds a scope note the claim omits: "The licensing applies to both the JavaScript wrapper and the underlying MuPDF WASM binary." That matters because it means the AGPL obligation cannot be avoided by treating the WASM binary as a separate component.

    This is the same Artifex licensing model recorded for MuPDF itself, Ghostscript and PyMuPDF in this batch.

    Standing: Re-read and matched byte for byte

    Check it yourself: the source, the SHA-256, and how we checked
    From
    the raw HTTP response
    SHA-256
    ed59297cff945d6f9b1885daaf6c081ddfeb1b832a45904d5b009100f38cc1b6

    How we checked

    The recorded source is the MuPDF.js FAQ; the URL implied by it (faq.html) returns 404, and the live page is https://mupdfjs.readthedocs.io/en/latest/faq/. Its rendered text is 1995 bytes and does not contain the licensing section at all, so the claim was read from the raw HTML response, 50234 bytes saved and hashed, where the answer sits in a collapsed FAQ block. sourceHash is the SHA-256 of that raw response.

    What this hash proves, and what it does not

  • “Genuine redaction: a Redact annotation plus page.applyRedactions() permanently removes the marked content, and the original cannot be recovered.”

    Checked by us - the source says this Read 17 September 2026

    The boxed string is gone from the saved file, and the lines 40pt above and below it survived, as did an entirely untouched second page. The output contains zero image XObjects, so nothing was rasterised: the marked text is deleted from the page structure and a solid fill is drawn where it was. qpdf reports no errors and agrees on every marker.

    This is removal, not covering - the first of the three verdicts in the index to be confirmed by test rather than by vendor documentation, and the one where the vendor was telling the truth.

    Standing: Re-read and matched byte for byte

    Check it yourself: the source, the SHA-256, and how we checked
    From
    the text a browser renders
    SHA-256
    8d6ce98159ba113288b2f3c15cde6ffd20f5359718eea9ffc5a81402f7fdf102

    How we checked

    The MuPDF engine driven directly through mupdf.js 1.28.1 on a two-page canary PDF. The redaction rectangle was derived from the engine's own text extraction rather than hard-coded, so the box provably covered the target.

    The saved output was normalised with qpdf, the reference implementation, and searched for every marker; a control ran the identical search against the unredacted original, where all markers are present. Its source page was re-read on 2026-09-21 to record the source hash the original reading did not carry; the wording quoted in the claim is unchanged, so this does not re-date the verification, and sourceHash is of that re-read.

    What this hash proves, and what it does not

Each claim is quoted from the vendor's own pages. This section describes what we have and have not checked - it is not a judgement about anyone.

Sponsorship is distribution, not an endorsement or a promise of search rankings, AI citations, traffic, or sales. This listing is a free entry, compiled from published sources.

Visit MuPDF.js Report a problem

Related reading

How this record was put together

Editorial review.
No editor has signed this record off. That is not the same as nothing having been checked, and the lines below say what has.
Source reading.
3 claims taken from the vendor's own pages, read between 17 September 2026 and 22 September 2026.
Website availability.
The vendor's site was last checked on 21 October 2026.
Behaviour testing.
We ran this ourselves. 1 claim here rest on something we observed rather than something a vendor wrote. The file handling was watched directly.

Sources: github.com/ArtifexSoftware/mupdf.js README and GitHub API metadata; mupdfjs.readthedocs.io FAQ; artifex.com/licensing. Licence from the repository and the project FAQ.