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 it as free software under the AGPL. The editors inside it are Euro-Office, 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: editing, saving and exporting (the Save As popup offers PDF), a blank document of any of the 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. That object is the whole of the integration.

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 macOS (Apple Silicon) and Linux (x86_64 and arm64). Windows is not started.

Linux has no menu bar yet. Tabs, file locking, signing and notarisation on macOS, the PyPI upload and the payload origin are all still to come. What works today lists the known issues, so nobody need waste an evening reporting one. 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

macOS, and Linux without Flatpak. 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

Neither is published yet. libera is not on PyPI and the payload origin is not up, so today the working routes are a Flatpak someone hands you, or a checkout. Publishing both is the shortest path to a beta, and the top of the roadmap.

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/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 is AGPL-3.0, as is the Euro-Office code it is built from (GUI assets are CC-BY-SA-4.0). The host loads upstream's JavaScript in-process and injects code into their runtime, which reads as a combined work. The whole of it is therefore AGPL, and stays that way.

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

Release files for libera 0.1.0

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.1.0
File Size Uploaded
libera-0.1.0.tar.gz 86.8 kB Details

Built distribution (wheel)

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

Total release size: 191.4 kB

Release files / libera-0.1.0.tar.gz

Download URL libera-0.1.0.tar.gz
Size 86.8 kB
Tags Source
SHA-256 checksum
How to use checksums
bd6ca1d938fe19c4d4216f32cb810191b579ffb689807525d040e9759dff21b3
BLAKE2b-256 checksum
How to use checksums
495372f5a54a9c85996ccf2222d0a8f796cfbe08c5e20bb08645cac61d2d5dd0
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.1.0-py3-none-any.whl

Download URL libera-0.1.0-py3-none-any.whl
Size 104.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c73d99e482ede4159d3c4c13d2f046846f93e0d3a0ce1be4acea5109fb4e11bd
BLAKE2b-256 checksum
How to use checksums
46ecb85f0800b6782c91aea50457c66e0392c68ca89eaf3bad67fd73d5d0f826
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

0.2.0

2 release files

0.1.1

2 release files

This release

0.1.0 This release

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