Skip to content
dialegein

Surya

Open document OCR and layout model that returns text, reading order and tables as structured output.

Operated by Endless Labs, Inc. dba Datalab

Where your files are processed

No server involved

An OCR and layout model that runs on your own hardware. It does need an inference backend — vLLM or llama.cpp — which it starts as a local process, and the documentation allows pointing it at a server elsewhere through an environment variable, but no vendor service receives the document by default. 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.

The model and the code run on your own hardware. It does need an inference server — vLLM or llama.cpp — which it will spawn as a local process by default, but the environment variable SURYA_INFERENCE_URL can point it at a server somewhere else, so an operator can send documents off the machine by configuration. Datalab also sells a managed platform, which is a separate hosted product rather than this package.

What it does

Surya is a document OCR and analysis toolkit built on a single 650-million-parameter vision-language model. It reads a page and returns structured JSON or HTML: the text, a layout label for each block, the reading order, table rows and columns, and mathematics as LaTeX. It runs from the command line or from Python, and it needs a local inference server — vLLM on a GPU or llama.cpp on a CPU — which it will start for you. Its sibling Marker turns the same output into Markdown, and both come from Datalab.

Best for: Teams building a document pipeline who need reading order and table structure rather than raw text, and who are willing to run a model to get it. It is built for hard pages: multi-column layouts, scanned tables and old mathematics, on documents in any of the 91 languages the vendor benchmarks.

Worth knowing: The licence is split, and the half that matters is the model. The code is Apache-2.0, but the weights carry a modified AI Pubs Open RAIL-M licence that is free for research and personal use and for companies under a revenue and funding threshold, and that additionally restricts entities offering competing products or services — so a growing business can be using it acceptably one year and be out of licence the next, and the remedy is a commercial licence from Datalab. It also expects an inference backend: the documentation assumes you will run vLLM or llama.cpp, which means a GPU for realistic throughput, and the package's own performance figures are measured against a running server rather than a laptop. Expect the output schema to move: the vendor's own release notes describe a rewrite in which text_lines became blocks, the layout output changed shape and table cells lost their header and span attributes, which is a migration for anything reading the JSON. And the accuracy numbers, including the benchmark it tops, are the vendor's own.

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
Linux · Windows · macOS · Self-hosted
Website
github.com
Requires an account
Not applicable
Free tier
Yes
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 for the code; model weights under a modified AI Pubs Open RAIL-M licence (free for research, personal use and organisations under US$5M funding or revenue)
Redaction
No redaction feature
Programmatic access
Embeddable library · Command line
Last availability check
Responded in 356 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.

“Surya is a 650M param OCR model with these features: Accuracy - scores 83.3% on olmOCR-bench (top under 3B params); Layout analysis (table, image, header, etc.) with reading order; Table recognition (rows + columns)”

What that does not establish: Recorded as `none` on absence: Surya reads page images and emits text, layout, reading order and tables as JSON or HTML, and nothing in its documentation describes editing a PDF or removing content from one. It is a reader, and it does not write PDFs. What it does not establish: anything about the safety of its output. The reading text it extracts is the document's content, so this is an extraction tool in the same sense as Tika and pdfminer.six, and the same warning applies — reading a document is not redacting it.

https://github.com/datalab-to/surya

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.

  • “The Surya code is licensed under Apache 2.0. The model weights use a modified AI Pubs Open Rail-M license (free for research, personal use, and startups under $5M funding/revenue). For broader commercial licensing of the model weights, visit our pricing page here.”

    Checked by us — the source says this Read 1 October 2026

    Confirmed. The quoted text appears in the rendered page as read on 2026-10-01. This claim was carried as reported rather than checked until this read.

    Standing: Not re-read against the live source

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

    How we checked: Read as rendered text in headless Chrome on 2026-10-01 and saved to the evidence archive, so the read can be repeated against the same file. Comparison ignores case, punctuation and hyphenation, which is why "open-source" on the record matches "open source" on the page.

    What this hash proves, and what it does not

  • “Surya is a 650M param OCR model with these features: Accuracy - scores 83.3% on olmOCR-bench (top under 3B params)”

    Checked by us — the source says this Read 1 October 2026

    Confirmed. The quoted text appears in the rendered page as read on 2026-10-01. This claim was carried as reported rather than checked until this read.

    Standing: Not re-read against the live source

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

    How we checked: Read as rendered text in headless Chrome on 2026-10-01 and saved to the evidence archive, so the read can be repeated against the same file. Comparison ignores case, punctuation and hyphenation, which is why "open-source" on the record matches "open source" on the page.

    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 Surya 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 1 October 2026 and 1 October 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: The project repository at github.com/datalab-to/surya, read 2026-09-22 with headless Chrome. Project documentation, not independently tested; the model was not downloaded, no inference server was run and no page was processed.