unoserver
A server for file conversions with Libre Office
What it is and what it does
Unoserver wraps LibreOffice's UNO interface to expose document conversion as a network service. Instead of spawning a new LibreOffice process for each conversion—which is slow and resource-intensive—unoserver starts one persistent LibreOffice instance that listens on a port and handles conversion requests from client scripts. This dramatically reduces CPU and memory overhead when converting many documents.
The package provides four command-line tools: `unoserver` (starts the listener), `unoconverter` (sends a document to convert), `unocompare` (compares two documents), and `unoping` (checks server status). It supports a wide range of input and output formats, filter options, and can run in daemon mode. Installation requires using the Python interpreter that LibreOffice itself uses, which the documentation helps you locate.
Use it for:
- Batch-convert hundreds of office documents to PDF in a CI/CD pipeline without restarting LibreOffice between files.
- Build a web service that accepts document uploads and returns converted PDFs or images on demand.
- Automate document format migration (e.g., XLSX to CSV, ODF to DOCX) in a long-running application.
- Compare two versions of a document and export the diff as a separate file.
- Monitor document conversion health in a production system using the `unoping` health-check command.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Unoserver runs LibreOffice as a persistent server to convert documents between formats (PDF, HTML, images, etc.) via command-line or programmatic clients, avoiding repeated startup overhead.
Yes, if you need to convert documents at scale and have LibreOffice available. The server model is a genuine efficiency win over repeated command-line invocations. Install friction is low (no Python dependencies), but you must use the LibreOffice-bundled Python, which requires upfront setup. No known vulnerabilities. Active maintenance and permissive license. Not suitable if you lack LibreOffice or cannot install packages into its Python environment.
Install
unoserver on PyPI
pip
pip install unoserveruv
uv add unoserverpoetry
poetry add unoserverInstalling unoserver
Before you install
Low friction: pure Python wheel with no runtime dependencies. Requires LibreOffice itself to be installed and accessible to the same Python interpreter running unoserver; the documentation provides a helper script to locate compatible Python installations.
License in practice
MIT license permits unrestricted use, modification, and distribution in commercial and private projects with minimal obligations.
Quickstart
# Install unoserver with the LibreOffice-compatible Python
$ /path/to/libreoffice/python -m pip install unoserver
# Start the server
$ unoserver --interface 127.0.0.1 --port 2003
# In another terminal, convert a document
$ unoconvert input.odt output.pdf --host 127.0.0.1 --port 2003
LibreOffice must be installed on the system and unoserver must be installed using the Python interpreter bundled with or used by that LibreOffice installation, not a generic system Python.
Verify before relying
- Whether Windows and Mac support is now stable (documentation notes it was untested as of writing).
- Performance improvement magnitude (docs claim 50–75% CPU reduction but exact conditions unclear).
- Whether the package works with recent LibreOffice versions beyond what the classifiers indicate.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.8) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | actively maintained — 65 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 347,119/month — #7,351 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: unoserver-3.7-py3-none-any.whl
Keywords: libreoffice, conversion, documents, uno, unoconv
Tags
More Office/Business packages
Wraps any iterable to display a real-time…
copyleft · top 100 on PyPI
slack-sdkProvides Python bindings for Slack's Web API,…
permissive · top 1,000 on PyPI
xlrdxlrd reads data and formatting information from…
permissive · top 1,000 on PyPI
progressbar2progressbar2 renders text-based progress bars…
permissive · top 5,000 on PyPI
bokehBokeh is an interactive visualization library…
permissive · top 5,000 on PyPI
slackclientProvides Python interfaces to Slack's Web API…
permissive · top 5,000 on PyPI
antiwordWraps LibreOffice's text conversion to convert…
permissive · top 15,000 on PyPI
py3o.templateMerges data into LibreOffice/OpenOffice…
permissive · top 15,000 on PyPI
spire-docSpire.Doc creates, reads, modifies, and…
unclear · top 15,000 on PyPI
docx2pdfConverts DOCX files to PDF on Windows or macOS…
permissive · top 5,000 on PyPI
docling-slimDocling Slim is a lightweight, modular SDK for…
permissive · top 5,000 on PyPI
ezodfezodf creates, opens, and modifies OpenDocument…
permissive · top 15,000 on PyPI
convertapiA Python client for the ConvertAPI online file…
permissive · top 15,000 on PyPI
msoffcrypto-toolDecrypts and encrypts Microsoft Office files…
permissive · top 5,000 on PyPI
django-wkhtmltopdfWraps the wkhtmltopdf binary to convert HTML to…
permissive · top 15,000 on PyPI
pymupdfPyMuPDF extracts, renders, converts, and…
agpl · top 1,000 on PyPI