Xilem — реактивный GUI на чистом Rust с GPU-рендерингом: 5 000 звёзд и архитектура в духе SwiftUI

Xilem от команды Linebender — реактивный GUI на чистом Rust с GPU-рендерингом через Vello/wgpu. Разбираем архитектуру, код и стоит ли пробовать.

Обложка: Xilem — реактивный GUI на чистом Rust с GPU-рендерингом: 5 000 звёзд и архитектура в духе SwiftUI

Если вы пишете на 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:

			use xilem::prelude::*;

fn app_logic(count: &mut i32) -> impl WidgetView<i32> {
    flex((
        label(format!("Count: {count}")),
        button("Increment", |count: &mut i32| *count += 1),
        button("Decrement", |count: &mut i32| *count -= 1),
    ))
}

fn main() {
    Xilem::new(0, app_logic).run()
}
		

Если вы знакомы с 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, — это самый перспективный проект: активная разработка, сильная команда и продуманная архитектура.

Как попробовать

			# Клонировать репозиторий
git clone https://github.com/linebender/xilem
cd xilem

# Запустить пример (To-Do приложение)
cargo run --example to_do_mvc

# Или добавить в свой проект
cargo add xilem
		
Часто задаваемые вопросы
1
Xilem готов для продакшена?

Нет, проект экспериментальный. API активно меняется, набор виджетов ограничен, документация минимальна. Подходит для экспериментов и прототипов, но не для критичных приложений. Команда рекомендует следить за issues на GitHub.

2
Чем Xilem отличается от Iced и egui?

Iced следует архитектуре Elm (однонаправленный поток данных), egui работает в immediate mode (перерисовка каждый кадр). Xilem — retained-mode реактивный фреймворк ближе к React/SwiftUI: строит view tree, автоматически обновляет только изменившиеся виджеты. Плюс GPU-рендеринг через Vello.

3
Работает ли Xilem на macOS и Windows?

Да, через winit и wgpu поддерживаются Windows, macOS, Linux и Web (через WebAssembly). На каждой платформе используются нативные графические API: Vulkan, Metal или DX12.

4
Кто стоит за проектом?

Команда Linebender во главе с Raph Levien — бывшим инженером Google Fonts и автором 2D-рендерера Vello. Проект поддерживается сообществом и несколькими компаниями, заинтересованными в Rust GUI.

Выводы

Нативный GUI на Rust без обёрток над C++ — больше не фантазия. Xilem предлагает знакомую реактивную модель (React/SwiftUI), GPU-ускоренный рендеринг и кроссплатформенность из коробки. Проект экспериментальный, но архитектура и команда внушают доверие.

Если вы Rust-разработчик и давно ждали нормальный GUI-фреймворк — попробуйте Xilem и оцените, насколько он подходит под ваши задачи.