xberg 1.0.0-rc.26
xberg: ^1.0.0-rc.26 copied to clipboard
High-performance document intelligence library
Dart / Flutter #
Extract text, tables, images, metadata, and code intelligence from 97 file formats and 306 programming languages including PDF, Office documents, images, and audio/video transcripts where native transcription is available. Dart bindings via flutter_rust_bridge for both Flutter apps and pure-Dart server contexts, with isolate-safe Future/Stream APIs.
What This Package Provides #
- Document intelligence core — extract text, tables, images, metadata, entities, keywords, code intelligence, and transcripts in builds that enable transcription.
- Format coverage — PDF, Office, images, HTML/XML, email, archives, notebooks, citations, scientific formats, plain text, and audio/video formats in builds that enable transcription.
- OCR choices — Tesseract, PaddleOCR, Candle where supported, VLM OCR through liter-llm, and plugin hooks for custom backends.
- Same engine as every binding — Rust, Python, Node.js, Go, Java, PHP, Ruby, .NET, Elixir, WASM, Kotlin Android, Swift, Dart, Zig, and C FFI share the same Rust implementation.
- Dart package — Future/Stream API through flutter_rust_bridge.
Installation #
Package Installation #
Install via pub:
dart pub add xberg
For Flutter projects:
flutter pub add xberg
System Requirements #
- Dart SDK 3.0+ for pure-Dart consumers
- Flutter projects supported on macOS, iOS, Android, Linux, and Windows; Flutter Web is not supported
- Native runtime delivered via
flutter_rust_bridgewith bundled binaries for the supported platforms - Optional: Tesseract OCR for OCR functionality
Quick Start #
Basic Extraction #
Extract text, metadata, and structure from any supported document format:
import 'package:xberg/xberg.dart';
final output = await Xberg.extract(
const ExtractInput(
kind: ExtractInputKind.uri,
uri: 'document.pdf',
),
);
print(output.results.first.content);
Common Use Cases #
Extract with Custom Configuration
Most use cases benefit from configuration to control extraction behavior:
With OCR (for scanned documents):
import 'package:xberg/xberg.dart';
Future<void> main() async {
const config = ExtractionConfig(
useCache: true,
enableQualityProcessing: true,
forceOcr: true,
disableOcr: false,
ocr: OcrConfig(
enabled: true,
backend: 'tesseract',
language: ['eng'],
autoRotate: false,
vlmFallback: VlmFallbackPolicy.disabled(),
),
resultFormat: ResultFormat.unified,
outputFormat: OutputFormat.plain(),
includeDocumentStructure: false,
maxArchiveDepth: 3,
useLayoutForMarkdown: false,
url: UrlExtractionConfig(
mode: UrlExtractionMode.auto,
allowLocalFileInputs: true,
allowFileUris: true,
),
);
const input = ExtractInput(
kind: ExtractInputKind.uri,
uri: 'scanned.pdf',
);
final output = await XbergBridge.extract(input, config: config);
final document = output.results.first;
print(document.content);
}
Table Extraction
See Configuration Guide for table extraction options.
Processing Multiple Files
import 'dart:convert';
import 'package:xberg/xberg.dart';
final output = await Xberg.extractBatch([
const ExtractInput(
kind: ExtractInputKind.uri,
uri: 'document.pdf',
),
ExtractInput(
kind: ExtractInputKind.bytes,
bytes: utf8.encode('Hello from memory'),
mimeType: 'text/plain',
filename: 'note.txt',
),
]);
for (final result in output.results) {
print(result.content);
}
Async Processing
For non-blocking document processing:
import 'package:xberg/xberg.dart';
final output = await Xberg.extract(
const ExtractInput(
kind: ExtractInputKind.uri,
uri: 'document.pdf',
),
);
print(output.results.first.content);
Next Steps #
- Installation Guide - Platform-specific setup
- API Documentation - Complete API reference
- Examples & Guides - Full code examples and usage guides
- Configuration Guide - Advanced configuration options
Features #
Supported File Formats (96) #
97 file formats across 8 major categories with intelligent format detection and comprehensive metadata extraction.
Office Documents
| Category | Formats | Capabilities |
|---|---|---|
| Word Processing | .docx, .docm, .doc, .dotx, .dotm, .dot, .odt, .pages |
Full text, tables, images, metadata, styles |
| Spreadsheets | .xlsx, .xlsm, .xlsb, .xls, .xla, .xlam, .xltm, .xltx, .xlt, .ods, .numbers |
Sheet data, formulas, cell metadata, charts |
| Presentations | .pptx, .pptm, .ppt, .ppsx, .potx, .potm, .pot, .odp, .key |
Slides, speaker notes, images, metadata |
.pdf |
Text, tables, images, metadata, OCR support | |
| eBooks | .epub, .fb2 |
Chapters, metadata, embedded resources |
| Database | .dbf |
Table data extraction, field type support |
| Hangul | .hwp, .hwpx |
Korean document format, text extraction |
Images (OCR-Enabled)
| Category | Formats | Features |
|---|---|---|
| Raster | .png, .jpg, .jpeg, .gif, .webp, .bmp, .tiff, .tif |
OCR, table detection, EXIF metadata, dimensions, color space |
| Advanced | .jp2, .jpx, .jpm, .mj2, .jbig2, .jb2, .pnm, .pbm, .pgm, .ppm |
OCR via hayro-jpeg2000 (pure Rust decoder), JBIG2 support, table detection, format-specific metadata |
| HEIC family | .heic, .heics, .heif, .avif, .avcs |
EXIF metadata, optional libheif pixel decoding |
| Vector | .svg |
DOM parsing, embedded text, graphics metadata |
Audio & Video
| Category | Formats | Features |
|---|---|---|
| Audio | .mp3, .mpga, .m4a, .wav, .webm |
Whisper transcription when native transcription is available |
| Video audio track | .mp4, .mpeg, .webm |
Audio-track transcription only |
Web & Data
| Category | Formats | Features |
|---|---|---|
| Markup | .html, .htm, .xhtml, .xml, .svg |
DOM parsing, metadata (Open Graph, Twitter Card), link extraction |
| Structured Data | .json, .yaml, .yml, .toml, .csv, .tsv |
Schema detection, nested structures, validation |
| Text & Markdown | .txt, .md, .markdown, .djot, .mdx, .rst, .org, .rtf |
CommonMark, GFM, Djot, MDX, reStructuredText, Org Mode |
Email & Archives
| Category | Formats | Features |
|---|---|---|
.eml, .msg, .pst |
Headers, body (HTML/plain), attachments, threading | |
| Archives | .zip, .tar, .tgz, .gz, .7z |
File listing, nested archives, metadata |
Academic & Scientific
| Category | Formats | Features |
|---|---|---|
| Citations | .bib, .ris, .nbib, .enw |
Structured parsing: RIS, PubMed/MEDLINE, EndNote XML, BibTeX/BibLaTeX, CSL JSON by MIME type |
| Scientific | .tex, .latex, .typ, .typst, .jats, .ipynb |
LaTeX, Typst, Jupyter notebooks, PubMed JATS |
| Publishing | .fb2, .docbook, .dbk, .docbook4, .docbook5, .opml |
FictionBook, DocBook XML, OPML outlines |
| Documentation | MIME-only POD, mdoc, troff | Technical documentation formats |
Code Intelligence (306 Languages)
| Feature | Description |
|---|---|
| Structure Extraction | Functions, classes, methods, structs, interfaces, enums |
| Import/Export Analysis | Module dependencies, re-exports, wildcard imports |
| Symbol Extraction | Variables, constants, type aliases, properties |
| Docstring Parsing | Google, NumPy, Sphinx, JSDoc, RustDoc, and 10+ formats |
| Diagnostics | Parse errors with line/column positions |
| Syntax-Aware Chunking | Split code by semantic boundaries, not arbitrary byte offsets |
Powered by tree-sitter-language-pack — documentation.
Key Capabilities #
- Text Extraction - Extract all text content with position and formatting information
- Metadata Extraction - Retrieve document properties, creation date, author, etc.
- Table Extraction - Parse tables with structure and cell content preservation
- Image Extraction - Extract embedded images and render page previews
- Audio/Video Transcription - Extract speech transcripts from MP3, M4A, WAV, WebM, and MP4 inputs when the native transcription feature is available
- OCR Support - Integrate multiple OCR backends for scanned documents
- Async/Await - Non-blocking document processing with concurrent operations
- Plugin System - Extensible post-processing for custom text transformation
- Embeddings - Generate vector embeddings using ONNX Runtime models or provider-hosted services
- Batch Processing - Efficiently process multiple documents in parallel
- Memory Efficient - Stream large files without loading entirely into memory
- Language Detection - Detect and support multiple languages in documents
- Code Intelligence - Extract structure, imports, exports, symbols, and docstrings from 306 programming languages via tree-sitter
- Configuration - Fine-grained control over extraction behavior
- Six Output Formats - Plain text, Markdown, Djot, HTML, JSON tree structure, or Structured JSON with OCR metadata
OCR Support #
Xberg supports multiple OCR backends for extracting text from scanned documents and images:
-
Tesseract
-
Paddleocr
OCR Configuration Example #
import 'package:xberg/xberg.dart';
Future<void> main() async {
const config = ExtractionConfig(
useCache: true,
enableQualityProcessing: true,
forceOcr: true,
disableOcr: false,
ocr: OcrConfig(
enabled: true,
backend: 'tesseract',
language: ['eng'],
autoRotate: false,
vlmFallback: VlmFallbackPolicy.disabled(),
),
resultFormat: ResultFormat.unified,
outputFormat: OutputFormat.plain(),
includeDocumentStructure: false,
maxArchiveDepth: 3,
useLayoutForMarkdown: false,
url: UrlExtractionConfig(
mode: UrlExtractionMode.auto,
allowLocalFileInputs: true,
allowFileUris: true,
),
);
const input = ExtractInput(
kind: ExtractInputKind.uri,
uri: 'scanned.pdf',
);
final output = await XbergBridge.extract(input, config: config);
final document = output.results.first;
print(document.content);
}
Async Support #
This binding provides full async/await support for non-blocking document processing:
import 'package:xberg/xberg.dart';
final output = await Xberg.extract(
const ExtractInput(
kind: ExtractInputKind.uri,
uri: 'document.pdf',
),
);
print(output.results.first.content);
Plugin System #
Xberg supports extensible post-processing plugins for custom text transformation and filtering.
For detailed plugin documentation, visit Plugin System Guide.
Embeddings Support #
Generate vector embeddings for extracted text using the built-in ONNX Runtime support. Requires ONNX Runtime installation.
Batch Processing #
Process multiple documents efficiently:
import 'dart:convert';
import 'package:xberg/xberg.dart';
final output = await Xberg.extractBatch([
const ExtractInput(
kind: ExtractInputKind.uri,
uri: 'document.pdf',
),
ExtractInput(
kind: ExtractInputKind.bytes,
bytes: utf8.encode('Hello from memory'),
mimeType: 'text/plain',
filename: 'note.txt',
),
]);
for (final result in output.results) {
print(result.content);
}
Configuration #
For advanced configuration options including language detection, table extraction, OCR settings, and more:
Documentation #
Contributing #
Contributions are welcome! See Contributing Guide.
Part of Xberg.dev #
- crawlberg — web crawling and scraping with HTML→Markdown and headless-Chrome fallback.
- html-to-markdown — fast, lossless HTML→Markdown engine.
- liter-llm — universal LLM API client with native bindings for 14 languages and 143 providers.
- tree-sitter-language-pack — tree-sitter grammars and code-intelligence primitives.
- alef — the polyglot binding generator that produces this README and all per-language bindings.
- Discord — community, roadmap, announcements.
License #
MIT License — see LICENSE for details.
Support #
- Discord Community: Join our Discord
- GitHub Issues: Report bugs
- Discussions: Ask questions