Xilem — реактивный GUI на чистом Rust с GPU-рендерингом: 5 000 звёзд и архитектура в духе SwiftUI
Xilem от команды Linebender — реактивный GUI на чистом Rust с GPU-рендерингом через Vello/wgpu. Разбираем архитектуру, код и стоит ли пробовать.
Новости TprogerЕсли вы пишете на Rust и мечтаете о нормальном GUI без обёрток над C++ — посмотрите на Xilem. Это экспериментальный реактивный фреймворк от команды Linebender (основатель — Raph Levien, автор Vello и бывший инженер Google Fonts), который набрал 5 000 звёзд на GitHub и стал самой серьёзной попыткой решить «GUI-проблему» Rust.
Xilem вдохновлён архитектурами React, SwiftUI и Elm — но реализован на чистом Rust с GPU-рендерингом через Vello и wgpu. Никаких биндингов к Qt или GTK.
Ключевые выводы
- Xilem — реактивный GUI-фреймворк на чистом Rust, вдохновлённый React/SwiftUI/Elm
- GPU-рендеринг через Vello (2D) + wgpu — нативная производительность без C++ зависимостей
- Два уровня: Xilem (высокоуровневый, для приложений) и Masonry (низкоуровневый, для фреймворков)
- Веб-бэкенд через xilem_web — те же компоненты работают и в браузере
- 5 000 звёзд на GitHub, активная разработка командой Linebender (Raph Levien)
Зачем ещё один GUI-фреймворк для Rust
GUI на Rust — давняя боль сообщества. Существующие решения делятся на две категории:
- Обёртки над C/C++ библиотеками (gtk-rs, Qt bindings) — работают, но тянут за собой чужую экосистему, сборочные зависимости и не-Rust-идиоматичный API
- Чисто Rust-решения (Iced, Druid, egui) — каждое с компромиссами: Iced ближе к Elm но ограничен, Druid заброшен, egui — immediate mode без retained state
Xilem занимает нишу retained-mode реактивного фреймворка: как React, но для десктопа, с типобезопасностью Rust и без virtual DOM overhead.
Архитектура: Xilem + Masonry
Проект состоит из двух слоёв:
- Masonry — низкоуровневый тулкит. Retained widget tree, event handling, layout passes. Можно использовать отдельно, если нужен полный контроль. Аналог: Flutter's rendering layer
- Xilem — высокоуровневый реактивный слой поверх Masonry. Лёгкое view tree, автоматическое обновление UI при изменении данных. Аналог: SwiftUI или React
Стек технологий под капотом:
- winit — кроссплатформенное создание окон (Windows, macOS, Linux, Web)
- Vello + wgpu — GPU-ускоренный 2D-рендеринг
- Parley + Fontique — текстовый стек (шрифты, layout, шейпинг)
- AccessKit — accessibility API (screen readers, навигация с клавиатуры)
Как выглядит код
Простой счётчик на Xilem:
Если вы знакомы с React или SwiftUI — паттерн узнаваем: состояние (&mut i32) передаётся в функцию, которая возвращает описание UI. Фреймворк сам определяет, что изменилось, и обновляет только нужные виджеты.
Веб-бэкенд
Через xilem_web те же компоненты работают в браузере. Xilem компилируется в WebAssembly и рендерит через DOM — подход, аналогичный Yew или Leptos, но с единой кодовой базой для десктопа и веба.
Текущий статус и ограничения
Xilem — экспериментальный проект. Команда прямо об этом говорит: API нестабилен и будет меняться. Вот что важно учитывать:
- Нет готовых виджетов для сложных сценариев (таблицы, rich text editor, drag-and-drop)
- Документация минимальна — основной источник знаний: примеры в репозитории
- Masonry (нижний слой) стабильнее Xilem — если нужна предсказуемость, начинайте с него
- Linux-зависимости: нужны пакеты wayland, libxkbcommon, vulkan-loader
Но для тех, кто следит за экосистемой Rust GUI, — это самый перспективный проект: активная разработка, сильная команда и продуманная архитектура.
Как попробовать
Часто задаваемые вопросы
Xilem готов для продакшена?
Нет, проект экспериментальный. API активно меняется, набор виджетов ограничен, документация минимальна. Подходит для экспериментов и прототипов, но не для критичных приложений. Команда рекомендует следить за issues на GitHub.
Чем Xilem отличается от Iced и egui?
Iced следует архитектуре Elm (однонаправленный поток данных), egui работает в immediate mode (перерисовка каждый кадр). Xilem — retained-mode реактивный фреймворк ближе к React/SwiftUI: строит view tree, автоматически обновляет только изменившиеся виджеты. Плюс GPU-рендеринг через Vello.
Работает ли Xilem на macOS и Windows?
Да, через winit и wgpu поддерживаются Windows, macOS, Linux и Web (через WebAssembly). На каждой платформе используются нативные графические API: Vulkan, Metal или DX12.
Кто стоит за проектом?
Команда Linebender во главе с Raph Levien — бывшим инженером Google Fonts и автором 2D-рендерера Vello. Проект поддерживается сообществом и несколькими компаниями, заинтересованными в Rust GUI.
Выводы
Нативный GUI на Rust без обёрток над C++ — больше не фантазия. Xilem предлагает знакомую реактивную модель (React/SwiftUI), GPU-ускоренный рендеринг и кроссплатформенность из коробки. Проект экспериментальный, но архитектура и команда внушают доверие.
Если вы Rust-разработчик и давно ждали нормальный GUI-фреймворк — попробуйте Xilem и оцените, насколько он подходит под ваши задачи.