What is ocr-rs (formerly rust-paddle-ocr)?
ocr-rs is a Rust crate for running PaddleOCR's detection and recognition models outside Python. It was called rust-paddle-ocr until 9 September 2026, when the repository was renamed; the old URL redirects. Models run on MNN, Alibaba's lightweight inference runtime, which the crate links as native code, so it is Rust on the outside rather than pure Rust throughout.
It supports PP-OCRv4, PP-OCRv5 and the three PP-OCRv6 tiers (tiny, small, medium). The v6 small and medium models cover 50 languages, including Simplified and Traditional Chinese, Japanese and 46 Latin-script languages; Korean, Cyrillic, Arabic, Devanagari, Thai, Greek, Tamil and Telugu use the v5 script-specific models. Extras include a robust mode for mixed horizontal and vertical text and per-character bounding boxes for selection in image viewers. GPU backends cover CUDA, Vulkan, Metal and OpenCL.
The crate is at version 2.4.1 (5 August 2026) with about 85,000 crates.io downloads; the repository has 339 stars under Apache-2.0. One developer wrote 100 of its 103 commits. A CLI and a C API live in separate repositories.
Is ocr-rs (formerly rust-paddle-ocr) worth it?
ocr-rs earns its place on language coverage. Where Ocrs reads Latin script only, this crate brings PaddleOCR's models, which read Chinese, Japanese and about a dozen other scripts, into a Rust application with a three-line API: load a detector, a recogniser and a character list, then call recognize.
The engineering detail is better than its 339 stars suggest. The crate distinguishes between PP-OCRv6 tiers rather than shipping one model, refuses to fall back silently to CPU when a requested GPU backend is missing, and runs a performance check in CI that fails when the current pipeline's median time runs more than 15% over the legacy pipeline's on the same runner. The opt-in rotated-text mode reruns detection on 90 and 270 degree copies, which matters for Japanese and Chinese vertical text.
The trade-offs are in packaging and people. MNN is C++, so cross-compiling means prebuilt MNN binaries or a source build, and Windows GNU builds need a MinGW toolchain. Converting Paddle models to MNN format runs through a Python script, so a Python step returns at build time even if production never sees one. The HTTP service the README mentions is not public, and almost every commit comes from one maintainer.
Against a vision-language model such as PaddleOCR-VL 1.6, this is a line-level reader: it returns text boxes with confidence scores, not Markdown tables or reading order. For receipts, signage, screenshots and forms in Asian scripts on modest hardware that is often the right trade, and for whole documents it is not.
Where it earns its place
A developer of a Japanese manga and screenshot reader app
Let users select and copy text from images, including vertical lines
Load PP-OCRv6 small, enable RotatedTextMode::Robust and use the character-alignment API to map each glyph to its position for selection. Free; robust mode adds extra detection passes on rotated copies, so it costs latency per image.
An engineer at a cross-border e-commerce firm processing seller uploads
Read Chinese and English text on product photos and invoices at volume
Run the crate inside an existing Rust service on CPU workers, or the CUDA backend on a GPU node for throughput. No per-page fees; the work is building MNN for the target and pinning a model tier.
Before you commit
- Setup
- cargo add ocr-rs, place MNN model files under models/ (convert Paddle inference models with the bundled Python script), then cargo build --release; prebuilt MNN binaries are picked automatically where available.
- Integrations
- Rust crate; C API in paddle-ocr-capi and a CLI in newbee-ocr-cli (separate repositories); GPU via cuda, vulkan, metal and opencl features.
- Data and privacy
- Runs fully locally with no network calls at inference. Apache-2.0 code; PaddleOCR models are Apache-2.0.
- Cost at scale
- Mobile-class models on CPU keep compute cheap; GPU backends are optional. No paid edition or hosted service.
- Limits
- About 6 open issues; GPU cold starts need tuning or a kernel cache; Japanese is not supported by the PP-OCRv6 tiny tier; source-built CUDA on Windows requires MSVC.
What's good
- PP-OCRv4, v5 and all three v6 tiers
- Covers CJK, Arabic, Cyrillic, Indic and Thai scripts
- CUDA, Vulkan, Metal and OpenCL backends with explicit errors
- Vertical-text mode and per-character boxes
What's not
- Links C++ MNN; not pure Rust
- Model conversion needs a Python script
- Effectively one maintainer
- Line text and boxes only, no document structure
Best for
Rust developers who need non-Latin OCR, especially Chinese and Japanese, inside a native application.
ocr-rs (formerly rust-paddle-ocr) alternatives
ocr-rs (formerly rust-paddle-ocr): common questions
- Is ocr-rs (formerly rust-paddle-ocr) worth it?
- ocr-rs is the practical way to get PaddleOCR's Chinese and Japanese coverage into a Rust binary, provided one maintainer and a C++ runtime do not worry you. We rate it 3.7 out of 5.
- How much does ocr-rs (formerly rust-paddle-ocr) cost?
- Free under Apache-2.0; PaddleOCR models are Apache-2.0 from Baidu.
- What are the downsides of ocr-rs (formerly rust-paddle-ocr)?
- Links C++ MNN; not pure Rust; model conversion needs a Python script; effectively one maintainer; line text and boxes only, no document structure.
- Who is ocr-rs (formerly rust-paddle-ocr) best for?
- Rust developers who need non-Latin OCR, especially Chinese and Japanese, inside a native application.
- How much does ocr-rs (formerly rust-paddle-ocr) cost for a team or in production?
- Mobile-class models on CPU keep compute cheap; GPU backends are optional. No paid edition or hosted service.
- Is ocr-rs (formerly rust-paddle-ocr) safe for company data?
- Runs fully locally with no network calls at inference. Apache-2.0 code; PaddleOCR models are Apache-2.0.
- What are the best ocr-rs (formerly rust-paddle-ocr) alternatives?
- The closest alternatives we have reviewed are Ocrs, Xberg (formerly Kreuzberg), deepseek-ocr.rs and Docling.
Answers checked Oct 26, 2026.