Skip to content

Repository files navigation

desktop-starter (working name)

A Tauri 2 + React/TypeScript + Rust + SQLite desktop-app starter template, shipping the infrastructure that app templates usually leave out:

  • Single-source branding codegen — every brand value authored once in branding.json, generated everywhere (npm run gen:branding), enforced by fences: a drift fence on the generated bytes, a raw-literal fence over the whole tree, and append-only legacy chains so a later rename cannot orphan user data. REBRANDING.md is the procedure.
  • Typed SQLite layer — single-connection discipline, pragma bootstrap, append-only numbered migrations, in-memory DB test seam.
  • Durable jobs queue — SQLite-backed state machine with atomic claim, cancel vs preempt, retry budgets, crash recovery, per-kind policy hooks, and a living sample kind as the copy-me example.
  • Settings registry — allowlisted keys with a fenced TS mirror.
  • AppError wire convention — one structured error shape across Rust, the IPC boundary, and the frontend union.
  • 5-command PR gate — typecheck, lint, vitest, cargo test, build; CI runs the same five byte-identically (a gate-mirror test keeps the lists from drifting).
  • Release pipeline skeleton — Developer ID signing, notarization (app AND dmg), stapling, and self-update artifacts, all behind a zero-secret contract: with no secrets configured a tag push still goes green and drafts an unsigned build; each signing tier is opt-in via its secret. docs/release.md is the manual.

The placeholder brand Starterkit is installed throughout; no product domain code is included.

Instantiating

Follow SCAFFOLD.md — the ordered ritual: "Use this template" → generate your updater keypair → edit branding.json + run the generator → one-time frozen cold-start reset → gate green → first release. It also maps the marked edit points and the delete-points for subsystems you don't need.

Snapshot model

This template is a point-in-time snapshot, not a living upstream. Instantiated apps do not track it: improvements travel in both directions by cherry-pick, recorded in CHANGELOG.md. The convention: an instantiated app's README records the template commit it started from, so a future cherry-pick has a known base.

Provenance

Seeded from Murmur, a local-first voice-transcription app, at commit 0b9e6b8baa4d01bf9504672eef4f528424afedd4 (its v0.1.5 release) via git archive — never a working-tree copy, so no local process artifacts, secrets, or user data can exist anywhere in this repository's history. A dedicated cleanliness check (npm run fence:template) additionally proves the tree carries no residue of the seed app's brand or product vocabulary.

Building

npm install
npm run typecheck
npm run lint
npm test
cargo test --manifest-path src-tauri/Cargo.toml --features test-utils
npm run build

Those five commands are the PR gate (.github/workflows/ci.yml runs them byte-identically). npm run tauri build produces the unsigned .app locally; docs/release.md covers signing, notarization, and the updater pipeline.

License

MIT — see LICENSE. Third-party license inventory: THIRD_PARTY_NOTICES.md (regenerate with npm run gen:notices).

About

Tauri 2 + React/TS + Rust + SQLite desktop-app starter: single-source branding codegen + fences, settings registry, migrations, jobs queue, 5-command CI gate, sign/notarize/updater release pipeline

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages