﻿---
title: "Tauri: стек для desktop-приложений"
description: "Обзор Tauri 2: web-интерфейс на HTML, CSS и JavaScript, системный WebView, Rust-команды, безопасность и выпуск приложений под разные ОС."
---

## Что такое Tauri

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; если нужны локальные файлы, системные уведомления, фоновые задачи или интеграция с ОС, соответствующую логику лучше вынести в явные команды или проверенные плагины.

## Когда Tauri подходит

- Есть существующий 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-команды из интерфейса:

```ts
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](https://wpcraft.ru/kb/stacks/jam-stack.md) — для веб-сайтов и интерфейсов, распространяемых через браузер и web-инфраструктуру.
- [Astro как платформа](https://wpcraft.ru/kb/stacks/jam-stack/astro.md) — контентные сайты, для которых отдельный desktop-клиент чаще всего не требуется.
- [Локальная разработка веб-проектов](https://wpcraft.ru/kb/stacks/local-development.md) — как описать воспроизводимую среду и инструменты проекта.

## Материалы и источники

- [Tauri: What is Tauri?](https://tauri.app/start/)
- [Tauri: Security](https://tauri.app/security/)
- [Tauri: Distribute](https://tauri.app/distribute/)