Tauri Configuration Files
Tauri v2 applications use three primary configuration files to manage application behavior, dependencies, and build processes.
Configuration File Overview File Purpose Format tauri.conf.json Tauri-specific settings JSON, JSON5, or TOML Cargo.toml Rust dependencies and metadata TOML package.json Frontend dependencies and scripts JSON tauri.conf.json
The main configuration file located in src-tauri/. Defines application metadata, window behavior, bundling options, and plugin settings.
Supported Formats JSON (default): tauri.conf.json JSON5: tauri.conf.json5 (requires config-json5 Cargo feature) TOML: Tauri.toml (requires config-toml Cargo feature) Complete Configuration Structure { "$schema": "https://schema.tauri.app/config/2", "productName": "MyApp", "version": "1.0.0", "identifier": "com.company.myapp", "mainBinaryName": "my-app", "build": { "devUrl": "http://localhost:3000", "frontendDist": "../dist", "beforeDevCommand": "npm run dev", "beforeBuildCommand": "npm run build", "features": ["custom-feature"], "removeUnusedCommands": true }, "app": { "withGlobalTauri": false, "macOSPrivateApi": false, "windows": [ { "title": "My Application", "width": 1200, "height": 800, "minWidth": 800, "minHeight": 600, "resizable": true, "fullscreen": false, "center": true, "visible": true, "decorations": true, "transparent": false, "alwaysOnTop": false, "focus": true, "url": "index.html" } ], "security": { "capabilities": [], "assetProtocol": { "enable": true, "scope": ["$APPDATA/"] }, "pattern": { "use": "brownfield" }, "freezePrototype": false }, "trayIcon": { "id": "main-tray", "iconPath": "icons/tray.png", "iconAsTemplate": true } }, "bundle": { "active": true, "targets": "all", "icon": ["icons/32x32.png", "icons/128x128.png", "icons/icon.icns", "icons/icon.ico"], "resources": ["assets//*"], "copyright": "Copyright 2024", "category": "Utility", "shortDescription": "A short app description", "longDescription": "A longer description", "licenseFile": "../LICENSE", "windows": { "certificateThumbprint": null, "timestampUrl": "http://timestamp.digicert.com", "nsis": { "license": "../LICENSE", "installerIcon": "icons/icon.ico", "installMode": "currentUser" } }, "macOS": { "minimumSystemVersion": "10.13", "signingIdentity": null, "dmg": { "appPosition": { "x": 180, "y": 170 }, "applicationFolderPosition": { "x": 480, "y": 170 } } }, "linux": { "appimage": { "bundleMediaFramework": false }, "deb": { "depends": ["libwebkit2gtk-4.1-0"] }, "rpm": { "depends": ["webkit2gtk4.1"] } }, "android": { "minSdkVersion": 24 }, "iOS": { "minimumSystemVersion": "13.0" } }, "plugins": { "updater": { "pubkey": "YOUR_PUBLIC_KEY", "endpoints": ["https://releases.example.com/{{target}}/{{arch}}/{{current_version}}"] } } }
Root-Level Fields Field Type Required Description productName string No Application display name version string No Semver version or path to package.json identifier string Yes Reverse domain identifier (e.g., com.tauri.example) mainBinaryName string No Override the main binary filename Build Configuration Fields Field Type Description devUrl string Development server URL for hot-reload frontendDist string Path to built frontend assets or remote URL beforeDevCommand string Script to run before tauri dev beforeBuildCommand string Script to run before tauri build features string[] Cargo features to enable during build removeUnusedCommands boolean Strip unused plugin commands from binary Window Configuration Options Field Type Default Description title string "Tauri" Window title width / height number 800 / 600 Window dimensions in pixels minWidth / minHeight number - Minimum dimensions maxWidth / maxHeight number - Maximum dimensions x / y number - Window position resizable boolean true Allow window resizing fullscreen boolean false Start in fullscreen center boolean false Center window on screen visible boolean true Window visibility on start decorations boolean true Show window decorations transparent boolean false Enable window transparency alwaysOnTop boolean false Keep window above others url string "index.html" Initial URL to load Security Configuration Field Type Description capabilities string[] Permission capabilities for the application assetProtocol.enable boolean Enable custom asset protocol assetProtocol.scope string[] Allowed paths for asset protocol pattern.use string Security pattern ("brownfield" default) freezePrototype boolean Prevent prototype mutation Bundle Targets by Platform Platform Targets Windows nsis, msi macOS app, dmg Linux appimage, deb, rpm Android apk, aab iOS app Platform-Specific Configuration
Create platform-specific files that override base configuration using JSON Merge Patch (RFC 7396).
Platform Filename Linux tauri.linux.conf.json Windows tauri.windows.conf.json macOS tauri.macos.conf.json Android tauri.android.conf.json iOS tauri.ios.conf.json
Example src-tauri/tauri.windows.conf.json:
{ "app": { "windows": [{ "title": "My App - Windows Edition" }] }, "bundle": { "windows": { "nsis": { "installMode": "perMachine" } } } }
Example src-tauri/tauri.macos.conf.json:
{ "app": { "macOSPrivateApi": true }, "bundle": { "macOS": { "minimumSystemVersion": "11.0", "entitlements": "entitlements.plist" } } }
CLI Configuration Override
Development with custom config
tauri dev --config src-tauri/tauri.dev.conf.json
Build with beta configuration
tauri build --config src-tauri/tauri.beta.conf.json
Inline configuration override
tauri build --config '{"bundle":{"identifier":"com.company.myapp.beta"}}'
Cargo.toml Configuration
Located in src-tauri/Cargo.toml, manages Rust dependencies.
[ package ] name = "my-app" version = "1.0.0" edition = "2021"
[ build-dependencies ] tauri-build = { version = "2.0", features = [] }
[ dependencies ] serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tauri = { version = "2.0", features = [] } tauri-plugin-shell = "2.0" tauri-plugin-opener = "2.0"
[ features ] default = ["custom-protocol"] custom-protocol = ["tauri/custom-protocol"]
Common Tauri Features [ dependencies ] tauri = { version = "2.0", features = [ "config-json5", # Enable JSON5 config format "config-toml", # Enable TOML config format "devtools", # Enable WebView devtools "macos-private-api", # Enable macOS private APIs "tray-icon", # Enable system tray support "image-png", # PNG image support "image-ico", # ICO image support "protocol-asset" # Custom asset protocol ] }
Version Management tauri = { version = "2.0" } # Semver-compatible (recommended) tauri = { version = "=2.0.0" } # Exact version tauri = { version = "~2.0.0" } # Patch updates only
package.json Integration { "name": "my-tauri-app", "version": "1.0.0", "scripts": { "dev": "vite", "build": "vite build", "tauri": "tauri" }, "dependencies": { "@tauri-apps/api": "^2.0.0" }, "devDependencies": { "@tauri-apps/cli": "^2.0.0" } }
Environment-Specific Configurations Development (src-tauri/tauri.dev.conf.json) { "build": { "devUrl": "http://localhost:5173" }, "app": { "withGlobalTauri": true, "windows": [{ "title": "My App [DEV]" }] } }
Production (src-tauri/tauri.prod.conf.json) { "build": { "frontendDist": "../dist", "removeUnusedCommands": true }, "bundle": { "active": true, "targets": "all" } }
Beta (src-tauri/tauri.beta.conf.json) { "identifier": "com.company.myapp.beta", "productName": "MyApp Beta", "plugins": { "updater": { "endpoints": ["https://beta-releases.example.com/{{target}}/{{arch}}/{{current_version}}"] } } }
TOML Configuration Format
When using Tauri.toml, configuration uses kebab-case:
[ build ] dev-url = "http://localhost:3000" before-dev-command = "npm run dev" before-build-command = "npm run build"
[ app ] with-global-tauri = false
[[ app.windows ]] title = "My Application" width = 1200 height = 800 resizable = true center = true
[ app.security ] freeze-prototype = false
[ app.security.asset-protocol ] enable = true scope = ["$APPDATA/**"]
[ bundle ] active = true targets = "all" icon = ["icons/32x32.png", "icons/128x128.png", "icons/icon.icns", "icons/icon.ico"]
[ plugins.updater ] pubkey = "YOUR_PUBLIC_KEY" endpoints = ["https://releases.example.com/{{target}}/{{arch}}/{{current_version}}"]
Common Configuration Patterns Multi-Window Application { "app": { "windows": [ { "label": "main", "title": "Main Window", "width": 1200, "height": 800, "url": "index.html" }, { "label": "settings", "title": "Settings", "width": 600, "height": 400, "url": "settings.html", "visible": false } ] } }
System Tray Application { "app": { "trayIcon": { "id": "main-tray", "iconPath": "icons/tray.png", "iconAsTemplate": true }, "windows": [{ "visible": false }] } }
Plugin Configuration { "plugins": { "updater": { "pubkey": "YOUR_PUBLIC_KEY", "endpoints": ["https://releases.example.com/{{target}}/{{arch}}/{{current_version}}"], "windows": { "installMode": "passive" } }, "shell": { "open": true, "scope": [{ "name": "open-url", "cmd": "open", "args": [{ "validator": "\S+" }] }] }, "deep-link": { "mobile": ["myapp"], "desktop": { "schemes": ["myapp"] } } } }
Lock Files
Commit lock files for reproducible builds:
File Purpose Cargo.lock Locks Rust dependency versions package-lock.json Locks npm dependency versions yarn.lock Locks Yarn dependency versions pnpm-lock.yaml Locks pnpm dependency versions Configuration Validation
Use the JSON schema for editor autocompletion:
{ "$schema": "https://schema.tauri.app/config/2" }
Run tauri info to verify configuration and environment setup.