Dioxus: Rust-фреймворк для web, desktop и mobile
Обзор Dioxus — fullstack Rust-фреймворка для создания приложений под web, desktop и mobile из одной кодовой базы.
Dioxus: Fullstack Rust-фреймворк для web, desktop и mobile
«Напишите один раз — запустите везде» — это обещание Dioxus воплощает средствами языка Rust, обеспечивая производительность и типобезопасность на всех платформах.
Что такое Dioxus и для кого он предназначен
Dioxus — это портативный, производительный и эргономичный фреймворк для создания кроссплатформенных пользовательских интерфейсов на Rust. Он позволяет разработчикам писать код один раз и развёртывать его на нескольких платформах: web, desktop (macOS, Linux, Windows) и mobile (Android, iOS).
Dioxus был публично представлен 3 января 2022 года. В 2023 году DioxusLabs был принят в батч Y Combinator S23, что позволило перейти от студенческого сайд-проекта Джонатана Келли к полноценному стартапу с выделенной командой разработчиков.
Фреймворк рассчитан на:
- Rust-разработчиков, желающих создавать GUI-приложения без перехода на JavaScript
- Стартапы и предприятия, которым нужна единая кодовая база для всех платформ
- Системных программистов, которым важны производительность и типобезопасность
Архитектура и как это работает
graph TD
A[Код на Rust + RSX] --> B[VirtualDOM]
B --> C{Платформа}
C --> D[Web — WASM]
C --> E[Desktop — WebView / WGPU]
C --> F[Mobile — iOS / Android]
C --> G[SSR — сервер]
D --> H[Браузер]
E --> I[Нативное окно]
F --> J[Мобильное устройство]
G --> K[HTML-ответ]
Dioxus нацелен на web (через WASM), desktop (через WebView или нативный GPU), mobile (iOS/Android) и сервер (SSR/Fullstack). Он сочетает React-подобную компонентную модель с производительностью и типобезопасностью Rust.
Приложения описывают интерфейс с помощью компонентов и синтаксиса rsx!, управляемых платформенно-агностическим VirtualDom. Платформенные рендереры реализуют трейт WriteMutations для трансляции изменений VirtualDom в нативные операции каждой цели.
Ключевые возможности
1. RSX — декларативный синтаксис UI
React-подобный макрос rsx! позволяет писать UI-компоненты прямо на Rust, сохраняя типобезопасность и целостность экосистемы — без JavaScript.
fn app() -> Element {
let mut count = use_signal(|| 0);
rsx! {
h1 { "Счётчик: {count}" }
button { onclick: move |_| count += 1, "Увеличить" }
button { onclick: move |_| count -= 1, "Уменьшить" }
}
}
2. Кроссплатформенность из одной кодовой базы
Dioxus позволяет легко публиковать fullstack web-, desktop- и мобильные приложения из единой кодовой базы. Это быстрейший способ собрать нативное мобильное приложение на Rust: просто выполните dx serve --platform android — и приложение запустится в эмуляторе или на устройстве за секунды.
3. Горячая замена кода (Hot-patching)
Главная особенность релиза 0.7 — поддержка горячей замены Rust-кода во время выполнения (Subsecond hot-patching). Теперь можно редактировать Rust-код и видеть изменения без потери состояния приложения.
dx serve — и приложение работает. Правьте разметку, стили и наблюдайте изменения в миллисекундах. Используйте dx serve --hotpatch для обновления Rust-кода в реальном времени.4. Fullstack с Axum
Dioxus глубоко интегрируется с Axum, обеспечивая мощные fullstack-возможности для клиента и сервера: WebSockets, SSE, Streaming, File Upload/Download, Server-Side Rendering, Forms, Middleware и Hot-Reload.
5. Сигналы и реактивное состояние
Dioxus использует подход к управлению состоянием на основе сигналов, объединяя лучшие практики React, Solid и Svelte. Пример использования:
let name = use_signal(|| "Мир".to_string());
let greeting = use_memo(move || format!("Привет, {}!", name()));
6. Dioxus Native (WGPU-рендерер)
Dioxus Native — это WGPU-рендерер HTML/CSS для Dioxus без использования WebView. Blitz — модульный HTML/CSS-рендерер, лежащий в основе Dioxus Native, доступен для всех желающих.
7. Стилизация и CSS
Приложения Dioxus стилизуются с помощью HTML и CSS. Доступна встроенная поддержка TailwindCSS или любой другой CSS-библиотеки.
8. Документация и инструменты
Все HTML-элементы и листенеры задокументированы с привязкой к MDN docs, а документация проходит непрерывную интеграцию вместе с Dioxus, чтобы всегда оставаться актуальной.
Релизная история
Версия 0.5 вышла в марте 2024 года и принесла значительные улучшения в реактивность и кроссплатформенную поддержку. Версия 0.6 была выпущена 9 декабря 2024 года с акцентом на инструментарий fullstack-разработки для web, desktop и mobile из единой кодовой базы.
Тарифы и цены
Dioxus — полностью бесплатный open-source проект под двойной лицензией MIT/Apache 2.0. Никаких платных планов не существует.
Долгосрочная цель команды — сделать Dioxus самоокупаемым за счёт платных высококачественных инструментов для предприятий. На июль 2026 года платные корпоративные продукты ещё не анонсированы.
| Уровень | Стоимость | Что включено |
|---|---|---|
| Open Source | Бесплатно | Полный фреймворк, CLI, документация |
| Enterprise (в планах) | TBD | Корпоративная поддержка, инструменты |
Плюсы и минусы
| ✅ Плюсы | ❌ Минусы |
|---|---|
| Единая кодовая база для web, desktop, mobile, SSR | Крутая кривая обучения — нужно знать Rust |
| Производительность и типобезопасность Rust | Экосистема UI-компонентов меньше, чем у React/Flutter |
| Горячая замена Rust-кода в реальном времени (0.7) | Версия всё ещё pre-1.0, API может меняться |
| Глубокая интеграция с Axum для fullstack | Мобильная поддержка пока экспериментальная |
| Полностью бесплатный open-source | Небольшой размер сообщества по сравнению с JS-фреймворками |
| Встроенная поддержка TailwindCSS | Dioxus Native (WGPU) ещё в разработке |
| Активная разработка и сильная команда | Медленная компиляция, характерная для Rust-проектов |
Сравнение с альтернативами
| Параметр | Dioxus | Leptos | Tauri |
|---|---|---|---|
| Язык UI | Rust (RSX) | Rust (HTML-like) | JS/TS + Rust backend |
| Web (WASM) | ✅ | ✅ | ✅ |
| Desktop | ✅ | ⚠️ Ограниченно | ✅ |
| Mobile | ✅ | ❌ | ❌ |
| SSR | ✅ | ✅ | ❌ |
| Virtual DOM | ✅ | ❌ (fine-grained) | N/A |
| Fullstack из коробки | ✅ (Axum) | ✅ (Axum) | ⚠️ Частично |
| Знание JS обязательно | ❌ | ❌ | ✅ |
| GitHub Stars (июль 2026) | ~32K+ | ~16K+ | ~85K+ |
| Лицензия | MIT/Apache 2.0 | MIT | MIT/Apache 2.0 |
Если нужен фреймворк, работающий везде, Dioxus вырывается вперёд: Leptos же преимущественно сосредоточен на web и SSR.
Tauri — это «более стройный и быстрый двоюродный брат Electron»: он использует web-фронтенд (HTML/CSS/JS) с Rust-бэкендом и нативным системным WebView, что идеально подходит тем, кто любит web-технологии, но хочет мощи Rust.
Установка и быстрый старт
# Установка CLI
curl -fsSL https://dioxuslabs.com/install.sh | bash
# Создание нового проекта
dx new my_app
cd my_app
# Запуск в браузере
dx serve --platform web
# Запуск на Android
dx serve --platform android
Dioxus предоставляет отличные инструменты для разработчиков: горячую перезагрузку, авто-форматирование и комплексный CLI, которые ускоряют разработку приложений.
Сообщество
Dioxus — проект, движимый сообществом, с очень активным Discord и GitHub-комьюнити. Поддерживаемый активным сообществом, Dioxus предлагает обширную документацию и ресурсы: разработчики могут участвовать в обсуждениях на Discord или вносить вклад в проект на GitHub.
Вердикт
Dioxus подойдёт:
- Rust-разработчикам, желающим создавать GUI без JavaScript
- Командам, которым нужна одна кодовая база для web + desktop + mobile
- Проектам, где важна производительность и типобезопасность на всех уровнях
- Тем, кто хочет fullstack Rust с нативной интеграцией Axum
Не рекомендуем, если:
- Вы не знаете Rust и не планируете его учить
- Нужна зрелая экосистема компонентов “из коробки”
- Ваш проект требует стабильного, не меняющегося API (версия pre-1.0)
Рейтинг: 8.2 / 10
| Критерий | Оценка |
|---|---|
| Функциональность | 9/10 |
| Документация | 8/10 |
| Простота входа | 6/10 |
| Зрелость экосистемы | 7/10 |
| Производительность | 9/10 |
| Активность разработки | 9/10 |
Dioxus — один из самых амбициозных и технически сильных фреймворков в экосистеме Rust. Если вы готовы инвестировать время в изучение Rust, вы получите мощнейший инструмент для создания действительно кроссплатформенных приложений без компромиссов по производительности.