OpenDocument Reader for Windows, macOS and Linux. It opens OpenDocument, Microsoft Office, PDF, Apple iWork and many other files, and it edits and saves the formats that OpenDocument.core can write. The documents stay on the computer.
The app is a Tauri 2 shell around the WebAssembly build of
the core, @opendocument/odr-core.
The website demo at https://opendocument.app/tryit uses the same build.
You need Node 22 (.nvmrc), a stable Rust toolchain, and the
Tauri prerequisites of your system.
npm install
npm run tauri dev # starts the app with hot reload
npm run tauri build # writes the installers to src-tauri/target/release/bundle/npm run check type-checks the frontend. After a build,
node test/smoke.mjs src-tauri/target/release/opendocument-desktop opens each
document in test/documents/ in the app and saves a copy.
- In a pull request, set the version in
package.json(npm version --no-git-tag-version 0.2.0), and change theUnreleasedheading ofCHANGELOG.mdto that version. - Run the
releaseworkflow with that version.dry_runbuilds only. - The workflow writes a draft release with the installers for macOS (universal), Windows (x64) and Linux (x64 and arm64). Publishing the draft writes the tag.
The macOS build is signed with Developer ID and notarized if the repository has
the secrets APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD,
APPLE_SIGNING_IDENTITY, APPLE_API_ISSUER, APPLE_API_KEY and
APPLE_API_KEY_CONTENT. Without them, it is signed ad hoc, and macOS asks the
user to confirm the first start. The Windows build is not signed.
| Path | What |
|---|---|
src/ |
the frontend: TypeScript, Vite and Tailwind |
src-tauri/ |
the Rust shell: windows, menus, file access, bundling |
scripts/sync-odr.mjs |
copies the core from node_modules into public/odr/ |
test/ |
the smoke test and its documents |
AGENTS.md describes the architecture and the rules.