Rust全栈开发系列:GUI框架

632 阅读7分钟

Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。随着 Rust 生态的成熟,出现了许多用于构建图形用户界面(GUI)的框架。

Dioxus

Dioxus 是一个可移植的、高性能的、符合人体工程学的框架,使用 Rust 语言构建跨平台的用户界面。它从 React 中获得灵感,专注于开发者体验,允许开发者用更少的时间构建快速、美观且功能完备的应用Dioxus 可用于生成 网页前端、桌面应用、静态网站、移动端应用、TUI程序、等多类平台应用。

官方网站:dioxuslabs.com/

druid

Druid 是一个用 Rust 编写的用于构建现代、高性能、跨平台桌面应用程序的库。它提供了声明式的用户界面框架,允许开发者通过定义应用的状态和 UI 的关系来构建应用,这与 React 的风格类似 。Druid 支持数据绑定,能够将 UI 元素直接绑定到应用程序的状态,从而在应用程序状态发生变化时自动更新 UI。

Github 代码库:github.com/linebender/…

egui

egui 是一个简单、快速且高度可移植的 Rust 即时模式 GUI 库。它适用于 Web、原生应用程序以及游戏引擎,并且致力于成为最容易使用的 Rust GUI 库以及在 Rust 中制作 Web 应用程序的最简单方法。egui 的目标是提供一个简单易用的 API,帮助开发者快速创建各种类型的图形界面,同时保持友好、可移植和易于集成的特点

Github 代码库:github.com/emilk/egui

FLTK-rs

FLTK-rs 是 Rust 中的一个快速、轻量级的 GUI 库,它是对 C++ 的 FLTK (Fast Light Tool Kit) 库的封装 。FLTK-rs 继承了 FLTK 的特点,提供了跨平台支持,能够在 Windows、macOS 和 Linux 等操作系统上运行。它以高效为目标,生成的应用程序体积小且启动速度快。

FLTK-rs 的设计简洁,易于使用,API 设计利用了 Rust 的类型系统和模式匹配特性,具有良好的可读性。它包括丰富的组件,如按钮、文本输入、滚动条和列表视图等,并且采用事件驱动的方式,简化了交互式编程。

Github 代码库:github.com/fltk-rs/flt…

Floem

Floem 是一个为 Rust 语言设计的原生 UI 库,它通过细粒度的响应式编程模型,允许开发者以声明式的方式构建动态且高效的用户界面。它受到了 Xilem、Leptos 和 rui 的启发,旨在成为一个高性能的声明式 UI 库,使用户能够以最小的努力实现高性能的 UI 开发。

Github 代码库:github.com/lapce/floem

Freya

Freya 是一个基于 Rust 的原生 GUI 库,它以 Dioxus 作为内核,并使用 Skia 作为绘图引擎,专为 Rust 程序员设计。尽管它仍处于早期开发阶段,但已经展现出强大的潜力和灵活性。

Freya 的目标是提供一个既具备出色性能又注重开发者体验的 GUI 解决方案,通过结合 Dioxus 的声明式编程风格和 Skia 的强大绘图能力,旨在建立出美观且响应式的应用界面。

官方网站:freyaui.dev/

GPUI

Zed GPUI 是一个为 Rust 语言设计的 UI 框架,专门用于创建 GPU 加速的用户界面。它是一个混合型的框架,结合了即时模式和保留模式,旨在支持各种类型的应用程序。

官方网站:www.gpui.rs/

Github 代码库:github.com/zed-industr…

gtk-rs

gtk-rs 是一个为 Rust 语言提供的 GTK+ 库的绑定集合。GTK+ 是一个广泛使用的开源图形用户界面工具包,它允许开发人员创建具有丰富图形界面的应用程序。gtk-rs 使得 Rust 开发者可以利用 GTK 的强大功能来构建跨平台的桌面应用程序。

官方网站:gtk-rs.org/

Github 代码库:github.com/gtk-rs/gtk3… github.com/gtk-rs/gtk4…

Iced

Iced 是一个用 Rust 编程语言构建的轻量级、高效且易于使用的 GUI 应用程序框架。它允许开发者创建美观的、响应式的用户界面,同时利用 Rust 的强大特性和安全性。Iced 的设计灵感来源于 Elm 语言和 Flutter 框架,其核心目标是提供一个简洁的 API,让开发者能够在多个平台上轻松构建 GUI 应用,包括 Windows、macOS 和 Linux。Iced 提供了一套声明式编程模型,使得构建用户界面的过程变得直观而易读。

官方网站:iced.rs/

Makepad

Makepad 是一个用于 Rust 的创意软件开发平台,它允许开发者构建原生和 Web UI。Makepad 项目旨在提供一个全新的方式来创建用户界面,并且支持跨平台开发,包括对 MacOS、Windows、Linux、Android、iOS 和 WebAssembly 的支持。

Github 代码库:github.com/makepad/mak…

relm

Relm 是 Rust 语言生态中的一个 GUI 框架,它基于 gtk-rs 库,即 GTK+3 的 Rust 绑定,允许开发者创建跨平台的 GUI 应用程序。

Github 代码库:github.com/antoyo/relm

Slint

Slint(之前称为 SixtyFPS)是一个用于构建桌面和嵌入式应用程序原生用户界面的声明式 GUI 工具包,它使用 Rust 编写,并支持 C++、JavaScript 以及 Python 语言的 API 。Slint 的设计目标是实现一个高性能、轻量级、易于使用且具有原生外观的 GUI 解决方案。

Slint 有自己的声明性语言来描述用户界面,在概念上类似于 QML(Qt 建模语言)或 Microsoft 的 XAML。这使得像SlintPad这样的演示成为可能,开发人员可以在其中编写 Slint 设计标记语言并通过 Wasm 立即查看它。同样,Visual Studio Code 有一个扩展,可提供 Slint 标记的即时预览。

Slint 支持各种操作系统和处理器架构,包括 Linux、macOS、Windows、RISC-V、ARM Cortex-M 等。使用 Slint 构建的图形应用程序可以在内存小于 300kB 的系统上运行,这使其非常适合用于开发嵌入式设备的应用程序界面。该工具包具有未来可扩展性,可与多种编程语言(如 C ++、JavaScript 和 Rust)集成。

官方网站:slint.dev/

Tauri

Tauri 是一个用于构建桌面应用程序的工具包,它允许开发者使用 Rust 作为后端语言,并结合几乎任何前端框架来创建应用。Tauri 的核心理念是安全优先、多语言支持,并且不局限于单一的技术栈。Tauri 的设计目标是提供一个可靠、小巧且灵活的应用程序基础,它使用系统原生的 webview 技术,使得打包体积更小,同时利用 Rust 的内存、线程和类型安全优势来增强应用的稳定性和安全性。

Tauri 类似于 Electron ,但是  Tauri 使用系统自带的网页渲染器,没有将 chromium 打进包内,所以打出包大小的体积非常小。在 Windows 上 Tauri 基于 Microsoft Edge 和 Chromium 的 WebView2(Windows 11预装,Windows 10 最新版已预装,Windows 7 可以额外下载运行时)。在Linux 和 macOS 上使用的是 WebKit。

Tauri 还维护了两个"上游"crates:tao 和 wry。 tao 用于创建和管理应用程序窗口, wry 是一个跨平台的 WebView 渲染库。

官方网站:tauri.app/

tao

tao是一个跨平台的应用程序窗口创建库,支持 Windows、macOS、Linux、iOS 和 Android 等所有主要平台。

Github 代码库:github.com/tauri-apps/…

wry

WRY 是 Rust 中的跨平台 WebView 渲染库,支持 Windows、macOS 和 Linux 等所有主要桌面平台。 Tauri 使用 WRY 作为抽象层,负责确定使用哪个 webview(以及如何进行交互)。

Github 代码库:github.com/tauri-apps/…

Xilem

Xilem 是一个实验性的 Rust 原生 UI 框架,由 Linebender 团队开发,该团队之前开发了 Druid 框架。Xilem 的设计理念围绕性能和组织进行,它强调最小化更新,使用集中状态控制和状态管理器来简化数据处理,同时提供可预测的更新 。

Github 代码库:github.com/linebender/…