A clean Tauri starter for shipping desktop ideas without fighting setup first.
Start blank. Add your feature. Keep the good parts already wired.
Quick start · What you get · Customize it · Release flow
Most desktop starters are either too bare or too opinionated.
blank-tauri-starter aims for the useful middle:
- blank enough to become your app quickly
- polished enough to feel real on day one
- structured enough to scale past a toy demo
- small enough to understand without a long onboarding session
It already includes the parts people usually rebuild every time:
- Tauri v2 desktop shell
- React 19 + TypeScript frontend
- Zustand stores
- Tailwind styling and theme setup
- persisted settings via SQLite
- updater wiring
- CI and release workflow scaffolding
- Node.js 22+
- pnpm
- Rust stable
- Tauri system dependencies: Tauri prerequisites
pnpm installpnpm run initYou will be prompted for:
- app name
- app slug
- bundle identifier
- short description
- author or organization
- GitHub repo (
owner/repo)
You can also run it non-interactively:
pnpm run init -- \
--app-name "My App" \
--app-slug "my-app" \
--app-id "com.example.myapp" \
--app-description "A desktop app built with Tauri." \
--app-author "Your Name" \
--github-repo "your-org/my-app"pnpm tauri dev- React 19 with TypeScript
- Vite-based dev flow
- Zustand stores for app state
- shared UI primitives and starter layout
- appearance settings with theme and accent support
- Tauri v2 runtime
- Rust command layer
- SQLite-backed settings persistence
- updater plugin integration
- starter app/window configuration already in place
- CI workflow for checks
- release workflow for tagged builds
- template init script
- verification script for placeholder and branding checks
This repo is intentionally positioned as a reusable base, not a fake product demo.
That means:
- the default UI is generic
- branding can be swapped quickly
- the codebase is cleaned up to avoid template noise
- the first real feature is expected to be added vertically: Rust command -> frontend wrapper -> store -> component
| If you want... | Start here |
|---|---|
| A reusable template repo | Keep the generic starter copy and improve the init experience |
| A base app for your own project | Run pnpm run init, replace branding, then start building features |
| A polished internal tool shell | Keep most of the starter UI and add your workflow-specific screens |
pnpm dev
pnpm tauri dev
pnpm test
pnpm build
pnpm lint
pnpm lint:fix
pnpm format
pnpm format:checkUse this before init if you want to confirm the repo is still a healthy template:
node scripts/verify-template.mjsUse this after pnpm run init:
node scripts/verify-template.mjs --all
pnpm lint
pnpm test
pnpm build
cargo test --manifest-path src-tauri/Cargo.toml
cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings- Update the app name, bundle id, author, and repo with
pnpm run init. - Replace
public/images/logo.svgandpublic/images/logo.pngwith your own branding. - Regenerate the icons in
src-tauri/icons/. - Replace the dashboard copy in
src/components/Home/StarterHome.tsx. - Add your first real feature.
Rust command
-> frontend command wrapper
-> store
-> screen/component
Project structure
.
|-- .github/workflows/ # CI and release automation
|-- public/images/ # Starter branding assets
|-- scripts/ # Init, verify, updater, and version helpers
|-- src/
| |-- components/Home/ # Generic starter dashboard
| |-- components/Settings/ # Appearance and update preferences
| |-- components/Shared/ # Shared UI primitives
| |-- lib/ # Tauri wrappers and platform helpers
| |-- stores/ # Zustand stores
| `-- styles/ # Global CSS and design tokens
`-- src-tauri/
|-- src/commands/ # Rust commands exposed to the frontend
|-- src/db/ # SQLite setup and migrations
|-- icons/ # Generated app icons
`-- tauri.conf.json # Desktop app configuration
What the init script updates
The init script replaces app identity values across the repo, including:
package.jsonsrc-tauri/Cargo.tomlsrc-tauri/tauri.conf.json.github/workflows/release.yml.env.example- visible UI strings that show the app name
bash scripts/bump-version.sh 0.2.0git add -A
git commit -m "chore: bump version to v0.2.0"
git tag v0.2.0
git push
git push --tagsPushing a v* tag triggers the release workflow.
TAURI_PRIVATE_KEYTAURI_KEY_PASSWORDTAURI_PUBLIC_KEY
BLANK_TAURI_STARTER_UPDATER_REPOSITORYBLANK_TAURI_STARTER_UPDATER_PUBKEY
- Frontend: React 19, TypeScript, Zustand, Tailwind CSS, Vite
- Desktop runtime: Tauri v2 + Rust
- Persistence: SQLite via
rusqlite - Updates:
tauri-plugin-updater - Tooling: ESLint, Prettier, import sorting
MIT