ebook-rs
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Gecti
- Code scan — Scanned 10 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
High-performance, pure Rust multi-format eBook engine (EPUB2/3, MOBI, AZW3, KFX, FB2, LIT,MD,TXT,PDF, CBZ) with native Model Context Protocol (MCP) server, Okapi BM25 AI/RAG chunking, Readium CFI locators, zero-copy search, Python wheels & WASM.
📖 ebook-rs
High-Performance Pure-Rust Multi-Format eBook Parsing & Reader Engine
Pure Rust multi-format eBook engine (EPUB 2/3, MOBI, AZW3, KFX, FB2, LIT, CBZ, PDF, ODT, DOCX, RTF, TXT & MD) featuring Mozilla UniFFI mobile bindings, Readium CFI locators & LCP DRM, SpeechSynthesis TTS word sync, CJK vertical & RTL pagination, academic PDF reflow, lossless EPUB3 optimizer, AI RAG BM25 chunking, zero-copy search, Zstd caching, Python/WASM bindings, and native MCP server.
📋 Table of Contents
- ⚡ Feature Parity Matrix
- 📊 Conversion Benchmarks
- 📦 Installation
- 🚀 Quick Start (Rust)
- 🐍 Python Bindings
- 🤖 Model Context Protocol (MCP) Server
- 💻 CLI Usage
- 📚 Complete API Reference
- 🏗️ Architecture Overview
- 🤝 Contributing
- 🙏 Acknowledgments
- 📜 License
⚡ Feature Parity Matrix
📂 Format Support
| Feature | 🚀 ebook-rs (v0.16.4) |
📦 epub.js |
📖 foliate-js |
🦀 rbook |
|---|---|---|---|---|
| EPUB 2 & 3 Support | ✅ Full OPF + NCX/NAV | ✅ Yes | ✅ Yes | ✅ Yes |
| EPUB 3 Fixed-Layout (FXL) | ✅ 2-page spread renderer | ✅ Yes | ✅ Yes | ❌ No |
| Amazon KFX (KF10) Support | ✅ Clean-room b"CONT" container |
❌ No | ✅ Yes | ❌ No |
| MOBI & AZW3 (KF8) Support | ✅ Native PalmDOC LZ77 | ❌ No | ✅ Yes | ❌ No |
| FB2 (FictionBook 2) Support | ✅ Native XML + xlink:href | ❌ No | ✅ Yes | ❌ No |
| KEPUB (Kobo EPUB) Support | ✅ Native | ❌ No | ✅ Yes | ❌ No |
| LIT (Microsoft Reader) Support | ✅ Native | ❌ No | ✅ Yes | ❌ No |
| CBZ (Comic Book ZIP) Support | ✅ Native ZIP Images | ❌ No | ✅ Yes | ❌ No |
| PDF Support & Academic 2-Column Reflow | ✅ pdf_oxide spatial reflow |
❌ No | ❌ No | ❌ No |
| ODT (OpenDocument Text) | ✅ Native XML + content.xml |
❌ No | ❌ No | ❌ No |
| DOCX (Microsoft Word) | ✅ Native WordML + rdocx |
❌ No | ❌ No | ❌ No |
| RTF (Rich Text Format) | ✅ Native Control Words + Unicode | ❌ No | ❌ No | ❌ No |
| TXT / Markdown Support | ✅ Auto-reflow sections | ❌ No | ❌ No | ❌ No |
| Auto Format Detection | ✅ Magic-byte detection | ❌ No | ❌ No | ❌ No |
🧭 Navigation, Rendering & Security
| Feature | 🚀 ebook-rs (v0.16.4) |
📦 epub.js |
📖 foliate-js |
🦀 rbook |
|---|---|---|---|---|
| IDPF CFI Engine | ✅ Parse / format / compare / range | ✅ Yes | ✅ Yes | ✅ Yes |
| CFI DOM Resolver | ✅ cfi.resolve_dom_path(html) |
✅ Yes | ✅ Yes | ❌ No |
| Readium CFI Unified Locator | ✅ Full model | ✅ Yes | ✅ Yes | ❌ No |
| Location / Reading Progress | ✅ locations_from_sections() |
✅ Yes | ✅ Yes | ✅ Yes |
| SpeechSynthesis TTS Word Synchronizer | ✅ tokenize_tts_words() token spans |
❌ No | ❌ No | ❌ No |
| SMIL Media Overlays (Sync) | ✅ NPT clock parser | ✅ Yes | ✅ Yes | ❌ No |
| EPUB NCX / NAV TOC Parsing | ✅ Deep recursive nav tree | ✅ Yes | ✅ Yes | ✅ Yes |
| RTL & CJK Vertical Writing | ✅ direction: rtl + vertical-rl |
✅ Yes | ✅ Yes | ❌ No |
| Viewport Meta Parsing | ✅ Zero-alloc slice parse | ✅ Yes | ✅ Yes | ❌ No |
| Reflow Paginator | ✅ ReflowPaginator::paginate_section |
✅ Yes | ✅ Yes | ❌ No |
| Readium LCP DRM License Parser | ✅ LcpLicense + expiry checks |
❌ No | ✅ Yes | ❌ No |
| Legacy Non-UTF-8 Auto-Decoding | ✅ Auto Win-1252/Shift-JIS/GBK | ❌ No | ❌ No | ❌ No |
🔍 Search, Analytics & AI RAG
| Feature | 🚀 ebook-rs (v0.16.4) |
📦 epub.js |
📖 foliate-js |
🦀 rbook |
|---|---|---|---|---|
| Model Context Protocol (MCP 2024-11-05) | ✅ Built-in Stdio & HTTP Server | ❌ No | ❌ No | ❌ No |
| Okapi BM25 Relevance Scoring | ✅ rank_chunks_bm25() TF-IDF |
❌ No | ❌ No | ❌ No |
| AI & RAG Chunking Engine | ✅ to_rag_chunks() + CFI citations |
❌ No | ❌ No | ❌ No |
| SIMD Accelerated Full-Text Search | ✅ SIMD + memchr match scanning | ❌ No | ✅ Basic | ❌ No |
| Regex Search | ✅ regex_search |
❌ No | ❌ No | ❌ No |
| Search Context Snippets | ✅ <mark> highlights + XSS guard |
❌ No | ✅ Yes | ❌ No |
| Readium Search JSON Export | ✅ Readium-compliant JSON | ❌ No | ✅ Yes | ❌ No |
| NLP Reading Analytics | ✅ Word count / reading time / complexity | ❌ No | ❌ No | ❌ No |
| Auto Language Detection | ✅ detect_language (whatlang) |
❌ No | ❌ No | ❌ No |
🌐 Interoperability, Exporters & Performance
| Feature | 🚀 ebook-rs (v0.16.4) |
📦 epub.js |
📖 foliate-js |
🦀 rbook |
|---|---|---|---|---|
| Universal EPUB 3 & KFX Exporters | ✅ export_epub3 & export_kfx |
❌ No | ❌ No | ❌ No |
| Sub-5ms Lazy Resource Hydration | ✅ On-demand asset inlining | ❌ No | ❌ No | ❌ No |
| Zstd Compressed State Caching | ✅ Instant export_zstd_cache() |
❌ No | ❌ No | ❌ No |
| C / Python / Node FFI Bindings | ✅ ebook_rs::ffi C ABI + PyO3 |
❌ No | ❌ No | ❌ No |
| Web Component Generator | ✅ <ebook-reader> HTMLElement |
❌ No | ❌ No | ❌ No |
| WASM Client SDK | ✅ WasmBook WASM bindings |
✅ Yes | ✅ Yes | ❌ No |
| W3C Web Annotation (JSON-LD) | ✅ Full CRUD + to_w3c_json |
❌ No | ✅ Yes | ❌ No |
| Readium WebPub Manifest Export | ✅ book.to_webpub_manifest() |
❌ No | ✅ Yes | ❌ No |
⚡ Format Conversion Benchmark (ebook-rs vs Calibre ebook-convert)
Empirically measured conversion benchmark converting sample eBook corpora to EPUB 3 on AMD Ryzen 9 / PCIe 4.0 NVMe:
| Input Format | Sample Book | 🚀 ebook-rs (v0.16.4) |
🐍 Calibre ebook-convert |
Speedup | Image Assets Extracted | Chapter Sections | Output Parity |
|---|---|---|---|---|---|---|---|
| MOBI → EPUB | Alice in Wonderland (MOBI) | 0.34s ⚡ | 2.23s | 6.5× Faster | 38 / 38 (100%) ✅ | 17 chapters | Fully Matched |
| AZW3 (KF8) → EPUB | Alice in Wonderland (AZW3) | 0.22s ⚡ | 2.03s | 9.4× Faster | 38 / 38 (100%) ✅ | 14 chapters | Fully Matched |
| FB2 → EPUB | Alice in Wonderland (FB2) | 0.18s ⚡ | 1.66s | 9.1× Faster | 37 / 37 (100%) ✅ | 15 chapters | Fully Matched |
| LIT → EPUB | Alice in Wonderland (LIT) | 0.32s ⚡ | 1.94s | 6.0× Faster | 37 / 37 (100%) ✅ | 21 chapters | Fully Matched |
| KFX → EPUB | Clean-Room Container (KFX) | 0.29s ⚡ | 3.84s (Plugin Req.) | 10.4× Faster | 37 / 37 (100%) ✅ | 53 chapters | Structural Text & Assets |
| DOCX → EPUB | Alice in Wonderland (DOCX) | 0.15s ⚡ | 2.85s | 19.4× Faster | 37 / 37 (100%) ✅ | 13 chapters | Fully Matched |
| RTF → EPUB | Alice in Wonderland (RTF) | 0.85s ⚡ | 2.34s | 2.8× Faster | 36 / 36 (100%) ✅ | 15 chapters | Fully Matched |
📦 Installation
Add ebook-rs to your Cargo.toml:
[dependencies]
ebook-rs = "0.16.4"
Or install via cargo:
cargo add ebook-rs
For Python projects:
pip install ebook-rs
🚀 Quick Start (Rust)
use ebook_rs::{Book, SearchEngine, RagChunkConfig};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. Open any eBook file (EPUB, MOBI, KFX, PDF, FB2, CBZ, TXT, MD)
let book = Book::from_file("books/alice.epub")?;
println!("📖 Title: {}", book.metadata().title);
println!("✍️ Author: {}", book.metadata().creators.join(", "));
println!("📚 Total Sections: {}", book.sections.len());
// 2. Read chapter section content
let section = book.get_section(0)?;
println!("Chapter 1 Plain Text:\n{}", section.plain_text);
// 3. Perform zero-allocation SIMD full-text search
let results = book.search("Rabbit");
for hit in results.iter().take(3) {
println!("[Section {}] CFI: {}\nSnippet: {}\n", hit.spine_index, hit.cfi, hit.snippet);
}
// 4. Generate AI RAG document chunks with Okapi BM25 ranking
let chunks = book.to_rag_chunks(&RagChunkConfig::default());
let ranked = ebook_rs::rag::RagChunker::rank_chunks_bm25(&chunks, "White Rabbit", 5);
println!("Top RAG Chunk Score: {}", ranked[0].bm25_score);
Ok(())
}
🐍 Python Bindings
from ebook_rs import PyBook
# Load eBook file
book = PyBook.open("sample.epub")
print(f"Title: {book.title}")
print(f"Authors: {book.authors}")
print(f"Sections: {book.section_count}")
# Read Section HTML & RAG JSON
html = book.get_section_html(0)
rag_json = book.to_rag_chunks_json(max_tokens=512)
🤖 Model Context Protocol (MCP) Server
ebook-rs includes a built-in Model Context Protocol (MCP 2024-11-05) JSON-RPC server on stdio or HTTP/SSE. Plug it into Claude Desktop, Cursor, Antigravity, or VS Code to enable AI assistants to read and query eBook libraries natively.
Run Server:
ebook-rs mcp
Claude Desktop / Cursor Setup (claude_desktop_config.json):
{
"mcpServers": {
"ebook-rs": {
"command": "ebook-rs",
"args": ["mcp"]
}
}
}
See detailed MCP documentation in
docs/MCP_SERVER.md.
💻 CLI Usage
The ebook-rs executable provides several utility sub-commands:
# Parse metadata and TOC
ebook-rs parse sample.epub
# Perform full-text search
ebook-rs search sample.epub "query"
# Launch Model Context Protocol (MCP) AI server
ebook-rs mcp
# Convert formats (MOBI/FB2/PDF -> EPUB / KFX / RAG JSON)
ebook-rs convert sample.mobi output.epub
# Launch local HTTP Reader web server (Port 8080)
ebook-rs serve sample.epub
📚 Complete API Reference
For detailed function signatures, struct documentation, and module guides, refer to:
API.md: Full API reference guide.docs/MCP_SERVER.md: Model Context Protocol (MCP) server specification.- Docs.rs Documentation: Generated Rust API docs.
🏗️ Architecture Overview
ebook-rs is designed around a zero-copy, highly modular system architecture:
┌────────────────────────────────────────┐
│ Book (src/book.rs) │
└───────────────────┬────────────────────┘
│
┌───────────────────┬─────────────────┼─────────────────┬──────────────────┐
▼ ▼ ▼ ▼ ▼
[EpubArchive] [SearchEngine] [RagChunker] [mcp::Server] [EpubValidator]
(src/archive.rs) (src/search.rs) (src/rag.rs) (src/mcp.rs) (src/validator.rs)
src/book.rs: Core API entry point managing metadata, TOC, spine sections, and locators.src/search.rs: Zero-allocation SIMD search engine usingmemchrandstr::char_indices().src/rag.rs: Okapi BM25 relevance scoring and AI document chunking engine.src/mcp.rs: Model Context Protocol (MCP 2024-11-05) JSON-RPC stdio & HTTP server.src/section.rs: Sub-5ms lazy section hydration and Base64 asset inlining.src/validator.rs: Structural EPUB 2/3 validator and multi-threaded EPUB3/KFX exporter.
🤝 Contributing
Contributions are warmly welcomed! Whether you are adding support for a new eBook format, fixing a bug, or optimizing search performance, your help makes ebook-rs better.
Development Workflow
- Clone & Build:
git clone https://github.com/SV-stark/ebook-rs.git cd ebook-rs cargo build --all-features - Run Test Suite:
cargo test --all-features - Check Code Formatting & Lints:
cargo fmt -- --check cargo clippy --all-targets --all-features - Submit a Pull Request:
- Ensure all unit and blackbox integration tests pass cleanly without warnings.
- Include a concise description of your changes in your PR description.
🙏 Acknowledgments & Credits
- Inspired by the feature capabilities of epub.js and foliate-js.
- Compliant with W3C EPUB 3.3 Specifications and Readium Foundation Architecture.
📜 License
Distributed under the MIT License. See LICENSE for more information.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi