Skip to content
dialegein

Tesseract.js

WebAssembly port of the Tesseract OCR engine for browsers and Node.js.

Jobs OCR

Since 2015

Where your files are processed

No server involved

A JavaScript library that runs the OCR engine as a WebAssembly module inside your own browser or Node process. No vendor service receives the image. Note it fetches language data from a CDN by default, so not every byte is local. 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 engine is a WebAssembly module executed by your own browser or Node process, and no Tesseract.js-operated server receives the image. One caveat from the project's own local-installation guide: unless langPath is set, language data files are downloaded automatically from a CDN, so 'local' describes the processing, not all the network traffic.

What it does

A JavaScript library that performs optical character recognition on images and video frames, in a browser or under Node.js. It does not reimplement OCR in JavaScript — it loads a WebAssembly build of the Tesseract engine inside a Web Worker and returns recognised text. Word and symbol geometry, hOCR and TSV are available as outputs rather than on by default: version 6 disables everything other than text unless it is asked for, and the README shows hOCR being enabled explicitly. Recognition languages are downloaded at runtime rather than bundled.

Best for: Developers who need offline or privacy-sensitive OCR inside a web app or Node service, and who can either accept language data being fetched from a CDN or self-host those files.

Worth knowing: It cannot read PDFs at all, so you must rasterise pages yourself before OCR, and accuracy on poor-quality scans trails commercial OCR engines. Language data is fetched from a CDN by default.

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
tesseract.projectnaptha.com
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
Apache-2.0
Redaction
No redaction feature
Programmatic access
Embeddable library · Browser JavaScript
Last availability check
Responded in 93 ms 16 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

From the vendor's own documentation, read 22 September 2026. Not tested by us.

What that does not establish: The repository README is the source. tesseract.js is the same OCR engine compiled for the browser, so the same reasoning applies: recognition, not modification. The vendor’s own published material was read on 22 September 2026 and contains no mention of redaction, sanitisation, blackout or whiteout. Absence from a vendor’s own material is not proof that a feature does not exist — it may be undocumented, or on a page the reading did not reach — but for a NEGATIVE claim it is the strongest evidence available, and it is weaker than a positive quote. Recorded as such rather than presented as certainty.

https://github.com/naptha/tesseract.js

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.

  • “Tesseract.js aims to bring the Tesseract OCR engine (a separate project) to the browser and Node.js, and works by wrapping a WebAssembly port of Tesseract.”

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

    Confirmed verbatim: the sentence appears unaltered in the README, and it is a description of architecture rather than of results, which makes it the more checkable kind of capability claim. Two details in it are worth having: it wraps "a WebAssembly port of Tesseract", so the engine is not reimplemented, and it describes Tesseract as "a separate project", which matters for licensing and for anyone expecting the two to move together. The sentence immediately after the claim is a scope limit the claim splits across two entries in this index — see the neighbouring claim about PDF files and the recognition model. Recorded as the project's documentation; no library was installed and no control was run.

    Standing: Re-read: the text is unchanged, but the page publishes values that move

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

    How we checked: Re-verified verbatim on 2026-09-22: https://github.com/naptha/tesseract.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-naptha-tesseract-js-08f51277.txt.

    What this hash proves, and what it does not

  • “Most notably, Tesseract.js does not support PDF files and does not modify the Tesseract recognition model to improve accuracy.”

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

    Confirmed verbatim: the sentence is the second half of the paragraph, following "This project does not modify core Tesseract features." Both halves are limitations and both are the kind a reader needs before choosing: no PDF input, and no model tuning for accuracy. The second one is the more consequential and the easier to misread — a wrapper around Tesseract inherits Tesseract's accuracy rather than improving on it, and a reader who assumed otherwise would be disappointed by results rather than by an error message. This is the third library in this batch to document what it cannot do, with pdfplumber and PDFsharp.

    Standing: Re-read: the text is unchanged, but the page publishes values that move

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

    How we checked: Re-verified verbatim on 2026-09-22: https://github.com/naptha/tesseract.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-naptha-tesseract-js-08f51277.txt.

    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 Tesseract.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.
2 claims taken from the vendor's own pages, read between 22 September 2026 and 22 September 2026.
Website availability.
The vendor's site was last checked on 16 October 2026.
Behaviour testing.
We ran this ourselves. The file handling was watched directly.

Sources: github.com/naptha/tesseract.js (repository, README, local-installation doc); GitHub API metadata; npm registry metadata. Licence from the repository.