Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
What digital sovereignty means and how companies and developers can make their infrastructure, data, and AI systems independent
Das moderne Unternehmen basiert auf Dokumenten. Dennoch teilen die beiden dominierenden Plattformen zur Dokumentenbearbeitung — Microsoft 365 und Google Workspace — grundlegende Probleme:
Europäische Institutionen werden sich dieses Problems zunehmend bewusst. Der öffentliche Sektor in Deutschland migriert bereits zu Open-Source-Alternativen wie openDesk (von Open Code & Sovereign Cloud Stack). Doch das Ökosystem bleibt fragmentiert: Es gibt keine einzige, selbst hostbare Office-Suite, die moderne Web-Editierung mit nativer Desktop-Performance, umfassender Formatunterstützung und voller Protokoll-Interoperabilität kombiniert.
Diese Lücke soll World-Office schließen.
World-Office ist von Grund auf als modulares, geschichtetes System konzipiert. Die Kernidee ist, dass die Dokumentenbearbeitung drei grundlegend verschiedene Bereiche umfasst — Parsing, Editierung und Protokollbehandlung — und jeder dieser Bereiche unterschiedliche Technologieentscheidungen erfordert.
Der serverseitige Core ist vollständig in Rust geschrieben und als Workspace aus 26 Crates organisiert. Die Format-Schicht ist das Herzstück: 16 dedizierte Format-Crates, von denen jeder das FormatRoundtrip Trait für Parsing und Serialisierung implementiert. Unterstützte Formate umfassen:
Jeder Format-Crate ist unabhängig testbar und folgt derselben Trait-Schnittstelle, was das Hinzufügen neuer Formate ermöglicht, ohne bestehenden Code ändern zu müssen.
Die Service-Schicht besteht aus 8 Rust-Microservices (plus einem Node.js-Service für das DocBuilder CLI — dem Tool zur Dokumentenkonvertierung). Eine WOPI (Web Application Open Platform Interface) Bridge ermöglicht die Interoperabilität mit bestehenden WOPI-kompatiblen Storage-Backends wie Nextcloud, ownCloud und Collabora.
Der Web-Editor befindet sich in einem Monorepo unter apps/web/, strukturiert als Turborepo-verwaltetes TypeScript-Projekt. Er bietet eine Vanilla-JS-WYSIWYG-Editor-Schicht mit React-Wrappern, die so konzipiert ist, dass das Bearbeitungserlebnis entweder in einem Browser (über den Webserver) oder in der Desktop-App (via Tauri's WebView) eingebettet werden kann.
Die Build-Pipeline erzeugt ein statisches Dist, das die Tauri-Desktop-Shell als Frontend lädt — für die Desktop-Variante ist kein separater Webserver erforderlich.
Der Desktop-Proof-of-Concept kapselt den Web-Editor in einer nativen Tauri 2 Shell. Diese bietet:
Warum Tauri statt Electron? Die Desktop-App benötigt keine Node.js-Runtime-Features — sie ist ein reiner Dokumenten-Viewer/Editor. Das Binary ist komprimiert unter 20 MB groß, der Speicherverbrauch beträgt etwa die Hälfte einer vergleichbaren Electron-App und die Angriffsfläche ist wesentlich geringer (keine Node.js-Integration).
Der technisch anspruchsvollste Teil von World-Office ist das Format-Roundtrip-System. Die Vorgabe ist trügerisch einfach: Das Parsen eines Dokuments und dessen erneute Serialisierung muss eine Datei ergeben, die in der Originalanwendung identisch geöffnet wird.
Das ist weitaus schwieriger, als es klingt. DOCX-Dateien beispielsweise sind ZIP-Archive, die einen komplexen Baum von XML-Dateien enthalten, wobei Styles, Nummerierungsdefinitionen, Schriftarttabellen, Fußnoten, Endnoten, Kopf- und Fußzeilen sowie Beziehungen über separate Dateien verteilt sind. Ein Parser muss Folgendes bewahren:
Das FormatRoundtrip Trait erzwingt diesen Vertrag zur Kompilierzeit:
#[async_trait]
pub trait FormatRoundtrip: Send + Sync {
/// Parse raw bytes into the canonical document model
async fn parse(&self, data: &[u8]) -> Result<Box<dyn Document>>;
/// Re-serialize back to bytes
async fn serialize(&self, doc: &dyn Document) -> Result<Vec<u8>>;
/// Roundtrip: parse + serialize + byte-level comparison
async fn roundtrip(&self, data: &[u8]) -> Result<Vec<u8>> {
let doc = self.parse(data).await?;
self.serialize(&doc).await
}
}
Jeder Format-Crate enthält Roundtrip-Tests, die verifizieren, dass Parsing und Serialisierung für eine Bibliothek von Testdokumenten ein bitgenau identisches Ergebnis liefern.
Das gesamte Projekt wird auf Codeberg gehostet — einer in Europa gehosteten Free-Software-Git-Plattform. Die CI wird durch Forgejo Actions, die integrierte Runner-Infrastruktur von Codeberg, betrieben.
Die CI-Pipeline läuft auf geteilten codeberg-medium Runnern (4 CPU, 8 GB RAM) und umfasst:
--test-threads=1 für Dateisystem-Isolierung), Build-Checks für alle Targetstsc Typprüfung, pnpm build über das Turborepo-Monorepo hinwegHinweis zur Release-Pipeline: Die ursprüngliche Release-Pipeline wurde durch
has_actions: Falseblockiert (Forgejo Actions müssen pro Repo explizit aktiviert werden) sowie durch Workflows, die aufdocker://node:20-bookwormImages referenzierten (Codeberg-Shared-Runner unterstützen nur ihre eigenen Labels). Beide Probleme wurden gelöst: Actions wurden über die API aktiviert und alle 7 Workflow-Dateien wurden aufcodeberg-mediumRunner migriert.
Der Desktop-Proof-of-Concept hat einen funktionalen Zustand erreicht. Wichtige Metriken:
| Metrik | Wert |
|---|---|
| Rust-Quelldateien | 16 Module |
| Registrierte Tauri-Commands | 68 |
| Rust Unit-Tests | 8 (alle bestanden) |
| Vitest Integration-Tests | 17 bestanden, 1 übersprungen |
| Binärgröße | ~19 MB |
| Bundle-Größe (.deb) | 5,9 MB |
| Build-Targets | deb, rpm, AppImage, msi (Windows), dmg (macOS) |
| Build-System | Rust nightly + pnpm + Turborepo + Tauri 2 |
Alle Rust-Module verwenden Plattform-Abstraktions-APIs (tokio::fs, std::path::Path, dirs crate, keyring crate). Der einzige plattformspezifische Code befindet sich im Update-Installer, der an das entsprechende System-Tool weiterleitet:
pkexec dpkg -i für .deb-Paketemsiexec /i für .msi-Installerhdiutil attach → Bundle-Kopie → hdiutil detach für .dmg-Disk-ImagesWorld-Office befindet sich in aktiver Entwicklung. Die unmittelbaren Prioritäten sind:
graphwiz-ai/debian-repoDie wichtigste architektonische Entscheidung war die Wahl der Programmiersprache. Rust bietet uns Speichersicherheit ohne Garbage Collection, deterministische Performance beim Parsen von Dokumenten und einen Compiler, der ganze Kategorien von Bugs bereits zur Build-Zeit abfängt. TypeScript im Frontend ermöglicht uns eine schnelle Iteration der Editing-Experience. Tauri verbindet beides mit einer minimalen nativen Shell.
World-Office ist freie Software (AGPL-3.0 für den Server, MIT für Grafiken). Der Quellcode befindet sich unter codeberg.org/World-Office/server. Beiträge, Bug-Reports und Diskussionen sind willkommen.