Skip to content

900Word

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 Release Scope

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 .odt as the canonical saved document format.
  • Bounded .docx import/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.

Features

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-core projection.
  • 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-US bootstrap 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.
  • .odt is 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.

Architecture

900Word uses one durable source of truth:

  1. word-core owns the normalized document model.
  2. ProseMirror is an editing projection in the desktop UI.
  3. ODT is the persisted package format for saved documents.
  4. 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

Build From Source

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:dev

Use the official Tauri prerequisite guide for OS-specific native packages: https://v2.tauri.app/start/prerequisites/.

Validation

Run the local quality gate before opening a pull request:

./scripts/verify-local.sh

Run the public-release privacy gate before changing repository visibility or publishing a release:

./scripts/verify-public-release.sh

Documentation

Contributing

See CONTRIBUTING.md. Contributions must include matching documentation updates when behavior, workflows, public APIs, or contributor expectations change.

License

900Word is licensed under GPL-3.0-or-later. See LICENSE and THIRD_PARTY_LICENSES.md.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages