MinerU Rust
Parse PDF, image, and Office documents into clean Markdown with MinerU: a Rust client library, command-line tools, and a local API server. PDF rendering is pure Rust and needs no native PDF runtime such as PDFium.
The MinerU VLM model can run in two ways:
- Remote — point the tools at an OpenAI-compatible MinerU VLM service and parse documents without running a model on your own machine.
- Local (optional) — serve a quantized MinerU model yourself with llama.cpp
(
llama-server) and point the tools at it; see Docker.
Within the MinerU 3.4.4 VLM scope, MinerU Rust is a drop-in replacement for the
MinerU Python SDK's vlm-http-client path and can replace that VLM workflow
completely. It does not implement or claim compatibility with non-VLM backends.
See the compatibility contract, the
Chinese usage guide, and the English usage guide.
Document-limit controls and their CLI/API applicability are summarized in the usage guides.
The remote protocol is pinned to the MinerU vlm-http-client transport
baseline, so a MinerU-compatible VLM endpoint is required — a general-purpose
chat model will not produce layout results.
Requires Rust 1.89 or newer.
Quickstart
Configure the VLM service with three environment variables:
| Variable | Meaning | Example |
|---|---|---|
MINERU_VL_SERVER |
VLM service base URL | https://host/v1 |
MINERU_VL_MODEL_NAME |
Model ID | model-id |
MINERU_VL_API_KEY |
Bearer token | your-key |
Install the mineru command with Cargo, pip, or npm:
cargo install mineru # Rust
pip install mineru-rs # Python
npm install @alexsun-top/mineru # Node.js
Then parse a document:
mineru -p input.pdf -o out/
Your markdown appears in out/. Find a usable model ID with GET /v1/models
on your endpoint. On success the out/ directory contains document.md,
document.json, middle.json, content_list.json, cropped assets/, and a
layout preview {stem}_layout.pdf.
Prefer the MINERU_VL_API_KEY environment variable over --api-key so the
key does not end up in shell history.
Local: serve the model with llama.cpp
Run the compose llama-server profile (or start llama-server yourself with a
quantized MinerU GGUF model), then point MINERU_VL_SERVER at
http://localhost:30000/v1. See Docker.
Rust library
cargo add mineru
use mineru::{RunOptions, run};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
run(RunOptions::new("input.pdf", "out/")).await?;
Ok(())
}
Python
Wheels support CPython 3.9 and newer. Install with uv or pip:
uv add mineru-rs
# or: pip install mineru-rs
parse() returns the markdown string in memory; save it yourself:
import asyncio
from pathlib import Path
import mineru_rs
async def main() -> None:
result = await mineru_rs.parse("input.pdf")
await asyncio.to_thread(
Path("out.md").write_text, result.markdown, encoding="utf-8"
)
asyncio.run(main())
run() writes the full output tree to an output directory instead (see the
English usage guide). The wheel installs two equivalent
console commands, mineru and mineru-rs; prefer mineru-rs when the
upstream Python mineru package is also installed, since both provide a
mineru entry point and the one earlier on PATH wins. Releases are wheels
only; there is no sdist or source fallback for unsupported platforms or PyPy.
The Python wheel does not bundle the mineru-office-convert helper: Office
format (.docx/.pptx/.xlsx) input is not yet supported in the binding and
fails with "office conversion is unavailable". PDF and image input are
unaffected; use the Rust CLI (cargo install mineru --features office) or
mineru-api for Office conversion.
Node.js
Requires Node.js 18 or newer. Install with pnpm or npm:
pnpm add @alexsun-top/mineru
# or: npm install @alexsun-top/mineru
import { writeFile } from 'node:fs/promises'
import mineru from '@alexsun-top/mineru'
const { markdown } = await mineru.parse({ path: 'input.pdf' })
await writeFile('out.md', markdown)
run({ path, output }) writes the full output tree to output instead (see
the English usage guide). The root package installs two
equivalent binaries, mineru and mineru-rs, both pointing at
bin/mineru.js; prefer mineru-rs if another mineru command is already on
PATH.
The npm packages do not bundle the mineru-office-convert helper: Office
format (.docx/.pptx/.xlsx) input is not yet supported in the binding and
fails with "office conversion is unavailable". PDF and image input are
unaffected; use the Rust CLI (cargo install mineru --features office) or
mineru-api for Office conversion.
CLI and API server
cargo install mineru
mineru --help
The package installs the mineru and mineru-api binaries. To also install
the mineru-office-convert Office conversion helper, build with --features office:
cargo install mineru --features office
mineru-api is the HTTP API server: it accepts documents, calls the
configured VLM, and returns result archives. It performs no local inference.
export MINERU_VL_SERVER="https://<server>"
export MINERU_VL_MODEL_NAME="<model-id>"
export MINERU_VL_API_KEY="<your-key>"
mineru-api --port 8000
Submit a document as an async task and fetch the result:
curl -X POST http://127.0.0.1:8000/tasks \
-F "files=@input.pdf" -F "backend=vlm-http-client" -F "response_format_zip=true"
# poll the returned status_url, then download result_url
The mineru client can submit through a running server:
mineru -p input.pdf -o output --api-url http://127.0.0.1:8000
--api-key can pass a Bearer token, but prefer MINERU_VL_API_KEY: a key on
the command line is visible in the process list.
See the Chinese usage guide or English usage guide for service configuration and complete options.
Install
- crates.io —
cargo install mineru(add--features officefor the Office helper; requires Rust 1.89+). - Python —
pip install mineru-rs(CPython 3.9+). - Node.js —
npm install @alexsun-top/mineru(Node.js 18+). - Docker — see Docker.
Build from source:
git clone https://github.com/agentsyaml/mineru-rs
cd mineru-rs
cargo build --release
./target/release/mineru --help
As a library in your own project: cargo add mineru.
The binaries
| Binary | Purpose |
|---|---|
mineru |
Canonical CLI: PDF, image, and Office documents, either directly against a VLM or through a mineru-api server. |
mineru-api |
HTTP API server (see above). |
mineru-office-convert |
Office (.docx/.pptx/.xlsx) → PDF conversion helper used by mineru; built with --features office. |
Docker
Docker Compose profiles
The bundled docker-compose.yaml runs the MinerU
OpenAI-compatible server on an NVIDIA GPU behind one of two profiles:
| Profile | Image | Purpose |
|---|---|---|
openai-server |
alexsuntop/mineru:3.4.2 |
vLLM-backed MinerU server (default, port 30000). |
llama-server |
ghcr.io/ggml-org/llama.cpp:server-cuda |
llama.cpp server for quantized (GGUF) MinerU models, port 30000. |
Start the vLLM server:
docker compose --profile openai-server up -d
Start the quantized llama.cpp server. Put your GGUF file(s) in ./models
(or set LLAMA_MODELS_DIR), then point LLAMA_MODEL at the container path:
LLAMA_MODEL=/models/mineru-q4_k_m.gguf \
docker compose --profile llama-server up -d
# or fetch from Hugging Face without local files:
# LLAMA_ARG_HF_REPO=your-org/mineru-gguf:Q4_K_M docker compose --profile llama-server up -d
Both server profiles expose http://localhost:30000 (override with
MINERU_PORT_OVERRIDE_VLLM / MINERU_PORT_OVERRIDE_LLAMA); they map the same
host port, so start only one at a time.
COMPOSE_PROFILES can also activate a profile implicitly, e.g.
COMPOSE_PROFILES=llama-server docker compose up -d.
There is no CPU Docker image.
Examples
- examples/python-uv — Python with
uv - examples/node-pnpm — Node.js with
pnpm
Build and test
cargo build --release
cargo test
License
MIT OR Apache-2.0. Model weights downloaded from Hugging Face are subject to the license shown on their model card.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mineru_rs-0.2.8-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: mineru_rs-0.2.8-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 9.4 MB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ceed5ac2ed2b3a1b9e6889beed686a77189ad1dd33e838d56c11a4047b192f7
|
|
| MD5 |
2ddfb3865b7b9bd9ff2c8eb58bf0f908
|
|
| BLAKE2b-256 |
8c85ef4f654ce13374dcbe8aa6e7a4e572edbf0d4d9fe6b5184404f8661b7533
|
Provenance
The following attestation bundles were made for mineru_rs-0.2.8-cp39-abi3-win_amd64.whl:
Publisher:
release.yml on agentsyaml/mineru-rs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineru_rs-0.2.8-cp39-abi3-win_amd64.whl -
Subject digest:
6ceed5ac2ed2b3a1b9e6889beed686a77189ad1dd33e838d56c11a4047b192f7 - Sigstore transparency entry: 2466061415
- Sigstore integration time:
-
Permalink:
agentsyaml/mineru-rs@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agentsyaml
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 11.2 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27b8ed523d3d9c7239589210abe137ac438640b25d69c7d5516d748a71ae276c
|
|
| MD5 |
40c0ecec583c88b44fd85d4dd161a490
|
|
| BLAKE2b-256 |
efc8bd274c658d435e3dc069e219f1a366a5e48a57036079b7cfc4af568e5976
|
Provenance
The following attestation bundles were made for mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on agentsyaml/mineru-rs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
27b8ed523d3d9c7239589210abe137ac438640b25d69c7d5516d748a71ae276c - Sigstore transparency entry: 2466061211
- Sigstore integration time:
-
Permalink:
agentsyaml/mineru-rs@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agentsyaml
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 10.5 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be4e4812d56874ef28d98dbbc9f3f2e146dfad51cb166c6c21dabd8f84b85a2a
|
|
| MD5 |
c47a4a5a76341c5b234b48d3126271e8
|
|
| BLAKE2b-256 |
a947d3cbc38ab9e6032be57f9d32bed3ccd26efd7a67f0300a0fd66f231110eb
|
Provenance
The following attestation bundles were made for mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on agentsyaml/mineru-rs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineru_rs-0.2.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
be4e4812d56874ef28d98dbbc9f3f2e146dfad51cb166c6c21dabd8f84b85a2a - Sigstore transparency entry: 2466061489
- Sigstore integration time:
-
Permalink:
agentsyaml/mineru-rs@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agentsyaml
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mineru_rs-0.2.8-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: mineru_rs-0.2.8-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 9.5 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f3b2f886a27746cb14622efd7ec6afa90ca62508fd50b78b87a8a3fb52353b1
|
|
| MD5 |
dc0ca89a9d9203eafd9346051feb0a3b
|
|
| BLAKE2b-256 |
4a53417150db777c4868271be6ca946627d5ccd86008fa6f0cefc7d397a7289c
|
Provenance
The following attestation bundles were made for mineru_rs-0.2.8-cp39-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on agentsyaml/mineru-rs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineru_rs-0.2.8-cp39-abi3-macosx_11_0_arm64.whl -
Subject digest:
8f3b2f886a27746cb14622efd7ec6afa90ca62508fd50b78b87a8a3fb52353b1 - Sigstore transparency entry: 2466061602
- Sigstore integration time:
-
Permalink:
agentsyaml/mineru-rs@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agentsyaml
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mineru_rs-0.2.8-cp39-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: mineru_rs-0.2.8-cp39-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 10.3 MB
- Tags: CPython 3.9+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0917151022f95da007105131fade7a4a37030b35743e26d7ee4ba8efed122bd3
|
|
| MD5 |
6689fe492cf98bbb6848698de0c552d1
|
|
| BLAKE2b-256 |
2049b012f39bc03bfc1f08f38bd89d0882c05a04cade41055ffc06f99f27cff5
|
Provenance
The following attestation bundles were made for mineru_rs-0.2.8-cp39-abi3-macosx_10_12_x86_64.whl:
Publisher:
release.yml on agentsyaml/mineru-rs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineru_rs-0.2.8-cp39-abi3-macosx_10_12_x86_64.whl -
Subject digest:
0917151022f95da007105131fade7a4a37030b35743e26d7ee4ba8efed122bd3 - Sigstore transparency entry: 2466061316
- Sigstore integration time:
-
Permalink:
agentsyaml/mineru-rs@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/agentsyaml
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c60380491ed7b070e4074e6cfe87d06f6513bd0c -
Trigger Event:
workflow_dispatch
-
Statement type: