103 lines
3.7 KiB
Markdown
103 lines
3.7 KiB
Markdown
# Office Tools
|
|
|
|
Office Tools is a local-first browser application for opening and inspecting
|
|
office documents without sending them to a server. The initial release focuses
|
|
on safe, useful viewing of documents, spreadsheets and presentations in both
|
|
Office Open XML and OpenDocument packages.
|
|
|
|
The application is part of the
|
|
[add·ideas Toolbox](https://git.add-ideas.de/lotobo/toolbox-portal), but remains
|
|
fully usable as a standalone static site at any URL depth.
|
|
|
|
## Initial format scope
|
|
|
|
| Kind | Office Open XML | OpenDocument | Legacy binary |
|
|
| ------------- | --------------- | ------------ | ------------------------------------- |
|
|
| Documents | `.docx` | `.odt` | `.doc` is a later compatibility track |
|
|
| Spreadsheets | `.xlsx` | `.ods` | `.xls` is a later compatibility track |
|
|
| Presentations | `.pptx` | `.odp` | `.ppt` is a later compatibility track |
|
|
|
|
The viewer is deliberately read-only. It aims to preserve readable content,
|
|
structure and useful styling while clearly reporting features it cannot render.
|
|
It does not claim pixel-perfect fidelity with Microsoft Office or LibreOffice.
|
|
Macros, scripts, external resources and embedded active content are never run.
|
|
|
|
Office Open XML files use local Rust/WebAssembly parsers and canvas renderers.
|
|
OpenDocument files use the project's bounded ZIP/XML reader and semantic React
|
|
views. Both paths run locally, keep the interface responsive, support search and
|
|
navigation, and accept source files up to 100 MiB.
|
|
|
|
See [docs/FORMAT-SUPPORT.md](docs/FORMAT-SUPPORT.md) for the feature matrix and
|
|
known limits.
|
|
|
|
## Privacy and security
|
|
|
|
- File bytes are read locally and are never uploaded.
|
|
- There is no telemetry, analytics or CDN runtime dependency.
|
|
- Imported markup is converted to application-owned React output; it is not
|
|
inserted as trusted HTML.
|
|
- Document links remain inert in this release, and no macros, scripts or
|
|
embedded active objects are executed.
|
|
- Parsing uses explicit file, package and rendering limits. A malformed file
|
|
fails as data rather than taking over the application.
|
|
|
|
See [docs/PRIVACY-SECURITY.md](docs/PRIVACY-SECURITY.md) for the threat model.
|
|
|
|
## Development
|
|
|
|
Requirements: Node.js 22 or newer and npm 11 or newer. The committed `.npmrc`
|
|
points the `@add-ideas` scope at the ADD Ideas package registry; credentials stay
|
|
in the caller's npm configuration.
|
|
|
|
```sh
|
|
npm ci
|
|
npm run dev
|
|
```
|
|
|
|
The complete local verification gate is:
|
|
|
|
```sh
|
|
npm run check
|
|
npm run test:browser
|
|
```
|
|
|
|
`vite.config.ts` uses `base: './'`. All application URLs, WASM and worker assets
|
|
must remain relative so a production build works at `/apps/office/`, in a deeper
|
|
test path, or standalone.
|
|
|
|
## Release artifact
|
|
|
|
Create the deterministic application ZIP and checksum with:
|
|
|
|
```sh
|
|
npm run release:artifact
|
|
```
|
|
|
|
The result is written to:
|
|
|
|
```text
|
|
release/office-tools-0.1.0.zip
|
|
release/office-tools-0.1.0.zip.sha256
|
|
```
|
|
|
|
The archive contains `toolbox-app.json`, built assets, the full GPL licence,
|
|
third-party notices, a generated runtime licence inventory, documentation and
|
|
`SOURCE.md`. File order, timestamps and modes are normalized for reproducible
|
|
output.
|
|
|
|
## Toolbox identity
|
|
|
|
- Manifest id: `de.add-ideas.office-tools`
|
|
- Portal target: `office`
|
|
- Source: <https://git.add-ideas.de/lotobo/office-tools>
|
|
- Licence: `GPL-3.0-or-later`
|
|
|
|
The application uses `@add-ideas/toolbox-shell-react` 0.2.3 and validates its
|
|
production tree with `@add-ideas/toolbox-testkit`.
|
|
|
|
## Licence
|
|
|
|
Office Tools is free software licensed under GPL-3.0-or-later. See
|
|
[LICENSE](LICENSE). Bundled dependencies retain their own licences; see
|
|
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) and [LICENSES](LICENSES/README.md).
|