Setting Up Tauri Projects
What is Tauri?
Tauri is a framework for building tiny, fast binaries for all major desktop and mobile platforms. It combines any frontend that compiles to HTML/JS/CSS with Rust for the backend.
Key characteristics:
-
Minimal apps can be under 600KB (uses system webview, not bundled browser)
-
Built on Rust for memory, thread, and type safety
-
Supports virtually any frontend framework
-
Cross-platform: Windows, macOS, Linux, iOS, Android
System Prerequisites
macOS
For desktop + iOS development
Install Xcode from Mac App Store
For desktop-only development (lighter option)
xcode-select --install
Windows
-
Microsoft C++ Build Tools: Download from Visual Studio, select "Desktop development with C++"
-
WebView2: Pre-installed on Windows 10 v1803+ (install manually if needed)
-
Rust toolchain:
winget install Rustlang.Rustup rustup default stable-msvc
Linux
Debian/Ubuntu:
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file
libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
Arch Linux:
sudo pacman -S webkit2gtk-4.1 base-devel curl wget file openssl
appmenu-gtk-module libappindicator-gtk3 librsvg xdotool
Fedora:
sudo dnf install webkit2gtk4.1-devel openssl-devel curl wget file
libappindicator-gtk3-devel librsvg2-devel libxdo-devel
@development-tools
Rust (All Platforms)
macOS/Linux
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windows (PowerShell)
winget install Rustlang.Rustup
Node.js
Required only for JavaScript/TypeScript frontends. Install LTS version from nodejs.org.
Mobile Development (Optional)
Android (all platforms):
Install Android Studio, then add Rust targets
rustup target add aarch64-linux-android armv7-linux-androideabi
i686-linux-android x86_64-linux-android
Set environment variables: JAVA_HOME , ANDROID_HOME , NDK_HOME
iOS (macOS only):
Requires full Xcode (not just Command Line Tools)
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
Install Cocoapods
brew install cocoapods
Creating a Project
Method 1: create-tauri-app (Recommended)
Interactive scaffolding with framework templates.
npm
npm create tauri-app@latest
pnpm
pnpm create tauri-app
yarn
yarn create tauri-app
bun
bun create tauri-app
cargo (no Node.js required)
cargo install create-tauri-app --locked cargo create-tauri-app
Shell scripts
sh <(curl https://create.tauri.app/sh) # Bash irm https://create.tauri.app/ps | iex # PowerShell
Prompts you'll see:
-
Project name
-
Bundle identifier (e.g., com.example.app )
-
Frontend language: TypeScript/JavaScript, Rust, or .NET
-
Package manager
-
UI template: vanilla, Vue, Svelte, React, SolidJS, Angular, Preact, Yew, Leptos, Sycamore
After scaffolding:
cd your-project npm install npm run tauri dev
Method 2: Manual Setup (Existing Projects)
Add Tauri to an existing frontend project.
1. In your existing project, install Tauri CLI
npm install -D @tauri-apps/cli@latest
2. Initialize Tauri (creates src-tauri directory)
npx tauri init
tauri init prompts:
-
App name
-
Window title
-
Frontend dev server URL (e.g., http://localhost:5173 )
-
Frontend build output directory (e.g., dist )
-
Frontend dev command (e.g., npm run dev )
-
Frontend build command (e.g., npm run build )
3. Start development
npx tauri dev
Project Structure
my-tauri-app/ ├── package.json # Frontend dependencies ├── index.html # Frontend entry point ├── src/ # Frontend source code │ └── main.js └── src-tauri/ # Rust backend ├── Cargo.toml # Rust dependencies ├── Cargo.lock ├── build.rs # Tauri build script ├── tauri.conf.json # Main Tauri configuration ├── capabilities/ # Permission/capability definitions ├── icons/ # App icons (all formats) └── src/ ├── lib.rs # Main Rust code + mobile entry point └── main.rs # Desktop entry point
Key Files
tauri.conf.json - Primary configuration:
{ "productName": "my-app", "version": "0.1.0", "identifier": "com.example.my-app", "build": { "devUrl": "http://localhost:5173", "frontendDist": "../dist" }, "app": { "windows": [{ "title": "My App", "width": 800, "height": 600 }] } }
src/lib.rs - Rust application code:
#[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() .run(tauri::generate_context!()) .expect("error while running tauri application"); }
src/main.rs - Desktop entry point:
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() { app_lib::run(); }
capabilities/ - Define what commands JavaScript can invoke:
{ "identifier": "main-capability", "windows": ["main"], "permissions": ["core:default"] }
Common Commands
Development with hot reload
npm run tauri dev
Build production binary
npm run tauri build
Generate app icons from source image
npm run tauri icon path/to/icon.png
Add Android target
npm run tauri android init
Add iOS target
npm run tauri ios init
Run on Android
npm run tauri android dev
Run on iOS simulator
npm run tauri ios dev
Quick Reference: Supported Frontend Templates
Template Languages Notes
vanilla JS, TS No framework
react JS, TS Vite-based
vue JS, TS Vite-based
svelte JS, TS Vite-based
solid JS, TS Vite-based
angular TS Angular CLI
preact JS, TS Vite-based
yew Rust Rust WASM frontend
leptos Rust Rust WASM frontend
sycamore Rust Rust WASM frontend