kreuzberg
Kreuzberg extracts text and metadata from a wide range of file formats (57+), generates embeddings and post-processes the results at native speed without needing a GPU. The core is written in Rust with native PDFium, SIMD optimisations and full parallelism, and streaming parsers keep memory use down for multi-gigabyte files.
Native bindings exist for Rust, Python, TypeScript and Node.js (including a WebAssembly build for browsers, Deno and Cloudflare Workers), Ruby, Go, Java, C#, PHP and Elixir, and the same engine can be used as a library, a CLI, a REST API server or an MCP server. Formats span PDF, Office documents, images, HTML, XML, email, archives and academic formats. OCR is available through Tesseract (all languages via the native binding), EasyOCR and PaddleOCR in Python, and Guten in Node.js, and a plugin system allows custom OCR backends, validators, post-processors and extractors. Optional embeddings support is included, and the project is MIT licensed.
Features
Why choose it
Trade-offs
Maintenance check
- Last commit
- 2026-10-25
- Commits, last 90 days
- 100+
- Releases, last 90 days
- 30
- Latest release
- v1.3.10 (2026-10-13)
- Open issues
- 22
- Recent issues with at least one comment
- 12/23
Oldest week on the left; the latest four weeks are orange. Source: GitHub commit activity.
Status rule: archived on GitHub = Archived; last commit within 90 days = Active; 91 to 365 days = Slowing; older = Stale. All figures come from the GitHub API on the date shown.
Most discussed open issues
- #1567 chore(lint): pay down the size and complexity baseline14 comments · 2026-09-05
- #2132 bug(ocr): VLM transcription drops repeated body paragraphs6 comments · 2026-10-16
- #2126 release: prepare 1.4.0 after security, runtime and artifact gates4 comments · 2026-10-16
- #2236 ci: workflows build an unreleased ai-rulez that does not match the named 5.3.01 comments · 2026-10-24
- #2182 HTML extraction panics on whitespace-only inline formatting (xberg 1.3.5–1.3.10, html-to-markdown-rs 3.17)1 comments · 2026-10-20
Issue titles are quoted from GitHub. Open the link to check whether a problem still applies to the version you use.
Who it fits
- You are building an ingestion pipeline and need text and metadata from 57+ formats without a GPU.
- Your stack is Rust, Python, TypeScript, Ruby, Go, Java, C#, PHP or Elixir, or you need a WebAssembly build.
- You process multi-gigabyte files and need streaming parsers, or want custom OCR backends through plugins.
- You just want an assistant to read a file in chat: a simple MCP converter is quicker to set up.
- You need the Ruby binding on Windows: the README's table shows no Windows build for it.
- You need the same OCR everywhere: EasyOCR and PaddleOCR are Python-only and Guten is Node.js-only.
How it differs
anymd is built for agents reading documents through MCP. Kreuzberg is a library and server for extraction at scale, with MCP as one of several interfaces.
Compatibility
Quick start
Use cases
Alternatives
Featured in these lists
Comments
No comments yet. Be the first!