31 个版本 (19 个稳定版)

1.7.2 2024 年 8 月 14 日
1.7.1 2024 年 7 月 25 日
1.6.0 2024 年 5 月 13 日
1.5.1 2024 年 3 月 20 日
0.2.1 2022 年 3 月 10 日

#933GUI

Download history 2093/week @ 2024-05-05 2224/week @ 2024-05-12 2281/week @ 2024-05-19 2339/week @ 2024-05-26 2971/week @ 2024-06-02 16994/week @ 2024-06-09 17526/week @ 2024-06-16 19487/week @ 2024-06-23 12997/week @ 2024-06-30 8397/week @ 2024-07-07 7985/week @ 2024-07-14 7849/week @ 2024-07-21 7936/week @ 2024-07-28 7325/week @ 2024-08-04 9098/week @ 2024-08-11 9449/week @ 2024-08-18

34,148 每月下载量
23 库(21 个直接)使用

GPL-3.0-only…

1.5MB
33K SLoC

Slint Slint

Build Status REUSE status Discussions

Slint 是一个用于构建桌面和嵌入式应用程序原生用户界面的声明式 GUI 工具包,支持用 Rust、C++ 或 JavaScript 编写。名称 Slint 来自我们的设计目标

  • 可扩展性:Slint 应支持响应式 UI 设计,允许跨操作系统和处理器架构使用,并支持多种编程语言。
  • 轻量级:Slint 应该需要最少的资源,在内存和处理能力方面,同时在任何设备上提供流畅、类似智能手机的用户体验。
  • 直观性:设计师和开发者应该在使用 GUI 设计和开发过程中感到高效,同时享受设计过程。设计创建工具应该对设计师来说易于使用。同样,对于开发者来说,API 应该一致且易于使用,无论他们选择哪种编程语言。
  • 原生性:使用 Slint 构建的 GUI 应该符合最终用户对原生应用程序的期望,无论平台是桌面、移动、Web 还是嵌入式系统。UI 设计应该编译成机器代码,并提供只有原生应用程序才能提供的灵活性:访问完整的操作系统 API,利用所有 CPU 和 GPU 内核,连接到任何外围设备。

我们邀请您使用 Slint 并成为其社区的一员。

访问 #MadeWithSlint 查看一些使用 Slint 的项目,并加入我们的 Slint 社区。

当前状态

Slint 正在积极开发。每个平台的支持状态如下

  • 嵌入式就绪。Slint 正在生产环境中由客户在运行嵌入式 Linux 和 Windows 的嵌入式设备上使用。Slint 运行时需要少于 300KiB 的 RAM,并且可以在不同的处理器架构上运行,例如来自 MCU 类别的 ARM Cortex M、ESP32、STM32,以及来自 MPU 类别的 ARM Cortex A、Intel x86。
  • 桌面进行中。虽然Slint在Windows、Linux和Mac上都很适用,但我们正在努力在后续版本中改进平台支持。
  • Web:进行中。Slint应用可以编译成WebAssembly,并在浏览器中运行。由于存在许多其他Web框架,Web平台不是我们的主要目标平台。Web支持目前仅限于演示目的。
  • 移动

无障碍性

Slint支持许多小部件的键盘导航,用户界面可缩放。辅助技术(如屏幕阅读器)的基本基础设施已经到位。我们清楚,为了为有特殊需要的用户提供最佳支持,还需要做更多的工作。

演示

嵌入式

树莓派 STM32 RP2040
树莓派上Slint的视频 STM32上Slint的视频 RP2040上Slint的视频

桌面

Windows macOS Linux
Screenshot of the Gallery on Windows Screenshot of the Gallery on macOS Screenshot of the Gallery on Linux

使用WebAssembly的Web

打印机演示 滑动拼图 能源监控器 小部件展示馆
Screenshot of the Printer Demo Screenshot of the Slide Puzzle Screenshot of the Energy Monitor Demo Screenshot of the Gallery Demo

开始使用

你好,世界!

UI定义在一个声明性、易于使用、直观且提供了描述图形元素、它们的放置、它们的层次结构、属性绑定以及在不同状态间数据流的有效方法的域特定语言中。

下面是必不可少的“你好,世界”示例。

export component HelloWorld inherits Window {
    width: 400px;
    height: 400px;

    Text {
       y: parent.width / 2;
       x: parent.x + 200px;
       text: "Hello, world";
       color: blue;
    }
}

文档

更多详情,请参阅Slint语言文档

示例文件夹examples包含示例和演示,展示了如何使用Slint标记语言以及如何从支持的编程语言与Slint用户界面交互。

示例文件夹docs包含大量信息,包括构建说明内部开发者文档

请参阅api文件夹中每个语言目录的README。

架构

应用程序由用Rust、C++或JavaScript编写的业务逻辑和编译成本地代码的.slint用户界面设计标记组成。

Architecture Overview

编译器

.slint 文件是预编译的。在 .slint 中的表达式是纯函数,编译器可以对其进行优化。例如,编译器可以选择将属性“内联”并删除那些常量或未更改的属性。未来我们希望通过预处理图像和文本来提高低端设备的渲染时间。编译器可以确定一个 Text 或一个 Image 元素总是在同一位置的其他 Image 元素之上。因此,这两个元素可以预渲染成一个单一元素,从而减少渲染时间。

编译器使用典型的编译器阶段,包括词法分析、解析、优化和最终代码生成。它为目标语言的代码生成提供不同的后端。C++ 代码生成器生成一个 C++ 头文件,Rust 生成器生成 Rust 代码,等等。还包括动态语言的解释器。

运行时

运行时库由一个支持在 .slint 语言中声明的属性的引擎组成。具有其元素、项目和属性的组件布局在单个内存区域中,以减少内存分配。

渲染后端和样式可以在编译时配置

  • femtovg 渲染器使用 OpenGL ES 2.0 进行渲染。
  • skia 渲染器使用 Skia 进行渲染。
  • software 渲染器使用 CPU,没有额外的依赖。

注意:当系统上安装了 Qt 时,将可用 qt 风格,使用 Qt 的 QStyle 实现具有本地外观的小部件。

工具

我们有一些工具可以帮助开发 .slint 文件

  • 一个 LSP 服务器,为许多编辑器添加了自动完成和 .slint 文件的实时预览等功能。
  • 它包含在 Visual Studio Code 扩展 中,可在市场获取。
  • 一个 slint-viewer 工具,用于显示 .slint 文件。使用 --auto-reload 参数可以轻松在您工作时预览您的 UI(当使用 LSP 预览不可用时)。
  • SlintPad,一个在线编辑器,可以尝试 .slint 语法,无需安装任何东西(源代码)。
  • 一个 更新器,可以将旧版本的 .slint 文件转换为新版本。
  • 一个实验性的 Figma 导入器

请查看我们的 编辑器 README,了解如何配置您的首选编辑器以与 Slint 一起良好工作。

许可证

您可以选择以下任一许可证使用 Slint

  1. 免费许可,
  2. GNU GPLv3,
  3. 付费许可.

另请参阅 许可证常见问题解答

贡献

我们欢迎您的贡献:可以是代码、错误报告或反馈。

常见问题

请参阅我们单独的常见问题

关于我们(SixtyFPS GmbH)

我们对软件充满热情——API 设计、跨平台软件开发和用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从 JavaScript、C++ 或 Rust 开发者到 UI/UX 设计师。我们相信软件是自然成长的,而保持开源是维持这种成长的最佳方式。我们的团队成员分布在全球的德国。

保持更新

联系我们

请随时加入Github discussions进行一般聊天或提问。使用Github issues报告公开建议或错误。

我们使用我们的 Mattermost 实例进行聊天,您也可以在此收听或提问。

当然,您也可以通过电子邮件[email protected]私下联系我们。


lib.rs:

此软件包作为 slint 软件包的配套软件包。它旨在允许您从 .slint 文件中编译 build.rs 脚本。

此软件包的主要入口点是 [compile()] 函数

示例

在您的 Cargo.toml 文件中

[package]
...
build = "build.rs"

[dependencies]
slint = "1.7.0"
...

[build-dependencies]
slint-build = "1.7.0"

build.rs 文件中

fn main() {
slint_build::compile("ui/hello.slint").unwrap();
}

然后在您的主文件中

slint::include_modules!();
fn main() {
HelloWorld::new().run();
}

依赖关系

~18–27MB
~411K SLoC