WOPI (Office Document Editing)
OxiCloud integrates with Collabora Online and OnlyOffice via the WOPI protocol, letting users edit documents, spreadsheets, and presentations directly in the browser.
How It Works
- User opens a document (
.docx,.xlsx,.pptx,.odt, etc.) - OxiCloud generates a WOPI access token and redirects to the editor
- The editor fetches the file from OxiCloud via WOPI endpoints
- Edits are saved back via
PutFile
Host / Client Flow
OxiCloud acts as the WOPI host and Collabora or OnlyOffice acts as the WOPI client.
- OxiCloud loads the discovery document from the configured WOPI client
- The frontend opens a host page that embeds the editor in an iframe
- The iframe URL includes
WOPISrc, which points back to OxiCloud's/wopi/files/*endpoints - The editor calls back into OxiCloud with the WOPI access token to read, lock, and save the file
Configuration
bash
OXICLOUD_WOPI_ENABLED=true
OXICLOUD_WOPI_DISCOVERY_URL="http://collabora:9980/hosting/discovery"| Variable | Default | Description |
|---|---|---|
OXICLOUD_WOPI_ENABLED | false | Enable WOPI integration |
OXICLOUD_WOPI_DISCOVERY_URL | — | Editor's WOPI discovery URL |
OXICLOUD_WOPI_BASE_URL | OXICLOUD_BASE_URL | URL the editor uses to call OxiCloud's /wopi/* endpoints |
OXICLOUD_WOPI_PUBLIC_BASE_URL | OXICLOUD_WOPI_BASE_URL | URL the browser uses to open the host page and the postMessage origin |
OXICLOUD_WOPI_SECRET | (JWT secret) | Token signing key |
OXICLOUD_WOPI_TOKEN_TTL_SECS | 86400 | Access token lifetime |
OXICLOUD_WOPI_LOCK_TTL_SECS | 1800 | Lock expiration |
If Collabora or OnlyOffice runs on a separate hostname, OXICLOUD_WOPI_PUBLIC_BASE_URL should still point to OxiCloud's public URL, not the office URL. Use OXICLOUD_WOPI_BASE_URL only when the editor reaches OxiCloud through a different callback URL (for example an internal Docker or cluster address).
Docker Compose with Collabora
yaml
services:
collabora:
image: collabora/code:latest
environment:
- domain=oxicloud\\.example\\.com
- extra_params=--o:ssl.enable=false
ports:
- "9980:9980"
cap_add:
- MKNOD
oxicloud:
environment:
OXICLOUD_WOPI_ENABLED: "true"
OXICLOUD_WOPI_DISCOVERY_URL: "http://collabora:9980/hosting/discovery"Docker Compose with OnlyOffice
yaml
services:
onlyoffice:
image: onlyoffice/documentserver:latest
environment:
- JWT_ENABLED=false
ports:
- "8443:443"
oxicloud:
environment:
OXICLOUD_WOPI_ENABLED: "true"
OXICLOUD_WOPI_DISCOVERY_URL: "http://onlyoffice/hosting/discovery"
OXICLOUD_WOPI_PUBLIC_BASE_URL: "https://cloud.example.com"
# Optional when OnlyOffice reaches OxiCloud through a different internal URL.
# Otherwise OxiCloud falls back to OXICLOUD_WOPI_PUBLIC_BASE_URL / OXICLOUD_BASE_URL.
OXICLOUD_WOPI_BASE_URL: "http://oxicloud:8086"In that example:
- the browser loads OxiCloud from
https://cloud.example.com, soOXICLOUD_WOPI_PUBLIC_BASE_URLmust use that public OxiCloud URL - OnlyOffice calls OxiCloud from the Docker network, so
OXICLOUD_WOPI_BASE_URLcan usehttp://oxicloud:8086 - if both the browser and the editor use the same OxiCloud URL, you can omit both variables and rely on
OXICLOUD_BASE_URL
WOPI Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /wopi/files/{id} | CheckFileInfo — file metadata |
| GET | /wopi/files/{id}/contents | GetFile — download file content |
| POST | /wopi/files/{id}/contents | PutFile — save edited content |
| POST | /wopi/files/{id} | Lock / Unlock / RefreshLock / Rename / Delete / Save As |
Common X-WOPI-Override operations
| Override | Purpose |
|---|---|
LOCK | Acquire or refresh an editor lock |
UNLOCK | Release a lock |
REFRESH_LOCK | Extend the current lock |
PUT_RELATIVE | Save as a related file |
RENAME_FILE | Rename from inside the editor |
DELETE | Delete from the editor when supported |
Notes
CheckFileInfois required for every WOPI actionPutFileuploads the full file content back to OxiCloud- lock conflicts return
409 Conflictwith the current lock value - OxiCloud uses query parameter
?access_token=authentication for WOPI callbacks instead of the standard JWT middleware
Supported Formats
Any format supported by your Collabora or OnlyOffice installation, typically:
- Documents:
.docx,.odt,.doc,.rtf - Spreadsheets:
.xlsx,.ods,.xls,.csv - Presentations:
.pptx,.odp,.ppt