open source · self-host · MIT + Apache-2.0

.xlsx and .docx,
in your browser.

Real-time multi-peer co-editing. Saves back to the same byte-for-byte file. No accounts, no SaaS, no upsell — try the live demos below, or docker run it on your own server.

sheet.casualoffice.org docs.casualoffice.org

Real production demos, not screenshots. Open a real file, edit it, save it back — nothing leaves your browser unless you click Share.

CASUAL EDITOR 44/44 .docx fixtures · 100% round-trip
CASUAL SHEETS v0.1.0 self-host shipped
CO-EDIT live verified end-to-end · Yjs CRDT
LICENSE MIT + Apache no AGPL, no copyleft surprises
three editors, one suite

A spreadsheet, a document editor,
and a slide deck. Every line on GitHub.

/products

Casual Sheets

EXCEL-FLAVORED WEB SPREADSHEET

Open .xlsx, .ods, .csv, .tsv. Real-time co-editing, pivot tables with drill-down, 8 chart types with trendlines, sparklines, version history, and .xlsm macro passthrough that round-trips byte-equal.

  • .xlsx · .ods · .csv · .tsv round-trip
  • Pivot tables · 8 chart types · sparklines
  • Real-time via Yjs + Hocuspocus
  • Self-host: memory · local · S3 · Postgres
v0.1.0 · 357 e2e Read more →

Casual Editor

WORD-FLAVORED .DOCX EDITOR

Open .docx in the browser with WYSIWYG fidelity. Fork of eigenpal/docx-editor on top of ProseMirror with an OOXML-preserving model. The stateless Go gateway speaks the y-websocket protocol in roughly 120 lines.

  • .docx round-trip · 44/44 fixtures pristine
  • ProseMirror + OOXML model · page color · table fidelity
  • Yjs + Go y-websocket gateway
  • Co-edit verified end-to-end (smoke + tests)
M1 backend live · public preview Read more →

Casual Slides

POWERPOINT-FLAVORED WEB SLIDES

Open .pptx in the browser with deep OOXML fidelity — 68 of 87 fidelity probes passing after wave 7o. Office-style ribbon, slide-panel thumbnails, layout templates, theme + background pickers, Slide Show mode. Co-edit is a Phase-2 spike today; Yjs migration is the v0.1.0 blocker.

  • .pptx round-trip · 68 / 87 fidelity ✓
  • Office ribbon · 6 layouts · themes · backgrounds
  • Tables · charts · text outline · arrowheads · effects
  • Fork-and-patch on Univer Slides OSS
v0.0.0 · pre-tag · active Read more →

Casual Desktop

TAURI BINARIES · PAUSED

A native binary for macOS, Linux, and Windows that would reuse the web cores verbatim. Paused until both web editors reach feature parity; the work is queued, not abandoned.

  • Tauri shell · reuses the web cores
  • macOS · Linux · Windows
  • Single-user · offline
  • Resumes after web v1
paused · queued Read more →
why bother

Six reasons to take this seriously.

/why

The file is the source of truth

Open .xlsx or .docx, edit, save back to the same bytes. The audit counts every OOXML tag round-trip; Casual Editor is at 100% on 44 fixtures.

Real-time, actually verified

Yjs CRDT in the browser, a ~120 LOC Go gateway on the server. A 5-second smoke proves multi-peer text, awareness, and live rename — every push runs it.

Stateless backend

No database, no on-disk update log in the real-time path. Session state lives in memory while peers are connected, then drains to the host integration on the last disconnect.

Permissive, forever

MIT on the editor packages, Apache-2.0 on the backend. No copyleft, no AGPL trapdoor, no "open core" features hidden behind a paid tier.

One container, one port

Multi-arch images (amd64 + arm64) on Docker Hub. OCI labels, SBOM and provenance attestations. docker run and you're running both the editor and the WS gateway.

Built in the open

Every commit, every fixture, every failing-then-passing test visible on GitHub. The roadmap is a doc, not a slide deck. Pick an issue, open a PR.

embed

Drop it into your own app.

npm
Install
npm i @eigenpal/docx-js-editor
Use
import { DocxEditor } from '@eigenpal/docx-js-editor';

export default function App() {
  return <DocxEditor onSave={(blob) => saveAs(blob, 'doc.docx')} />;
}
Works with

The editor packages ship as ESM + UMD. The Go gateway is a separate process — run it alongside any backend that speaks HTTP. Casual Sheets ships as the full hosted shell today; embed APIs land in v0.2.

self-host

From zero to a running suite in one command.

docker
services:
  app:
    image: schnsrw/casual-sheets:0.1
    ports: ['3000:3000']
    environment:
      CASUAL_STORAGE: local
      CASUAL_LOCAL_PATH: /data/workbooks
    volumes:
      - data:/data
volumes:
  data:
community-first

Help shape v1.

/contribute

Star the repos

Stars are the only signal that says "keep going." Two repos: docx for Casual Editor, sheets for Casual Sheets.

Open an issue

Real-world .docx or .xlsx that breaks? Attach the file. Every regression fixture in the audit started life as someone's broken document.

Send a PR

The bar is the green CI suite plus a fixture that pins the change. Both repos have CONTRIBUTING.md; the issue trackers tag good-first-issue.

questions

Common questions.

/faq
What is Casual Office, in one sentence?
Two real office editors — sheets + docs — that open native Office files in the browser, sync in real time, and save back to the original byte-for-byte format. Open source. Self-hostable as one Docker container.
Is this a SaaS? Will it ever be?
No. The public demos at sheet.casualoffice.org and docs.casualoffice.org have no accounts, no plans, no upsell. The project is permissively licensed and free forever in the editions you can see today.
How does the .xlsx / .docx round-trip work?
The file is the source of truth. Open → in-memory snapshot → edit → re-serialize back to the original OOXML shape. Casual Sheets carries macros and pivot caches through byte-equal. Casual Editor scores 44/44 fixtures pristine in the per-tag fidelity audit.
Real-time co-editing — what powers it?
Yjs (industry-standard CRDT) in the browser, paired with Hocuspocus (Casual Sheets) or a custom ~120-line Go y-websocket gateway (Casual Editor). State lives in memory while a session is active; persistence is delegated to the host integration.
Do I need a database?
No. Default storage is in-memory or local filesystem. Casual Sheets v0.1 also ships S3-compatible and Postgres backends — pick one with a single env var or skip them entirely.
Can I embed it in my own React or Vue app?
Yes for Casual Editor — it ships as npm packages (`@eigenpal/docx-js-editor`, `@eigenpal/docx-editor-vue`). The Go gateway is a separate process you can run alongside any backend. Casual Sheets is currently a hosted shell; embedding APIs are planned for v0.2.
Where does it not fit?
If you need server-side PDF rendering, automatic version history out of the box, enterprise SSO, or compliance certifications, this is not that. It is a focused open-source pair of editors, not a managed compliance suite.
Why does this exist?
A counterposition to megasuites. Each product is small enough to read end-to-end, every line is on GitHub, and the file format is owned by the user — not the vendor.

Files in.
Files out.

Casual Office is a small office suite built like infrastructure. Composable, file-shaped, permissive — closer to a UNIX tool than a SaaS product.

Open source Self-hostable MIT + Apache-2.0 Real-time, verified