Skip to main content

Libera Suite

A desktop office suite you can own. Libera Suite opens the documents other people send you (.docx, .xlsx, .pptx, ODF), edits them on your machine and saves them back. It runs on your own computer, with no account to create and nothing in it that phones home.

Four editors share one application. The file picks the editor, so there is nothing to choose.

Libera Words .docx .odt .rtf .txt .md
Libera Tables .xlsx .ods .csv
Libera Slides .pptx .odp
Libera Diagrams opens .vsdx to read

Abilian builds the host as free software under the Apache License 2.0. The editors inside it are Euro-Office (itself an AGPL fork of ONLYOFFICE by Ascensio System SIA), running locally and unmodified.

Using it

libera report.docx        # a window, in Words, because the file says so
libera budget.xlsx        # Tables
libera *.pptx             # one window each
libera                    # the start window: new, open, recent

What works today sets out the full list with its gaps. It covers editing, saving and exporting, with PDF in the Save As popup. It also covers blank documents of all four kinds, images, printing, spell check in six languages, crash recovery and a Recent list.

libera -v FILE            # what it is doing; -vv how; -vvv every request
libera --diagnose         # everything worth pasting into a bug report
libera --payload-status   # which editors are in use, and the revisions they were built from

How it works

The editors are a web application. Everything they cannot do in a browser (read a file from disk, convert it, save it, list the fonts, put a dialog on screen) they ask of one injected JavaScript object, window.AscDesktopEditor, which the host exists to answer.

We implement it in Python, behind the webview your system already ships. The host serves the editor over a loopback HTTP server and defines AscDesktopEditor before the editor's own code runs, so nothing about the editor itself changes.

The payload The editors: sdkjs, web-apps, the x2t converter, fonts, dictionaries. Built from upstream sources pinned by SHA, plus our patch queue. ~120 MB, installed out of tree or shipped inside the bundle.
The host src/libera/: the loopback HTTP server, the webview, the file dialogs, the menu bar and the converter calls, in about 4,700 lines of Python across 32 modules. All of the desktop application is here.
The bridge Three small JavaScript files, spliced into the <head> of every page the host serves. Our code and theirs never share a file.

Five thousand lines is a codebase a small team can read in an afternoon and still be maintaining in ten years.

We do not fork the engine. The patch queue is 28 patches across three upstream repositories: 24 of them make it build on macOS, 3 are configuration and branding, 1 fixes an upstream UI bug. None touches the editing engine, so following upstream means rebasing build configuration. Every release records the exact revisions it was built from, so the corresponding source is a commit plus a series that provably reapplies to it, and make patches checks that it still does.

Everything we ship, we build. build/ compiles the editors and the native converter from pinned upstream sources, including on macOS, where upstream publishes no binaries of its own.

Where it stands

Early, and running. All four editors work today on Linux (x86_64 and arm64) and macOS (Apple Silicon). Windows is not started.

Tabs, file locking, and signing and notarisation on macOS are still to come. Linux has a menu bar and a launcher entry; neither carries keyboard shortcuts, because pywebview's GTK menu has no way to attach them. What works today lists the known issues, so an evening spent reporting one is an evening wasted. The roadmap says what comes next and what we have decided against.

The most useful thing you can send us is a document that renders wrongly, attached. The layout engine is upstream's and mature, so where output is wrong it is far more likely to be our packaging (a font we did not ship, a resource we failed to serve) than the engine.

Installing it

Install gives the full instructions for each platform.

Linux: the Flatpak. The bundle carries the editors, GTK and WebKit, so there is nothing else to fetch and nothing to get wrong:

flatpak install --user libera-0.1.0-amd64.flatpak     # or -arm64
flatpak run eu.liberasuite.Libera

Linux without Flatpak, and macOS. The libera command comes from PyPI and fetches the editors on first run:

uv tool install libera                            # macOS
pipx install --system-site-packages libera        # Linux: the flag is not optional
libera --payload-install

macOS works today. libera is on PyPI and the payload origin is serving, so the block above is the real thing on an Apple Silicon Mac running macOS 14 or later.

Linux works on both architectures. Payload 0.2 is built on Ubuntu 22.04, and x2t from it runs on Ubuntu 22.04 and Debian 12, x86_64 and arm64 -- measured in a clean container of each. Payload 0.1 needed Ubuntu 24.04. Release 0.2 is what remains.

Building it

git clone https://github.com/abilian/libera-suite && cd libera-suite
uv sync
make payload-all                 # fetch, patch, build, assemble, smoke-test (long: V8 alone is ~30 min)
export LIBERA_PAYLOAD="$BUILD_ROOT/out/payload"
uv run libera document.docx
make verify      # everything below, in the order that fails fastest
make test        # 314 tests: unit, the host over HTTP, the editor in headless Chromium
make lint        # ruff, ty, pyrefly, mypy, biome — green, and expected to stay that way
make smoke       # the converter: fonts, docx -> odt -> docx, docx -> pdf
make patches     # does the patch queue still apply to the pinned SHAs?

The test suite enforces one house rule: assert on content, never on exit codes. A converter that writes an empty document exits zero. A PDF with no glyphs in it is the right size. So the end-to-end run photographs the editor's own canvas and measures the ink on it.

docs/ The documentation site, at https://docs.liberasuite.eu/. Start at Developers.
notes/ Where the reasoning lives: vision, specs, architecture, packaging, and our relationship with upstream.
notes/plans/ What a release still needs, with the state measured each time and the commands to finish it.
notes/lessons-learned.md Bugs that escaped to a user, and what each generalises to. Read before touching the host or the bridge.
notes/euro-office-map.md How Euro-Office is put together, and the AscDesktopEditor contract. The survey everything else is built on.
build/ Building the editors and the native binaries from pinned source plus our patches.
CLAUDE.md The orientation an agent gets, which happens to be the fastest one for a human too.

The package and the command are libera. The repository directory is local-office.

Credit

Libera Suite is based on Euro-Office, itself based on ONLYOFFICE by Ascensio System SIA. The same line appears in Help ▸ About inside the application.

The editors, the document engine and the format support are theirs. That is the hard part: twenty years of correctly reading a .docx written by somebody else's software. The host, the packaging and the desktop integration are ours. We are grateful for both.

Licence

Libera Suite ships as two artifacts, and they carry different licences.

The host is Apache-2.0: everything in src/libera/, which is the whole of this package.

The editor payload is AGPL-3.0: Euro-Office plus our patch queue against it (GUI assets are CC-BY-SA-4.0). It arrives as a separate download or inside a Flatpak, never vendored into the wheel.

Licence and attribution has the corresponding-source detail: what each release records, and where to fetch it.

Release files for libera 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for libera 0.2.1
File Size Uploaded
libera-0.2.1.tar.gz 102.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for libera 0.2.1
File Interpreter ABI Platform
libera-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 225.2 kB

Release files / libera-0.2.1.tar.gz

Download URL libera-0.2.1.tar.gz
Size 102.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ebea2ff86e7d46bb3069683f16bcb74d80e349476b26d5ecf29792b0f6bc17ac
BLAKE2b-256 checksum
How to use checksums
12fca2f0e83617f04895f5db34546786424a91d108bb3a4591fb820130c8a13e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.12 {"installer":{"name":"uv","version":"0.12.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / libera-0.2.1-py3-none-any.whl

Download URL libera-0.2.1-py3-none-any.whl
Size 122.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cad55a9ec7fbdf39535fc3a8242d571228322d9cca26929f95b9216621a02545
BLAKE2b-256 checksum
How to use checksums
bc72667d9dcabc681c777df528d0eb19daa91c5df6aaf5c5d76f7ba547a96a16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.12 {"installer":{"name":"uv","version":"0.12.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page