Glitchpad

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

ConcernSelectionBoundary
Application hostTauri 2System WebViews and permissioned commands; no generic shell or broad filesystem capability
Editing and syntaxCodeMirror 6 and language-data packagesLazy language loading; no language server or build integration
Markdownunified, remark, GFM and footnote plugins, rehype, rehype-sanitizeOne AST pipeline; raw HTML disabled
Mermaid diagramsMermaid 11.x API in a restricted local render context with final SVG allowlist sanitationStandalone and Markdown-embedded use one adapter; no network, native bridge, scripts, click callbacks, loose security mode, or source rewrite
Raster imagesRust image with explicit featuresBounded decode; no default all-codec feature set
EXIFkamadak-exifParsed in Rust; GPS marked sensitive
ICOicoEnumerate and preview every entry
SVGresvg and usvgRasterized or safe tree output; no DOM insertion or external resources
PDFPDF.js display layer and workerCustom compact UI; no PDF JavaScript, submission, editing, or attachment launch
DOCXMammoth plus shared sanitizerSemantic HTML only
ODTRust zip, quick-xml, and an internal semantic document treeOASIS 1.4 package subset; no macro, formula, or external execution
SerializationSerde and JSON schema-versioned messagesNo 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.

On this page