惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
G
Google Developers Blog
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
J
Java Code Geeks
U
Unit 42
云风的 BLOG
云风的 BLOG
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
Docker
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
V
V2EX
T
Tailwind CSS Blog

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - clark-labs-inc/libreoffice-rs: LibreOffice CLI i...
stan_kirdey · 2026-05-20 · via Hacker News: Show HN

libreoffice-rs — Pure Rust Office Document Toolkit (DOCX, XLSX, PPTX, ODF, PDF)

crates.io docs.rs license: MIT

Pure-Rust, std-only library and CLI for reading, writing, converting, and rendering office documents — DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, ODF, ODB, PDF, HTML, SVG, Markdown, CSV, and plain text — with no C/C++ shims, no FFI, no LibreOffice install, and zero non-std dependencies.

Quick start

cargo install libreoffice-pure

# Convert DOCX to PDF — no soffice, no Java, no system deps
libreoffice-pure --headless --convert-to pdf report.docx

# Spreadsheet to CSV
libreoffice-pure --headless --convert-to csv spreadsheet.xlsx

# PPTX to PDF
libreoffice-pure --headless --convert-to pdf slides.pptx

# Markdown to DOCX
libreoffice-pure convert --to docx notes.md notes.docx

# Extract text from DOCX/PPTX/XLSX as Markdown
libreoffice-pure docx-to-md report.docx report.md
libreoffice-pure pptx-to-md slides.pptx slides.md
libreoffice-pure xlsx-to-md sheet.xlsx sheet.md

# Render pages as images
libreoffice-pure docx-to-pngs report.docx pages/ --dpi 144
libreoffice-pure pptx-to-jpegs slides.pptx slides/ --dpi 150 --quality 85

The --headless --convert-to interface mirrors soffice — drop it into existing scripts as a faster, dependency-free replacement.

  • No LibreOffice install required. Convert DOCX → PDF, XLSX → CSV, PPTX → Markdown, and more directly from Rust.
  • Pure Rust, std only. Compiles with cargo build on a stock toolchain. Drop-in for WASM, serverless, sandboxes, and minimal containers.
  • Fast. 10–187× faster than real LibreOffice across the full N×M conversion matrix (mean ~116× across 63 head-to-head pairs). See benchmarks.
  • Honest. This is not a full replacement for LibreOffice. See project status.

Project status

This is not feature-parity with LibreOffice. LibreOffice is a massive decades-old suite with deep compatibility, UI toolkits, printing, macros, scripting, and more. This codebase provides a coherent Rust architecture and meaningful real functionality — every crate is pure Rust/std-only, the spreadsheet engine evaluates non-trivial formulas, and the CLI creates actual ODF/OOXML archives — but it does not fully replace LibreOffice. See STATUS.md for the candid feature matrix.

Benchmarks

Tested against LibreOffice 26.2.2 on macOS (Apple Silicon). All generated documents validated by soffice --headless.

N×M Conversion Matrix (111 format pairs)

tests/matrix_speed_comparison.py runs every supported (from → to) pair through both engines on the same inputs:

Family Pairs libreoffice-rs mean LibreOffice mean Mean speedup
writer 27 23 ms 955 ms 122×
calc 20 7 ms 671 ms 111×
impress 10 12 ms 766 ms 95×
draw 6 5 ms 752 ms 139×

Head-to-head (n = 63): libreoffice-rs 14 ms vs LibreOffice 816 ms — mean 115.8×. Realistic fixtures land in the 10–80× band; small synthetic inputs reach 100–180× because LibreOffice's ~700 ms startup dominates. libreoffice-rs also handles 35 pairs whose formats soffice --convert-to cannot produce at all (Markdown, MathML, ODF-Math, ODB).

Full table: benchmark_evidence/matrix_speed_comparison.md

Real-world Quality (13 public fixtures)

tests/quality_benchmark.sh downloads public DOCX/PPTX/XLSX files from python-openxml, python-pptx, PHPOffice and Calibre, then scores both engines:

  • 51× faster mean wall-clock (18 ms vs 902 ms)
  • 99.1% mean PDF text Jaccard on DOCX (5/7 files at 100%)
  • 100% CSV cell Jaccard on XLSX (3/3)
  • 90.9% Markdown extraction Jaccard across all 13 files
  • PDF page count exact match on 9/10 files

Details: docs/quality_benchmark_results.txt

Test suite

258 tests pass across 5 test suites (cargo test --workspace, integration, benchmarks). 88/88 benchmark assertions cover Writer features (bold, italic, headings, tables, links, lists), Calc features (16 formula functions, CSV round-trips), cross-format compatibility (11 conversion paths validated by real LibreOffice), multilingual support (English, Chinese, Spanish), and edge cases (empty docs, Unicode, 5K-row spreadsheets).

CLI reference

# Format conversions (soffice-compatible interface)
libreoffice-pure --headless --convert-to pdf report.docx
libreoffice-pure convert --from ods --to xlsx sheet.ods sheet.xlsx

# Per-module commands
libreoffice-pure writer new out.odt --title "Hello" --text "Hello from Rust"
libreoffice-pure writer markdown-to-odt notes.md notes.odt
libreoffice-pure writer convert notes.md notes.pdf
libreoffice-pure calc csv-to-ods sheet.csv sheet.ods --sheet Data --has-header
libreoffice-pure calc eval "=SUM(B2:B4)" --csv numbers.csv --has-header
libreoffice-pure impress demo deck.odp
libreoffice-pure draw demo diagram.odg
libreoffice-pure math latex-to-odf formula.txt formula.odf
libreoffice-pure base csv-to-odb table.csv People out.odb

# Raster + Markdown extraction
libreoffice-pure docx-to-pngs report.docx pages/ --dpi 144
libreoffice-pure pptx-to-jpegs slides.pptx slides/ --dpi 150 --quality 85
libreoffice-pure docx-to-md report.docx report.md
libreoffice-pure xlsx-recalc-check sheet.xlsx

# End-to-end demos
libreoffice-pure office-demo ./demo_out
libreoffice-pure desktop-demo ./demo_profile

Crate architecture

Workspace crates (14 crates, all pure Rust / std-only)
Crate Description
lo_core Common models, XML/PDF/SVG/HTML helpers, styles
lo_zip ZIP reader/writer + ODF/OOXML packaging
lo_odf ODF package serializers
lo_writer Writer: Markdown ingestion, TXT/HTML/SVG/PDF/ODT/DOCX export
lo_calc Calc: formula engine, CSV/HTML/SVG/PDF/ODS/XLSX export
lo_impress Impress: slide decks, HTML/SVG/PDF/ODP/PPTX export (incl. chart rendering)
lo_draw Draw: vector pages, SVG/PDF/ODG export
lo_math Math: TeX parser, MathML/SVG/PDF/ODF export
lo_base Base: typed tables, SELECT/WHERE/ORDER BY queries, HTML/SVG/PDF/ODB export
lo_uno UNO-like service runtime
lo_lok LibreOfficeKit-like in-process runtime
lo_app Desktop app surface (start center, autosave, macros, HTML shells)
lo_cli CLI argument parsing
libreoffice-pure CLI binary + convert_bytes / convert_path_bytes library API

FAQ

Does libreoffice-rs require LibreOffice to be installed? No. It parses, writes, and converts DOCX/XLSX/PPTX/ODF/PDF files directly in pure Rust. LibreOffice only appears in benchmarks and integration tests as a reference.

Can I use it as a library? Yes. Every crate is on crates.io. The libreoffice_pure::convert_bytes / convert_path_bytes API provides format-auto-detecting conversion. Per-domain crates (lo_writer, lo_calc, etc.) give fine-grained control.

Does it work with WASM / serverless / containers? Yes. Pure Rust, std-only, no build.rs / FFI / system libraries.

Agent skill

An Agent Skill bundle lives in skills/libreoffice-rs/. Drop it into your agent's skills path and it will know how to drive libreoffice-pure for document conversion, rendering, and extraction.

Maintainer

Built by Clark Labs Inc. — makers of Clark Agent, an AI agent for websites, research, and automation.

See CHANGELOG.md for per-version details.