Перейти к содержимому

Tauri: стек для desktop-приложений

Tauri — framework для приложений, которые запускаются как отдельные программы на компьютере, а интерфейс строится веб-технологиями. Команда может использовать знакомый фронтенд-фреймворк, а системные функции подключать через Rust-команды и плагины. Tauri 2 также поддерживает мобильные платформы, но desktop и mobile требуют разных проверок, интеграций и процессов публикации.

Это стек для desktop-продукта с интерфейсом приложения, а не способ превратить любой сайт в приложение без дополнительных затрат. Пользовательский интерфейс работает внутри WebView операционной системы; оконная оболочка и мост между интерфейсом и системным кодом обеспечиваются Tauri.

  • Frontend. Любой совместимый HTML/CSS/JavaScript-интерфейс: например, React, Vue, Svelte или обычный TypeScript с Vite. Tauri не навязывает конкретную UI-библиотеку.
  • Native core. Команды и состояние приложения обычно реализуются на Rust. Frontend вызывает разрешённые команды через IPC; для отдельных платформ и API можно писать плагины.
  • WebView и оболочка. Tauri использует системный WebView, а не включает полноценный браузерный движок в каждый пакет приложения. Это уменьшает дублирование runtime, но поведение зависит от WebView, доступного в целевой ОС.
  • Инструментарий выпуска. CLI собирает приложение и формирует платформенные пакеты. Для распространения обычно нужны подпись кода, учёт требований магазинов и отдельная проверка установщиков для целевых ОС.

Типичная структура проекта разделяет web-часть и native-конфигурацию: исходники интерфейса, Rust-код и настройки Tauri. Если backend-сценарий прост, значительную часть приложения можно оставить на frontend; если нужны локальные файлы, системные уведомления, фоновые задачи или интеграция с ОС, соответствующую логику лучше вынести в явные команды или проверенные плагины.

  • Есть существующий web-интерфейс или команда уже уверенно работает с HTML, CSS и JavaScript.
  • Продукту нужны окна, меню, системный трей, локальные файлы или другие функции desktop-среды.
  • Небольшой размер установки и повторное использование интерфейса важнее единого браузерного runtime на всех устройствах.
  • Команда готова поддерживать Rust-часть, платформенные зависимости и CI-сборки под нужные ОС.
  • Приложение должно работать локально или сочетать локальные возможности с удалённым API.

Для контентного сайта, который удобно открывать в браузере, отдельный desktop-клиент часто не окупает стоимость сборки, обновлений и поддержки. Для внутреннего инструмента, которому достаточно браузера, сначала стоит проверить, нужны ли ему реальные системные возможности. Если достаточно установки на экран и ограниченной офлайн-работы, сравните Tauri с PWA; если нужен desktop-клиент с развитой веб-экосистемой, включите в сравнение Electron и оцените размер поставки, системные зависимости и доступные компетенции команды.

У Tauri есть граница доверия между frontend в WebView и кодом приложения на Rust. Web-код не должен получать системные возможности автоматически: доступ к командам и API задаётся конфигурацией capabilities и разрешениями плагинов. Поэтому каждое разрешение следует выдавать нужному окну и только для конкретной задачи. Нельзя считать приложение безопасным только потому, что системный код написан на Rust: безопасность также зависит от frontend-зависимостей, IPC-проверок, настроек CSP, плагинов и данных, которые принимает приложение.

Системный WebView помогает не поставлять отдельную копию браузера, но делает важной проверку на целевых ОС и их версиях. Проверьте доступность WebView и системных библиотек на чистой машине, поведение интерфейса в разных движках, обновление приложения и обработку отказа API. Для чувствительных операций валидируйте входные данные в Rust-командах, а не полагайтесь только на проверки в интерфейсе.

Разработка требует frontend toolchain, Rust toolchain и системных зависимостей, перечисленных для целевой платформы. Зафиксируйте версии и команды запуска, чтобы локальная среда и CI собирали одинаковый проект. Автотесты полезно распределить по уровням: логика интерфейса и Rust-модулей, проверки IPC/плагинов и сквозные сценарии установленного приложения.

Для выпуска определите матрицу целевых ОС и архитектур, настройте отдельные CI-сборки и хранение сертификатов подписи в защищённом хранилище. Проверьте установку, обновление, удаление, системные разрешения и восстановление после сбоя. Поддержка нескольких платформ означает отдельную приёмку на каждой из них; успешная сборка на одной ОС не подтверждает корректность остальных.

Пример вызова объявленной Rust-команды из интерфейса:

import { invoke } from "@tauri-apps/api/core";
type AppInfo = { version: string };
export async function loadAppInfo(): Promise<AppInfo> {
return invoke<AppInfo>("get_app_info");
}

Имя команды должно быть зарегистрировано native-частью приложения, а конкретное окно — иметь соответствующее разрешение. Вызов из JavaScript сам по себе не предоставляет доступ к произвольным системным функциям.

  • JAM Stack — для веб-сайтов и интерфейсов, распространяемых через браузер и web-инфраструктуру.
  • Astro как платформа — контентные сайты, для которых отдельный desktop-клиент чаще всего не требуется.
  • Локальная разработка веб-проектов — как описать воспроизводимую среду и инструменты проекта.