--- phase: P9 component: kebab-desktop (Tauri) task_id: p9-5 title: "Tauri desktop app: backend commands wrapping kebab-app + multimodal source viewer" status: planned depends_on: [p9-1, p9-2, p9-3, p9-4] unblocks: [] contract_source: ../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md contract_sections: [report §16.3 desktop (also tasks/phase-9-ui.md epic), design §1 ask/search scenes, design §2 wire schemas v1, design §8 module boundaries] --- # p9-5 — Tauri desktop app ## Goal Stand up a Tauri 2.x app (`kebab-desktop` crate as backend, `kebab-desktop-frontend/` as web assets) whose Tauri commands wrap `kebab-app` 1:1. The frontend renders multimodal source viewers (Markdown render, PDF page viewer, image viewer with region overlay, audio player with seek). Citation clicks route to the appropriate viewer. ## Why now / why this size Last task. Combines all backend phases into a single user-facing surface. Strict policy: backend commands are thin wrappers over `kebab-app`; no new business logic. ## Allowed dependencies - backend (`kebab-desktop`): - `kebab-core` - `kebab-config` - `kebab-app` - `tauri = "2"` + `tauri-build` - `serde`, `serde_json` - `tracing` - `thiserror` - frontend (`kebab-desktop-frontend/`): vanilla TypeScript + Vite (default; user may swap to Svelte/Solid in a follow-up). - PDF rendering: `pdfjs-dist` - Markdown rendering: `marked` + `dompurify` - Audio: HTML `