Volver a Documentación
Deployment
Tauri v2 Development Guide
Project layout, commands, and capability-based permissions for Tauri v2.
•
10 min de lectura
•PlanToCode uses Tauri v2 for the desktop application. This guide covers the project structure, command system, capability-based permissions, and development workflow.
Project Layout
The desktop application follows standard Tauri v2 conventions:
- desktop/src/: React frontend with components, hooks, and providers
- desktop/src-tauri/: Rust backend with commands, jobs, and services
- desktop/src-tauri/src/lib.rs: Application entry point
- desktop/src-tauri/src/commands/: Tauri command handlers (~35 modules)
- desktop/src-tauri/capabilities/: Permission definitions
- desktop/src-tauri/tauri.conf.json: Tauri configuration
Tauri Configuration
tauri.conf.json configures the application:
- productName, version, identifier for app metadata
- build.beforeDevCommand and beforeBuildCommand for frontend
- bundle settings for installers (DMG, NSIS, AppImage)
- security.csp for Content Security Policy
- plugins configuration for official plugins
Capability-Based Permissions
Tauri v2 uses capabilities to control what the app can access:
- default.json: Base permissions for all windows
- desktop-default.json: Desktop-specific permissions
- plantocode-api.json: Custom permissions for PlanToCode commands
- Permissions grant access to: filesystem, shell, http, dialog, notification
Tauri Plugins
PlanToCode uses several official Tauri plugins:
- tauri-plugin-http: HTTP client for API calls
- tauri-plugin-dialog: Native file/folder pickers
- tauri-plugin-shell: Shell command execution
- tauri-plugin-store: Persistent key-value storage
- tauri-plugin-notification: Desktop notifications
- tauri-plugin-updater: In-app updates
- tauri-plugin-single-instance: Single instance enforcement
Application State
Rust state managed through Tauri's state system:
- AppState struct holds shared state
- RuntimeConfig for server URLs and feature flags
- TokenManager for secure credential storage
- ConfigCache for AI model configuration
Creating Commands
Tauri commands expose Rust functions to the frontend:
- Use #[tauri::command] attribute on async functions
- Return Result<T, String> for error handling
- Access state via State<AppState> parameter
- Register in lib.rs invoke_handler
Single Instance
The app enforces single instance to prevent data conflicts:
- tauri-plugin-single-instance handles detection
- Second launch focuses existing window
- Deep links forwarded to running instance
Development Workflow
Common commands for development:
pnpm tauri dev: Start development with hot reloadpnpm tauri build: Build production releasecargo test: Run Rust testscargo clippy: Lint Rust code
Mobile Considerations
Tauri v2 supports mobile, but PlanToCode uses native Swift:
- iOS app built with SwiftUI for native experience
- Shared API contracts between desktop and mobile
- Device linking via WebSocket relay
Distribution
Build artifacts for each platform:
- macOS: .dmg with universal binary (Intel + Apple Silicon)
- Windows: NSIS installer and MSIX package
- Linux: AppImage for broad compatibility