Tesseract language packs — trade-offs and how to pick one
Fast, best, or original? A pragmatic guide to Tesseract's three model families and when each one earns its cost.

Tesseract ships three families of language models: tessdata_fast, tessdata, and tessdata_best. They differ in size, speed, and accuracy. For an in-browser OCR product, the choice matters — a 30 MB model versus a 10 MB one is felt on every install.
The three families
- tessdata_fast — integerised LSTM. Smallest download, roughly 2x faster inference, about 1.5 percent lower accuracy on clean text.
- tessdata — the default. Balanced size and accuracy. What most users should choose.
- tessdata_best — float LSTM. Largest download (up to 40 MB per language), slowest, and 0.5-1 percent more accurate on messy text.
What we ship by default
nctools serves tessdata_fast for the default language and lazy-loads tessdata on request. For English, this means the initial OCR download is 6 MB instead of 22 MB, and the recognised text is 98.5 percent as good. The 1.5 percent difference is almost entirely in the last-letter of long uncommon words — not the sort of error that changes the meaning of a contract.
When to pick tessdata_best
- You are OCR-ing 19th-century printed material with worn typefaces.
- You need to extract price lists where a single digit error is expensive.
- You are running a one-off batch and don't care about download time.
Language coverage
Tesseract ships 100+ languages. We expose 14 in the nctools UI — the ones with meaningful demand. Additional languages are one string change away for anyone self-hosting the tool. If you need one added to the public product, tell us in support.
Digits and specialised models
Beyond languages, Tesseract has specialised models. eng_digits recognises only 0-9, which is what we use for a second pass on amounts detected in invoices. equ is trained on printed mathematics. osd handles orientation and script detection — useful for auto-rotating scans.
The right model is the smallest one that gets you the accuracy you need. Fast almost always beats best in production.
Marek Novák
Engineering Lead at nctools
Keep reading
Engineering
OCR in the browser: how Tesseract.js and WebAssembly changed everything
A deep look at running the world's most-used open-source OCR engine at 200+ MB of trained models directly in a user's tab.
ReadEngineering
Client-side PDF extraction with pdfjs-dist: a deep dive
Mozilla's pdfjs-dist library powers every PDF reader on the web. Here is what it does well, where the sharp edges are, and how we build on top of it.
ReadEngineering
Building a zero-upload SaaS: architecture notes
How we structure a product where 90 percent of user activity never touches our server, and what that means for our monitoring, billing and support.
Read