Skip to main content

MinerU Rust

简体中文 | English

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 output/ 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

Prebuilt

  • Docker — llama.cpp server profile, see Docker.

  • crates.io — install the remote-only command-line tools (requires Rust 1.89+):

    cargo install mineru
    cargo install mineru --features office   # also installs the Office helper
    
  • Pythonpip install mineru-rs (CPython 3.9+).

  • Node.jsnpm install @alexsun-top/mineru (Node.js 18+).

Build from source

Clone the repository and build the remote CLI/API tools:

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.

Command-line usage

Options

The canonical mineru command reads the service address and model from the MINERU_VL_SERVER and MINERU_VL_MODEL_NAME environment variables:

export MINERU_VL_SERVER="https://<server>"
export MINERU_VL_MODEL_NAME="<model-id>"
export MINERU_VL_API_KEY="<your-key>"
mineru -p input.pdf -o output

Output

  • mineru (remote) writes to output/ directly: document.md, document.json, middle.json, content_list.json, cropped assets/, and a layout preview {stem}_layout.pdf.

{stem} is the input filename without its extension.

API server

mineru-api is the HTTP API server: it accepts documents, calls the configured VLM, and returns result archives. It performs no local inference. See CLI and API server for the API-mode submission flow.

输入上限与放大配置 / Input limits and how to raise them

流水线在多个独立阶段执行大小上限。触发上限时,报错消息会给出具体文件名、大小、限制值与放大旋钮(flag 或环境变量);单个文档失败不会中断整批处理,其余文档继续。本地解析大文件会按文件大小占用内存(磁盘总量上限与常驻内存上限相互独立)。

上限 默认值 Flag 环境变量 触发阶段
本地驻留/解析上限 max_pdf_bytes 1 GiB --max-pdf-bytes MINERU_MAX_PDF_BYTES 文件读取与 PDF 本地解析(含办公室文档转换后 PDF)
输入传输上限 max_input_bytes 4_293_918_719(≈4 GiB) --max-input-bytes MINERU_MAX_INPUT_BYTES 输入摄取/传输
输出上限 max_output_bytes 8 GiB --max-output-bytes MINERU_MAX_OUTPUT_BYTES 输出生成
OOXML 归档上限 1 GiB --ooxml-archive-bytes MINERU_OOXML_ARCHIVE_BYTES Office 文档预检
Office 转换输入上限 32 MiB --office-input-bytes MINERU_OFFICE_INPUT_BYTES Office 转换
服务器端文件上限(--api-url 模式) 1 GiB --file-cap(服务端 mineru-api MINERU_API_FILE_CAP(服务端) 服务器上传

Each limit can be raised independently via its flag or environment variable; see the Chinese usage guide or English usage guide for the full option tables.

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

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

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mineru_rs-0.2.7-cp39-abi3-win_amd64.whl (9.4 MB view details)

Uploaded CPython 3.9+Windows x86-64

mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

mineru_rs-0.2.7-cp39-abi3-macosx_11_0_arm64.whl (9.6 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

mineru_rs-0.2.7-cp39-abi3-macosx_10_12_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file mineru_rs-0.2.7-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: mineru_rs-0.2.7-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

Hashes for mineru_rs-0.2.7-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2e766a6b8707bbf4cc870ca3a1707835a395cd363032435f0856cd331dde2d8f
MD5 c9cd8c062e2a4362177a2e4d9b71ce0c
BLAKE2b-256 3e070f1aec16b039726a303907f869ed83c55dab661035ea9610cd4fe3a24e56

See more details on using hashes here.

Provenance

The following attestation bundles were made for mineru_rs-0.2.7-cp39-abi3-win_amd64.whl:

Publisher: release.yml on agentsyaml/mineru-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6d8a9432b80006f0060eec25b157f589af7e88edb25fbe4f6a7bfd530b1d277b
MD5 6df3dcc9696497ea10a57a38c5eff0fe
BLAKE2b-256 02dd4b099e8860a04a1626f283cca28455833ce4f8de4b991a133ed35b8d5eba

See more details on using hashes here.

Provenance

The following attestation bundles were made for mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on agentsyaml/mineru-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4938b8f10dc1edf7401454177f728be617e118245984c1d1848cb73dfb1451c7
MD5 298511b0f3f907b997ef9461b22d8111
BLAKE2b-256 b744f6942f1527fcf39941a49553d402e8352df495fa41933f74c21372aabb5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for mineru_rs-0.2.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on agentsyaml/mineru-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mineru_rs-0.2.7-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mineru_rs-0.2.7-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18f387e0f171228d750f7bc3e7d46bd2420af4a68b2843374eac9c2a50003a69
MD5 742a14a0130567b6d60d3016a2cc06e4
BLAKE2b-256 f33841e7e3d6fbe636f6be18b41b578f110eef8dec40c5784f054f255cc5740e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mineru_rs-0.2.7-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on agentsyaml/mineru-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mineru_rs-0.2.7-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mineru_rs-0.2.7-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2c8a825ed2c5b239e8595e4b7d8b911102b36d901a8e965860855712974f8865
MD5 770735d7a1e1b22b747d2046b49e6bdb
BLAKE2b-256 78bddfc110f9f74e1257872543ea58b955aec0925061be97698ca62ca0159393

See more details on using hashes here.

Provenance

The following attestation bundles were made for mineru_rs-0.2.7-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on agentsyaml/mineru-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.0

5 files

0.2.9

5 files

0.2.8

5 files

This release

0.2.7 This release

5 files

0.2.6

5 files

0.2.5

5 files

0.2.4

5 files

0.2.3

5 files

0.2.2

5 files

0.2.1

5 files

0.2.0

5 files

0.1.1

5 files

0.1.0

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page