Independent, open-source document editing suite — Rust is back.
Cloud-native. WOPI-first. Built for scale.
Repository &
Organization &
Code of Conduct &
Contributing &
Security
YES, Rust is the future. The Python
opencloud-docserverexperiment taught us that simplicity has value, but the performance, type-safety, and ecosystem depth of Rust are what World-Office needs to compete with commercial offerings.
This is a cloud-first, Rust-based document editing platform. The entire stack is designed for containerized deployment, WOPI integration, and horizontal scaling. We're consolidating all development efforts back into this Rust workspace.
World-Office is an independent, open-source document editing suite designed for the cloud era.
- Rust Core: 26 format parsers, canvas rendering, conversion pipeline, protocol servers
- WOPI-First: Native WOPI protocol support for OpenCloud, Nextcloud, SharePoint, and any WOPI-compliant host
- Cloud-Native: Docker-ready, Kubernetes-ready, stateless services where it matters
- Format Agnostic: DOCX, ODT, PDF, EPUB, HTML, RTF, and 15+ other formats
- Real-Time Collaboration: Co-authoring service built on CRDTs
- Enterprise Ready: Signatures, DRM, redaction, watermarking, comparison via enterprise crates
Everything is AGPL-3.0-or-later licensed. Enterprise extensions available under a separate
commercial license (see LICENSE-COMMERCIAL).
World-Office is built as a collection of cloud-native microservices that work together to provide a complete document editing experience. All services are container-ready and can be deployed independently or as a unified stack.
┌─────────────────────────────────────────────────────────────────────────┐
│ Client Browsers │
│ (React-based Word, Sheets, Slides, PDF, Visio editors) │
└──────────────────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ API Gateway (Rust) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ WOPI Proxy │ │ REST API │ │
│ └─────────────┘ └─────────────┘ │
└───────────────────────────┬─────────────────┬───────────────────────────┘
│ │
┌───────────────▼───────┐ ┌───────▼───────────────┐
│ wo-docserver │ │ identity-service │
│ (Document UI Host) │ │ (AuthN/AuthZ) │
└───────────────┬───────┘ └───────┬───────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ WOPI Host / Storage │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ OpenCloud │ │ Nextcloud │ │ S3/MinIO │ │
│ │ (OCIS) │ │ │ │ (Object Storage) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
| Service | Port | Description |
|---|---|---|
api-gateway |
8080 | Request routing, load balancing, rate limiting |
wo-docserver |
8081 | Document editor UI + WOPI client proxy |
identity-service |
8082 | JWT/OAuth2 authentication, session management |
storage-service |
8083 | File metadata + blob storage backend |
conversion-service |
8084 | Format-to-format conversion (27+ converters) |
coauthoring-service |
8085 | Real-time collaborative editing (CRDT-based) |
admin-panel |
8086 | Admin dashboard, monitoring, configuration |
The WOPI protocol (Web Application Open Platform Interface) is at the heart of World-Office's cloud strategy. We implement both sides:
- WOPI Client (
wo-wopicrate): Connects to external WOPI hosts (OpenCloud, SharePoint, etc.) - WOPI Server (
wo-docserver): Hosts the editing experience and proxies to WOPI hosts
Supported WOPI endpoints:
CheckFileInfo- Get document metadata and capabilitiesGetFile- Download file contentPutFile- Upload/save file contentLock/Unlock- Co-authoring lock managementGetLock- Check current lock status
The Rust core provides the foundation for all document operations.
| Crate | Description |
|---|---|
wo-common |
Shared types, errors, test harness |
wo-txt |
Plain text parser |
wo-unicode |
Encoding conversion (ICU-backed) |
wo-fb2 |
FictionBook 2.0 parser + serializer |
wo-html |
HTML import/export |
wo-rtf |
Rich Text Format parser + serializer |
wo-epub |
EPUB parser + serializer (ZIP-based) |
wo-hwp |
Korean HWP format parser |
wo-djvu |
DjVu document parser |
wo-xps |
XPS document parser |
wo-ofd |
Chinese OFD document parser |
wo-odf |
OpenDocument format parser + serializer (ZIP + XML) |
wo-pdf |
PDF reading and writing |
wo-msbinary |
OLE compound document parser to JSON |
wo-ooxml |
OOXML (DOCX/XLSX/PPTX) parser and serializer |
wo-x2t |
Format conversion orchestrator (27 native converters, chain support) |
| Crate | Description |
|---|---|
wo-renderer |
Canvas rendering engine (text layout, gradients, transforms) |
wo-fonts |
Font loading, caching, CSS-compliant matching |
wo-raster |
Image encode/decode (PNG, BMP) |
| Crate | Description |
|---|---|
wo-x2t-wasm |
Format conversion compiled to WASM (wasm-bindgen) |
wo-renderer-wasm |
Canvas rendering compiled to WASM (Web Canvas bridge) |
| Crate | Description |
|---|---|
wo-office-utils |
ZIP/archive manipulation |
wo-docx-renderer |
DOCX to PDF rendering pipeline |
wo-wopi |
WOPI protocol server (axum, CheckFileInfo/GetFile/PutFile) |
wo-webdav |
WebDAV server (axum, PROPFIND/MKCOL/PUT/DELETE/LOCK) |
wo-docserver |
Document server: serves editor UI, proxies WOPI requests |
React-based editors for all document types, served from the Rust backend.
Individual editors (apps/web/apps/):
documenteditor-react- Word processingspreadsheeteditor-react- Spreadsheets with formulaspresentationeditor-react- Slides with animationspdfeditor-react- PDF viewing and annotationvisioeditor-react- Diagram and flowchart editing
Shared packages (packages/):
@world-office/editor-common- Shared editor logic@world-office/editor-stores- State management (MobX)@world-office/design-system- UI components@world-office/collaboration-client- Real-time sync@world-office/i18n- Translations
The presentation editor includes: shapes, text editing, undo/redo, clipboard, property panels, multi-select, grouping, images, tables, charts, connectors, slide backgrounds, animations, presenter view, and zoom.
Available under separate commercial license (LICENSE-COMMERCIAL).
Enterprise core crates (core-enterprise/crates/):
wo-digital-signature- Document signingwo-redaction- Content redactionwo-drm- Digital rights managementwo-watermark- Watermark insertionwo-comparison- Document comparisonwo-converter-pro- Advanced conversion features
Enterprise services (services-enterprise/):
audit-service- Comprehensive audit loggingscim-service- SCIM 2.0 for identity provisioningwebhook-service- Event-driven integrations
# Clone the repository
git clone https://github.com/World-Office/server.git
cd server
# Build and start all cloud services
docker compose -f docker-compose.yml -f docker-compose.services.yml up -d
# Access the admin panel at http://localhost:8086
# Editors are available at http://localhost:8081/editor/{document-id}# Build the entire Rust workspace
cargo build --workspace
# Run all Rust tests
cargo test --workspace --lib -- --test-threads=1
# Start individual services
cargo run -p wo-docserver -- --port 8081
cargo run -p api-gateway -- --port 8080
cargo run -p identity-service -- --port 8082
# Frontend (pnpm monorepo)
pnpm install
pnpm dev# Helm chart available in deploy/charts/
helm install world-office deploy/charts/world-office -n world-office --create-namespace
# Or use kustomize
deploy/kustomize/overlay/production/ | kubectl apply -f -930+ tests across the Rust workspace:
- Format parsers: ~430 tests (16 crates)
- Rendering engine: ~125 tests (
wo-renderer) - Document server: ~45 tests (
wo-docserver) - Font system: ~36 tests (
wo-fonts) - Raster imaging: ~22 tests (
wo-raster) - Rendering pipeline: ~25 tests (
wo-docx-renderer) - Services: ~42 tests (storage, session, identity, conversion, coauthoring)
E2E test suite (tests/):
- Full document editing stack tests
- WOPI protocol compliance tests
- Collaboration scenario tests
- Using Jest + Playwright with Docker Compose
# Run all tests
cargo test --workspace --lib -- --test-threads=1
# Run E2E tests
docker compose -f docker-compose.yml -f docker-compose.test.yml up --abort-on-container-exitWorld-Office works with any WOPI-compliant host:
| Host | Integration Path | Status |
|---|---|---|
| OpenCloud (OCIS) | integrations/opencloud/ |
✅ Production |
| Nextcloud | integrations/nextcloud/ |
✅ Production |
| SharePoint Online | Native WOPI | ✅ Tested |
| OnlyOffice | Native WOPI | ✅ Tested |
| Custom WOPI Host | Native WOPI | ✅ Works |
If you're currently using the Python opencloud-docserver:
- Decommission: The Python docserver was a minimal experiment. Rust is production-ready.
- Deploy Rust: Use the Docker Compose or Kubernetes instructions above.
- Configure WOPI: Point to your existing WOPI host (OpenCloud, Nextcloud, etc.).
- Migrate Data: If using local storage, migrate documents to the new storage-service.
Key differences:
- ✅ Performance: Rust handles 10x-100x more concurrent users
- ✅ Formats: 15+ formats vs. 2 (DOCX, ODT)
- ✅ Features: Full document fidelity, advanced rendering, collaboration
- ✅ Ecosystem: Native desktop apps, WASM, mobile support
See ROADMAP.md. Current focus areas:
- Cloud-Native Features - Kubernetes operator, auto-scaling, service mesh
- WOPI 2.0 Compliance - Full protocol support, certification
- Collaboration - Improved CRDT implementation, presence indicators
- Performance - Rendering optimization, memory management
- Enterprise - Enhanced security, compliance, audit features
- AGENTS.md - Development workflow for contributing agents
- DEPLOYMENT.md - Production deployment guide
- COLLABORATION_ANALYSIS.md - Team collaboration patterns
- ARTISTIC_PROPORTIONS.md - Design principles
- docs/ - In-depth technical documentation
- core/crates/wo-wopi/README.md - WOPI protocol deep dive
See CONTRIBUTING.md. We welcome contributions!
- Conventional commits required
- Tests required for all code changes
- Code review via pull requests
- Discussion in World-Office Discussions
See SECURITY.md. Report vulnerabilities to world-office@graphwiz.ai.
AGPL-3.0-or-later. See LICENSE for details.
Enterprise extensions are available under a separate commercial license (see LICENSE-COMMERCIAL).
