A production-ready template for building cross-platform desktop applications with Tauri 2, React 18, and TypeScript. Includes Tailwind CSS with light/dark theming, automated CI/CD releases, and macOS code signing out of the box.
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript 5.6, Vite 6 |
| Styling | Tailwind CSS 4 |
| Backend | Rust, Tauri 2 |
| Package | pnpm |
| CI/CD | GitHub Actions (multi-platform) |
- Node.js (LTS)
- pnpm v9+
- Rust (stable)
- Platform-specific Tauri dependencies — see the Tauri prerequisites guide
# Install dependencies
pnpm install
# Start the development app
pnpm tauri dev
# Build for production
pnpm tauri build├── src/ # React frontend
│ ├── App.tsx # Root component
│ ├── App.css # Tailwind entry
│ └── main.tsx # React entry point
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── lib.rs # Tauri commands & plugin setup
│ │ └── main.rs # Application entry point
│ ├── capabilities/ # Tauri permission capabilities
│ ├── icons/ # App icons (all platforms)
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── scripts/
│ └── bump-version.sh # Version management utility
├── .github/workflows/
│ └── release.yml # CI/CD release pipeline
├── index.html # HTML entry point
├── vite.config.ts # Vite configuration
└── package.json
System theme preference is detected automatically and applied via Tailwind's class-based dark mode. Use dark: variants in your components:
<h1 className="text-zinc-600 dark:text-zinc-400">Hello</h1>Call Rust functions from the frontend via Tauri's command system. A greet command is included as an example in src-tauri/src/lib.rs.
The included bump-version.sh script updates the version across package.json, Cargo.toml, and tauri.conf.json in a single step:
./scripts/bump-version.sh patch # 0.1.0 -> 0.1.1
./scripts/bump-version.sh minor # 0.1.0 -> 0.2.0
./scripts/bump-version.sh major # 0.1.0 -> 1.0.0
./scripts/bump-version.sh 2.0.0 # Set explicit version
./scripts/bump-version.sh patch --tag # Bump, commit, and create git tagThe GitHub Actions workflow in .github/workflows/release.yml builds and publishes releases for macOS (universal binary), Linux, and Windows when a version tag is pushed:
./scripts/bump-version.sh patch --tag
git push && git push --tagsThe release workflow handles code signing with a Developer ID certificate and notarization via the App Store Connect API. Configure these repository secrets:
| Secret | Description |
|---|---|
MACOS_CERT_P12 |
Base64-encoded .p12 signing certificate |
MACOS_CERT_PASSWORD |
Certificate password |
MACOS_KEYCHAIN_PASSWORD |
Temporary keychain password |
APPLE_API_KEY_P8 |
Base64-encoded App Store Connect API key |
APPLE_API_KEY |
API key ID |
APPLE_API_ISSUER |
API issuer ID |
When using this template for a new project, update the following:
- App name & identifier —
productNameandidentifierinsrc-tauri/tauri.conf.json - Package name —
nameinpackage.jsonandsrc-tauri/Cargo.toml - App icons — Replace icons in
src-tauri/icons/(usepnpm tauri icon <source.png>) - Signing identity — Update
macOS.signingIdentityinsrc-tauri/tauri.conf.json - Window config — Adjust
title,width,heightinsrc-tauri/tauri.conf.json
MIT