Tauri Development Patterns
IPC Communication
Always define IPC commands with TypeScript types:
// src-tauri/src/main.rs #[tauri::command] fn start_agent(task_id: i32) -> Result<(), String> { // Implementation Ok(()) }
// frontend/src/api/tauri.ts import { invoke } from '@tauri-apps/api/tauri';
export async function startAgent(taskId: number): Promise<void> { await invoke('start_agent', { taskId }); }
Window Management
Create windows programmatically:
import { WebviewWindow } from '@tauri-apps/api/window';
const taskWindow = new WebviewWindow('task-detail', { url: '/task/42', title: 'Task #42', width: 800, height: 600 });
Testing Tauri Commands
// tests/tauri.test.ts import { mockIPC } from '@tauri-apps/api/mocks';
describe('Tauri IPC', () => { beforeEach(() => { mockIPC((cmd, args) => { if (cmd === 'start_agent') { return Promise.resolve(); } }); });
test('starts agent', async () => { await expect(startAgent(42)).resolves.toBeUndefined(); }); });