No account · No telemetry · No lock-in
Diwanديوان
A real, self-hostable collaborative office suite you own.
Documents, spreadsheets, slides and whiteboards in one warm, modern web app — shipped as a single Go binary with the entire frontend embedded. Real-time co-editing is peer-to-peer and CRDT-native: there is no central document server. Your files live in your own storage.
Five surfaces, one binding
Documents-only by design — Docs, Sheets, Slides, Whiteboards and PDF. Chat, video and mail are deliberately not part of it. Each surface carries its own calm hue, so the suite is findable at a glance.
Docs. Headings, tables, inline images, footnotes, task lists and links. Anchored comments, suggestions with accept and reject, version history with restore, find and replace, a live outline and a word count.
Sheets. A full grid — formulas, number formats, conditional formatting, data validation, charts, filters, pivot tables, named ranges and freeze panes.
Slides. A from-scratch positioned-object canvas — free drag, resize and rotate of text, shapes and images; per-element animations, themes, editable master slides, per-slide transitions, and a presenter view with notes and a timer.
Whiteboards. An infinite hand-drawn canvas built on the MIT-licensed Excalidraw editor — shapes, arrows, freehand, text and images. The scene is a Yjs CRDT synced over the same end-to-end-encrypted peer-to-peer engine as Docs.
PDF. View, annotate, fill AcroForm fields and sign — including multi-party signing envelopes with a cryptographic audit trail. Import and export .docx, .xlsx, .csv, .pptx, Markdown, HTML and PDF.
Co-editing without a middleman
Real-time editing that no server can read. Peers converge with no authority in the middle — because edits are conflict-free, and the room key never leaves your browser.
No central document server
Docs and whiteboards sync as Yjs updates; Sheets and Slides use last-write-wins and tree CRDTs. Peers connect directly over WebRTC. The only server role is content-blind peer discovery — it learns that peers share a random room id, never any content.
End-to-end encrypted rooms
Every session runs inside an encrypted room whose key never reaches any server. Share by invite link — the key rides the URL fragment, which browsers never send upstream. A content-blind relay steps in only as a hard-NAT fallback.
Standalone, always
Point Diwan at any self-hosted rendezvous service and peer-to-peer co-editing works with no Vulos OS and no host box required. Set nothing, and it stays local-only. Nothing is hosted for you unless you choose it.
One binary, your storage
Diwan runs by itself — no account, no cloud, no external service required. No database server either, unless you want one.
# Docker — one line $ docker run -d --name diwan \ -p 8080:8080 \ -v diwan-data:/srv/data \ ghcr.io/vul-os/diwan:latest # …or build the single binary from source $ git clone https://github.com/vul-os/diwan.git $ cd diwan $ npm install && npm run build $ ./diwan
- 01Run itThe Docker one-liner, or build from source with Go 1.25+ and Node 18+. The whole frontend is embedded in the binary — there is nothing else to serve.
- 02Open the appHead to
http://localhost:8080. Single-user with local storage by default; data lives in./dataand./uploads. - 03Own itOptionally turn on auth, PostgreSQL, or an S3-compatible store, and point it at a rendezvous service for peer-to-peer co-editing. Every one of those is opt-in.
What you actually get
Plainly, and without the marketing. If it is not in this register, Diwan does not do it.
- Storage
- Local filesystem by default. Optionally PostgreSQL, or any S3-compatible bucket you control.
- Formats in & out
.docx.xlsx.csv.pptx.pdf.md.html— open formats in both directions, no lock-in.- Accounts
- None. Auth is off by default and single-user; turn on a password when you want one.
- Telemetry
- None. Nothing phones home. Fonts are self-hosted, so a self-hosted install leaks no address either.
- Collaboration
- Peer-to-peer over WebRTC, end-to-end encrypted, CRDT-native. A content-blind relay only as a hard-NAT fallback.
- Deliberately absent
- Chat, video calls and mail. Diwan is a documents product; those belong to other tools.
- Runtime
- One Go 1.25 binary with a React 18 frontend embedded. No Node at runtime, no database server required.
- Licence
- MIT or Apache-2.0, at your option. Fork it, ship it, keep it.
On the name
- dīwānn. — the bureau
- The office of registers: the room where records were written, bound and kept, and the clerks who kept them.
- dīwānn. — the collection
- A gathered volume: the complete works of a single author, assembled and bound in one place rather than scattered.
Both senses are the same promise. Your documents, gathered and bound, in your own keeping — not scattered across somebody else's servers.
The mark is an iwan — the vaulted portal at the heart of Persian and Ottoman architecture: the arch you pass through to reach the room where the registers were kept. Give it a quarter turn — it becomes a D
Part of Vulos
Vulos is a family of open, self-hostable apps. Diwan is a fully standalone product — it never requires Vulos infrastructure — but it also installs as a one-click app on a Vulos OS box, where the same binary runs behind the box gateway with scoped storage and single sign-on. Self-hosting it yourself is always the default path, and never second-class.
Explore Vulos →