Desktop office suite

Rutba Office

A free, open-source desktop office suite. Seven applications in one download — mail, documents, spreadsheets, slides, pictures, image editing and video — on a document engine we wrote ourselves, working with the network switched off.

Rutba Office free desktop suite
Licence AGPL 3.0 + commercial Platforms Windows, macOS, Linux Runtime Node.js 20+ / Electron Network None required
Why we built it

The engine was the hard part. The suite is what it is for.

Rutba Workspace needed to open a customer’s .docx and .xlsx, edit them, and hand them back without quietly destroying the parts it did not understand. Nothing off the shelf did that, so the engine got built: an OOXML package layer that rewrites only what it deliberately edited, a spreadsheet calculation engine, a .pptx renderer, a dependency-free PDF writer, and a mail library that reads the archive formats other clients cannot.

A desktop suite is a better use of that work than a drawer. So it is published, free, under the AGPL — and a commercial licence exists for anyone who wants to embed it in something closed.

7
applications in one installer
14
engine packages
577
engine tests, all passing
27
file formats read or written
One download

Seven applications, one shell

They share a design system, a set of shortcuts and an engine, so the second app you open behaves like the first.

Mail

Every account, every archive, one inbox

IMAP and SMTP, plus the archives other clients leave behind: Outlook .pst and .ost, .olm, mbox, .eml and .msg.

Word

Documents that open the same everywhere

.docx on an engine we own — tracked changes, comments, styles, pagination — reading .odt, .rtf, .doc, Markdown and text, exporting PDF.

Worksheets

Real formulas, real recalculation

.xlsx with a full calculation engine — parser, evaluator and dependency ordering — reading .ods and .csv.

Presentation

Slides that survive the round trip

.pptx read, edited, rendered and presented, with layout and master inheritance resolved properly. Reads .odp.

Pictures

A viewer that opens before you blink

Every common image format, EXIF read and orientation honoured, folder browsing, and PDFs in the same window.

Image & Video

The two jobs that always need a second program

Non-destructive crop, correction and annotation — your original is never written to — and a video trim-and-export timeline with no ffmpeg and nothing native to install.

How it is built

Two decisions shape everything else

Documents live in the backend

The OOXML engine inflates with zlib and works in buffers — a Node engine, not a browser one. A document opens, edits and saves in the main process, and the window draws the view model it is sent. A spreadsheet asks for the viewport it is about to paint and nothing else, which is why the size of a workbook has no bearing on the size of a window.

We only rewrite what we edit

An .xlsx is a zip of XML parts, and almost everything a young engine will not implement for years lives in a part that can be carried through untouched. Charts, pivot caches, macros, signatures and embedded media come back byte-for-byte. Fidelity degrades only where we deliberately touched something — which is also where the tests are.

The part nobody else does

Fifteen years of Outlook mail, opened without Outlook

.pst and .ost are read in full: the node and block B-trees, the heap, property and table contexts, folders, messages, recipients and attachments. Verified against a real 906 MB .ost — 467 folders and 12,172 messages indexed in under a second.

That exercise found three things no amount of reading the specification would have given. Outlook 2013 and later compress the larger data blocks of an .ost with zlib, which is not in the published structure and which a reader that does not notice sees as an archive full of empty messages. In an .ost the hierarchy and contents tables are mostly not materialised, so the folder tree has to come from the node B-tree’s parent pointers. And a view table that does exist may still carry no subject column.

The substitution tables for Outlook’s block encoding are transcribed from Microsoft’s published [MS-PST] open specification and checked three ways when they load — each is a permutation of 0–255, and encode and decode are exact inverses in both directions. A damaged table decodes nothing rather than decoding wrongly.

  • IMAP and SMTP for live accounts
  • Outlook .pst and .ost, read in full
  • Apple Outlook .olm
  • Unix mbox, .eml, .emlx and .msg
  • A local store, so an archive stays searchable
What it does not send

Unplug the machine and everything still works

There is no account, no sign-in and no usage data collected. These are claims in a published repository rather than promises about our intentions.

Credentials go to the operating system

Mail passwords are handed to the OS keystore — DPAPI on Windows, Keychain on macOS, libsecret on Linux — never to a file the application can read back in clear text.

Message bodies cannot phone home

Mail renders in a frame with an empty sandbox: no scripts, no forms, no same-origin access. The content policy blocks every remote fetch, so a tracking pixel cannot report that you opened the message. Remote images load only when you ask, per message.

Deleting is not destroying

Removing a file moves it to the operating system trash. An office suite should never be the reason something is unrecoverable.

One network call, stated plainly

The suite asks GitHub whether a newer release exists. It carries nothing about you, your documents or your machine, and it is a switch — turned off, no request is made at all. That is the whole of its network activity, and saying so is the point.

Dual licence

Free for everyone. Commercial when the AGPL does not fit.

Rutba Office is published under the GNU Affero General Public License v3.0. Installing it and using it — at home, in a business, on a thousand machines — carries no obligations at all: copyleft binds distribution, not use.

The obligations start when you hand the software, or a service running it, to somebody else. If that does not fit what you are building — embedding the engine in a closed-source product, distributing a modified version without publishing your changes, or operating it as a hosted service without the section 13 source-availability requirement — Tech Style Ltd offers a separate commercial licence that removes them.

It is a conversation rather than a price list, because the terms depend on what you are building.

  • Use it anywhere, including commercially, at no cost
  • Read, modify and redistribute the source under the AGPL
  • Commercial licence for closed-source embedding
  • Engine packages usable without the desktop shell
  • Community support on the public issue tracker
Maintained in the open

The issue tracker is the support desk

Bugs, feature requests and the arguments about what happens next all live on GitHub, where anyone can read them and see what was decided and why. There is no ticket queue behind a login.