XLiteOCR

A self-hosted OCR engine,
assembled from open source.

XLiteOCR is not a wrapper around a cloud API. It is a real, CPU-only OCR pipeline you run on your own servers, built entirely from permissively licensed open-source components. This page documents exactly what is inside it and how the pieces fit together.

What it does

XLiteOCR turns images and PDFs into structured, machine-readable data. There are two modes, both running on plain CPUs with no GPU.

Core (fast)

Text with precise bounding boxes and per-line confidence, plus the detected color of each line returned as hex, RGB, and a readable color name.

Structured (optional)

Passing ?structured=true adds markdown, typed layout blocks (title / text / table / figure), HTML tables, and figures vectorized to scalable SVG.

The tech stack

Every layer is a permissively licensed open-source component. There is no GPL or AGPL anywhere in the pipeline, and no proprietary model weights, so the whole thing is free to run, modify, and ship.

Layer Component License
Language & runtime Python 3.11+ engine & API — atop a polyglot native runtime: C++ (PaddlePaddle, PDFium) and Rust (VTracer)
Text detection + recognition PaddleOCR 2.9.1 — PP-OCRv3 detection + PP-OCRv4 English recognition (code + released weights) Apache-2.0
Layout, structure & tables PP-Structure — document layout analysis, table parsing, markdown reconstruction Apache-2.0
Inference runtime PaddlePaddle 2.6.2 — CPU build, MKL-DNN enabled Apache-2.0
PDF rasterization pypdfium2 4.30.0 — Google PDFium, V8-free build (no JavaScript engine bundled) BSD-3 / Apache-2.0
Raster → SVG vectorizer VTracer 0.6.11 — geometric tracing of figures, logos, and line art (never potrace, which is GPL) MIT
Imaging & numerics Pillow 11.0.0 + NumPy 1.26.4 — color detection and array math (deliberately no OpenCV in the color path) HPND / BSD-3
HTTP service FastAPI 0.115.6 + Uvicorn 0.34.0 — the /ocr and /health API, single worker MIT / BSD-3

PaddleOCR 2.9.1 with lang='en' serves PP-OCRv3 detection and PP-OCRv4 English recognition, both Apache-2.0. PP-OCRv5 multilingual weights are a configuration swap; the pipeline shape is identical. The full 82-package dependency manifest, resolved from each package's authoritative license metadata, ships in the source as THIRD_PARTY_LICENSES.md.

How a page flows through

A single in-process pipeline. Nothing is written to disk, and nothing leaves the machine.

01

Ingest

Image or PDF is read into memory. PDFs are rasterized page by page with pypdfium2.

02

Detect + recognize

PaddleOCR finds text regions and reads them, returning boxes, text, and confidence.

03

Color

Pillow + NumPy sample the dominant glyph-stroke color of each line.

04

Structure

On request, PP-Structure reconstructs layout into markdown, blocks, and HTML tables.

05

Vectorize

Figure regions are traced to SVG by VTracer and returned inline as JSON.

Design principles

Processed in memory

The service reads each upload into memory and never writes documents to disk.

CPU-only, no GPU

Every component runs on ordinary CPUs. No accelerator, no specialized hardware bill.

Permissive all the way down

A test in the source (tests/test_compliance.py) is a hard license gate: the build fails if any GPL/AGPL component appears or if the bundled PDFium is not V8-free.

No auth bundled, on purpose

It binds to localhost and expects to sit behind your own reverse proxy and access control. Honest about its boundaries.

Apache-2.0, top to bottom

XLiteOCR is released under the Apache License 2.0 and is assembled only from permissively licensed components: Apache 2.0, MIT, BSD, HPND, and the like. There is no GPL or AGPL anywhere in the stack, so there are no copyleft obligations or licensing surprises to clear before you put it into production.

Apache 2.0 MIT BSD HPND No GPL / AGPL No GPU Self-hosted Python 3.11+ · C++ · Rust

Get the source

XLiteOCR is open source under Apache-2.0. The interactive demo lets you download the full source as a zip once you are in. Want access to the demo and the source? Email us and we will send you the access password.