Offline-first word processing for low-resource environments.
Free. Local. Open.
Repository - Features - Build From Source - Documentation - Contributing
900Word is a local-first desktop word processor designed for communities where expensive subscriptions, constant connectivity, and high-end hardware are not realistic assumptions.
The first release track focuses on safe local document editing with OpenDocument Text (.odt) as the native format. DOCX support is import/export conversion only. Network sync, real-time collaboration, runtime plugins, legacy binary .doc, and full encryption are intentionally deferred until their security and privacy designs are documented and tested.
v0.1.0 is a public source release. It is intended for developers and early testers who are comfortable building from source. It is not a signed binary installer release.
Public claims for this release are intentionally conservative:
- Local-first editing with
.odtas the canonical saved document format. - Bounded
.docximport/export conversion for the supported subset documented in this repository. - Current export and print paths: TXT, sanitized HTML, lightweight PDF export, and sanitized WebView print preparation.
- No telemetry by default.
900Word does not claim broad Microsoft Word, LibreOffice, Google Docs, or ONLYOFFICE compatibility for v0.1.0. External office-suite behavior must be backed by generated or sanitized placeholder compatibility evidence before it is described as supported.
Current foundation:
- Tauri v2 desktop shell with a Rust backend and Svelte 5 frontend.
- ProseMirror editing surface projected from a Rust-owned document model.
- Editor, Settings, and About shell views for the desktop workspace.
- Constrained ProseMirror schema for the current
word-coreprojection. - ODT MVP package read/write for paragraphs, headings, inline marks, links, lists, tables, page breaks, metadata, named styles, and allowlisted embedded image bytes.
- Bounded DOCX import/export conversion for paragraphs, Heading 1-3, basic inline marks, safe hyperlinks, simple lists, simple tables, simple page-region headers/footers/page fields, embedded PNG/JPEG/GIF/WebP image assets, simple anchored comments, simple text-only tracked insertions/deletions, and simple footnotes/endnotes, with warnings for degraded imports.
- Local file workflow commands for new/open/save/save-as, autosave, recovery drafts, and privacy-preserving recent document tokens.
- Editing toolbar controls for undo/redo, inline marks, paragraph/heading styles, find/replace, sanitized starter templates, ODT-backed page setup metadata, and keyboard-accessible view traversal.
- Hunspell-shaped word-list spell-check loading with a generated minimal
en-USbootstrap dictionary, user dictionary folder support, missing-dictionary fallback, and initial UI localization. - Local TXT, sanitized HTML, lightweight paginated PDF with page-range export, simple table boxes, bounded JPEG image embedding, visible figure placeholders for unsupported image payloads, and bounded safe external URI annotations, plus minimal DOCX export-to-path workflows and a WebView print flow using sanitized print HTML.
- Rust workspace crates for document model, ODT/DOCX handling, spell-check boundaries, export, and sanitized fixtures.
- Generated JSON fixtures with multilingual sample content only.
- No telemetry by default.
- Offline startup smoke tests for the desktop boot path.
- GPL-3.0-or-later licensing.
- Public-release privacy checks for local paths, hostnames, secrets, and generated artifacts.
Known limitations and deferred scope for v0.1.0:
- No official signed installers, notarized packages, or automatic binary update channel.
- No cloud sync, accounts, collaboration, remote document storage, or plugin runtime.
.odtis the canonical saved format; DOCX remains a conversion boundary and may degrade unsupported structures with warnings.- External office-suite compatibility claims are limited to evidence captured from generated or sanitized placeholder documents.
- Deterministic pagination, full print-layout fidelity, broad Word/LibreOffice feature parity, legacy
.doc, rich style management, mail merge, macros, and full-document encryption remain deferred. - Hunspell support is still bounded; full affix expansion, broader dictionary compatibility, and richer dictionary packaging remain future work.
- Accessibility, keyboard navigation, localization, and high-contrast behavior need continued testing across platforms.
900Word uses one durable source of truth:
word-coreowns the normalized document model.- ProseMirror is an editing projection in the desktop UI.
- ODT is the persisted package format for saved documents.
- Rust import/export code sanitizes external content before it reaches the frontend.
Repository layout:
900Word/
├── apps/desktop/ # Tauri v2 + Svelte 5 desktop app
├── crates/word-core/ # Document model, commands, undo/redo, stats
├── crates/word-docx/ # DOCX import/export conversion boundary
├── crates/word-odf/ # ODT package validation and read/write boundary
├── crates/word-spell/ # Spell-check dictionary boundary
├── crates/word-export/ # TXT, HTML, and lightweight PDF export adapters
├── crates/word-fixtures/ # Sanitized generated fixtures only
├── docs/ # Public documentation, ADRs, sprint records
└── scripts/ # Validation and release-preflight scripts
Prerequisites:
- Rust 1.88+
- Node.js 20.19+, 22.12+, or 24+
- Tauri v2 system dependencies for your operating system
git clone https://github.com/900Labs/900Word.git
cd 900Word
npm install
npm run check
cargo test --workspace
npm run tauri:devUse the official Tauri prerequisite guide for OS-specific native packages: https://v2.tauri.app/start/prerequisites/.
Run the local quality gate before opening a pull request:
./scripts/verify-local.shRun the public-release privacy gate before changing repository visibility or publishing a release:
./scripts/verify-public-release.sh- Documentation index
- Architecture
- Roadmap
- Quality gate
- Public release checklist
- Release evidence
- v0.1.0 release notes
- Threat model
- Privacy model
- File format security
See CONTRIBUTING.md. Contributions must include matching documentation updates when behavior, workflows, public APIs, or contributor expectations change.
900Word is licensed under GPL-3.0-or-later. See LICENSE and THIRD_PARTY_LICENSES.md.