Tauri
Crie aplicativos de desktop com um frontend web e backend Rust - shells leves, IPC tipado e integração com o SO.
Busque em todas as páginas da documentação
Crie aplicativos de desktop com um frontend web e backend Rust - shells leves, IPC tipado e integração com o SO.
#[tauri::command]
fn read_text(path: String) -> Result<String, String> {
std::fs::read_to_string(path).map_err(|e| e.to_string())
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![read_text])
.run(tauri::generate_context!())
.expect("erro ao executar tauri");
}Quando usar isso:
use serde::Serialize;
use tauri::State;
use std::sync::Mutex;
#[derive(Default)]
struct AppState {
counter: Mutex<i32>,
}
#[derive(Serialize)]
struct CounterResponse {
value: i32,
}
#[tauri::command]
fn increment(state: State<AppState>) -> CounterResponse {
let mut c = state.counter.lock().unwrap();
*c += 1;
CounterResponse { value: *c }
}
fn main() {
tauri::Builder::default()
.manage(AppState::default())
.invoke_handler(tauri::generate_handler![increment])
.run(tauri::generate_context!())
.expect("falha ao executar tauri");
}O que isso demonstra:
dist/.| Aspecto | Tauri | Electron |
|---|---|---|
| Tamanho do Runtime | WebView do Sistema | Chromium Empacotado |
| Backend | Rust | Node.js |
| IPC | Comandos/eventos | Integração Node |
async para trabalho intensivo de IO.Content-Security-Policy estrita na configuração.unwrap apenas para desenvolvimento em comandos - pânicos matam o aplicativo. Correção: retornar Result para o frontend.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Electron | Precisa de APIs específicas do Chromium | Tamanho do binário é crítico |
| egui | UI puramente Rust, sem HTML | UI de site de marketing rica necessária |
| iced | Widgets nativos Rust | Equipe só conhece React |
| Flutter desktop | Sistema de design em Dart | Mandato de backend Rust |
Tauri 2 usa permissões baseadas em capacidades - migre as configurações ao atualizar templates.
Qualquer build estático - React, Svelte, Vue ou TS puro. Rust não dita o framework de UI.
import { invoke } from '@tauri-apps/api/core' então invoke('increment').
Gerar tarefas Tokio no hook de configuração; emitir eventos para o frontend com app.emit.
Plugin de atualizador embutido com artefatos assinados - veja a página de empacotamento.
Existem alvos móveis do Tauri - separados do capítulo de desktop, mas compartilham o modelo de comando.
Testar unidades de comandos Rust; Playwright na WebView para E2E onde viável.
Nunca incorpore chaves de API no bundle do frontend - busque de um comando Rust lendo o ambiente ou o gerenciador de senhas do SO.
Veja Estado e Arquitetura.
Integração Nativa para diálogos e notificações.
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026