9. Required Technology Stack
Required Technology Stack requirements from the authoritative Glitchpad Technical Specification.
Language and framework decision
Rust 1.96.0 with edition 2024 is the native and domain language. It owns source handles, raw-byte access, format evidence, metadata normalization, text round-trip profiles, revision checks, durable persistence, recovery storage, parser limits, and Tauri commands. Rust is selected for memory safety, explicit error handling, predictable native packaging, cross-platform libraries, and the ability to place hostile-file operations outside the WebView.
TypeScript 6 is the shared interface and renderer language. React 19 provides component composition, and Vite 8 provides the development and production bundle. TypeScript is selected because CodeMirror, unified, Mermaid, PDF.js, accessible DOM rendering, and Web Workers provide a mature document ecosystem across every Tauri WebView. React is restricted to view composition; explicit services and reducers own document state so renderer behavior remains testable without a component tree.
Kotlin is limited to the Tauri Android mobile-plugin boundary for intents, ContentResolver, URI grants, descriptors, provider metadata, and lifecycle callbacks. Business rules and renderer behavior MUST NOT be duplicated in Kotlin.
Selected dependency families
| Concern | Selection | Boundary |
|---|---|---|
| Application host | Tauri 2 | System WebViews and permissioned commands; no generic shell or broad filesystem capability |
| Editing and syntax | CodeMirror 6 and language-data packages | Lazy language loading; no language server or build integration |
| Markdown | unified, remark, GFM and footnote plugins, rehype, rehype-sanitize | One AST pipeline; raw HTML disabled |
| Mermaid diagrams | Mermaid 11.x API in a restricted local render context with final SVG allowlist sanitation | Standalone and Markdown-embedded use one adapter; no network, native bridge, scripts, click callbacks, loose security mode, or source rewrite |
| Raster images | Rust image with explicit features | Bounded decode; no default all-codec feature set |
| EXIF | kamadak-exif | Parsed in Rust; GPS marked sensitive |
| ICO | ico | Enumerate and preview every entry |
| SVG | resvg and usvg | Rasterized or safe tree output; no DOM insertion or external resources |
| PDF.js display layer and worker | Custom compact UI; no PDF JavaScript, submission, editing, or attachment launch | |
| DOCX | Mammoth plus shared sanitizer | Semantic HTML only |
| ODT | Rust zip, quick-xml, and an internal semantic document tree | OASIS 1.4 package subset; no macro, formula, or external execution |
| Serialization | Serde and JSON schema-versioned messages | No database in the core product |
An exact dependency enters the repository only after license, provenance, maintenance, vulnerability, bundle, platform, and fixture-corpus review. Patch versions are authoritative in lockfiles, not this prose.
Rejected stack directions
Electron is prohibited. Flutter and Compose Multiplatform replace mature browser renderer dependencies with a larger FFI or reimplementation burden. A fully native Rust UI lacks the required Android and renderer maturity. Per-platform native applications would duplicate behavior and conformance work. A browser-only application cannot implement associations, durable native sources, Android provider semantics, packaging, or offline local authority.