Виталий Алексеев

03 / 06 · Rust · wgpu 28 · WGSL

syngui

Retained-mode GUI-фреймворк для Rust: рисует на GPU через wgpu, оформляется таблицами стилей в духе CSS, связывается реактивными сигналами.

Лицензия
MIT OR Apache-2.0
Платформа
Linux · Windows · macOS · Android · Web
Пакеты
Cargo, из исходников
Статус
Молодой, API нестабилен
Пример widget_gallery_mss в нативном окне — MarkdownView с подсветкой синтаксиса
Пример widget_gallery_mss в нативном окне — MarkdownView с подсветкой синтаксиса
виджетов в 10 категориях
110+
тестов
1 400+
на кадр длинной ленты чата (было 3,4 с)
5.8ms
платформ: Linux, Windows, macOS, Android, Web
5
01

Что это

Большинство GUI-библиотек для Rust заставляют выбирать: простота immediate mode (egui) или retained-дерево с типизированными стилями (iced), собственный DSL (Slint) или веб-технологии (Tauri, Dioxus). syngui собирает другую комбинацию — настоящие таблицы стилей с каскадом, точечную реактивность в духе SolidJS, retained-дерево виджетов и большой набор виджетов, которые обычно приходится тащить в проект самому.

Автор пользуется им в продакшене: на нём работают synthos, syndesktop, linux-legion и ardor-mouse, так что баги находятся в реальной работе.

02

Возможности

  • Таблицы стилей MSS: переменные и var(), селекторы по типу, классу, составные и по потомкам, :hover, :active, :focus, :checked, :disabled, вложенность, переходы, @keyframes, наследование и псевдоклассы состояния окна.
  • Точечная реактивность: use_signal, use_effect, create_memo и use_context с автоматическим отслеживанием зависимостей; поддеревья перестраиваются по частям.
  • Retained-архитектура: неизменяемый Widget → Element с состоянием, сравнение через can_update() и распространение флагов грязности.
  • Больше 110 виджетов: графики (линии, столбцы, круговые, радар, шкалы), тайловая карта, встроенный терминал (PTY + VT100), Markdown с подсветкой синтаксиса, редактор кода на rope, видеоплеер с синхронизацией по звуку и аппаратным декодированием, инспектор.
  • DocumentEditor — блочный редактор в духе Notion, где Markdown и модель, и формат файла: поток или свободный холст, векторные фигуры и живые встраивания своих виджетов.
  • 3D-трансформации прямо из стилей, эмиттеры частиц с 15 пресетами и ряд с увеличением под курсором, как в доке macOS.
  • Горячие пути измерены: VirtualList, ключи у детей, кэш каскада и отрисовка, собранная в несколько вызовов за один проход.
  • wgpu 28 (Vulkan / Metal / DX12 / GL / WebGPU) и шейдеры на WGSL, написанные вручную.
  • Linux на X11 и Wayland (со своим drag-and-drop), Windows, macOS, Android и Android TV, WebAssembly.
03

Установка

cargo build -p syngui
cargo test -p syngui
cargo run -p widget_gallery_mss   # every widget + MSS styling

Видео — за необязательной фичей ffmpeg, для неё нужны dev-библиотеки FFmpeg 7+; без неё с FFmpeg ничего не линкуется. Галерея виджетов собирается и в WebAssembly.

Полная инструкция — в README →

04

Требования и ограничения

  • Шейпинг текста простой: латиница, кириллица и CJK рисуются правильно, но нет кернинга, лигатур, GSUB/GPOS, двунаправленного текста и сложных письменностей (арабской, деванагари).
  • Цветные эмодзи рисуются без шейпера: последовательности ZWJ и VS16 могут распасться на отдельные глифы.
  • Доступность (AccessKit) есть за необязательной фичей и не проверяется постоянно.
  • CI пока нет: сборки под Windows, macOS и Android проверяются вручную.
  • API нестабилен, ломающие изменения будут.
05

Скриншоты

Вайбкодинг в Claude Code

Как сделано

Модель пишет код, тесты и большую часть документации. Цифры производительности измерены на моей машине, а все программы, которые я сделал после, — synthos, syndesktop, linux-legion, ardor-mouse — работают на этом фреймворке, так что его баги находятся в настоящей работе.

Всё здесь написано вайбкодингом. github.com/VitaminDB/syngui