Slint 是一个开源的声明式 GUI 工具包,用于为嵌入式系统、桌面和移动平台构建原生用户界面。
使用 .slint 这种简单的标记语言,只需编写一次 UI。将其与用 Rust、C++、JavaScript 或 Python 编写的业务逻辑连接起来。
为什么选择 Slint?
Slint 这个名字源自我们的设计目标:
- 可扩展性:Slint 应支持响应式 UI 设计,允许跨操作系统和处理器架构的跨平台 使用,并支持多种编程语言。
- 轻量级:Slint 应尽可能少地占用资源,包括内存 和处理能力,同时在任何设备上都能提供流畅的、类似智能手机的 用户体验。
- 直观性:设计师和开发者应在享受 GUI 设计和开发过程的同时感到高效。设计创建工具对 设计师来说应易于使用。同样,对于开发者而言,无论他们选择哪种编程语言,API 都应保持一致且易于使用。
- 原生性:使用 Slint 构建的 GUI 应符合最终用户对 原生应用的期望,无论平台是桌面、移动、Web 还是 嵌入式系统。UI 设计应编译为机器代码,并提供 只有原生应用才能提供的灵活性:访问完整的操作系统 API,利用所有 CPU 和 GPU 核心,连接任何外设。
除了设计目标之外,以下是 Slint 的突出之处:
- 独立的 UI 设计:使用声明式语言将 UI 与业务逻辑分离。设计师可以与开发人员并行工作。
- 工具链:通过我们的实时预览和编辑器集成快速迭代。使用 Figma to Slint 插件 从 Figma 集成。
- 稳定的 API:Slint 遵循稳定的 1.x API。我们谨慎演进,不会破坏您的代码。
看看其他人构建了什么:#MadeWithSlint
示例
嵌入式
| RaspberryPi | STM32 | RP2040 |
|---|---|---|
| Video of Slint on Raspberry Pi | Video of Slint on STM32 | Video of Slint on RP2040 |
桌面
| Windows | macOS | Linux |
|---|---|---|
![]() | ![]() | ![]() |
使用 WebAssembly 的 Web
| 打印机演示 | 滑块拼图 | 能耗监控 | 小部件画廊 | 天气演示 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
更多示例和演示位于 examples 文件夹
快速开始
Hello World
UI 由一种声明式、易于使用、直观且功能强大的领域特定语言定义,用于描述图形元素、其 布局、层级、属性绑定以及数据在不同状态间的流动。
以下是经典的 "Hello World":
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:
- C++ (文档 | 入门模板)
- Rust
(文档 | 教程视频 | 入门模板)
- JavaScript/NodeJS (Beta)
(文档 | 入门模板)
- Python (Beta)
(文档 | 入门模板)
架构
应用程序由用 Rust、C++、Python 或
JavaScript 编写的业务逻辑以及 .slint 用户界面设计标记组成,后者会被编译为
原生代码。
编译器
.slint 文件会被提前编译。.slint 中的表达式是编译器可以优化的纯函数。例如,编译器可以选择“内联”属性,并移除那些常量或不变的属性。
编译器使用典型的编译阶段:词法分析、解析、优化,最后是代码生成。它为目标语言提供不同的代码生成后端。C++ 代码生成器生成 C++ 头文件,Rust 生成器生成 Rust 代码,依此类推。还包含一个用于动态语言的解释器。
运行时
运行时库由一个支持在 .slint 语言中声明的属性的引擎组成。组件及其元素、项和属性被布局在单个内存区域中,以减少内存分配。
渲染后端和样式可在编译时配置:
femtovg渲染器使用 OpenGL ES 2.0 进行渲染。skia渲染器使用 Skia 进行渲染。software渲染器使用 CPU,无额外依赖。
注意:当系统上安装了 Qt 时,qt 样式变得可用,使用 Qt 的 QStyle 来实现原生外观的小部件。
工具
我们有一些工具来帮助开发 .slint 文件:
- 一个 LSP Server,为许多编辑器添加了自动补全和 .slint 文件实时预览等功能。
- 它包含在一个 Visual Studio Code Extension 中,可从市场获取。
- 一个 slint-viewer 工具,用于显示 .slint 文件。
--auto-reload参数使得在开发过程中轻松预览 UI 成为可能(当使用 LSP 时无法预览)。 - SlintPad,一个在线编辑器,用于尝试 .slint 语法, 无需安装任何内容(sources)。
- 一个 Figma to Slint 插件。
请查看我们的 Editors README,了解如何配置您喜爱的编辑器以良好地配合 Slint 工作。
License
请参阅 LICENSE.md 了解整个仓库(包括文档和示例)的许可条款。
您可以选择以下任一许可证使用 Slint:
- 使用 Royalty-free License 免费构建专有桌面、移动或 Web 应用程序,
- 使用 GNU GPLv3 免费构建开源嵌入式、桌面、移动或 Web 应用程序,
- 使用 Commercial license 构建专有嵌入式、桌面、移动或 Web 应用程序。
请参阅 Slint licensing options on the website 和 Licensing FAQ。
Contributions
我们欢迎您的贡献:包括代码、错误报告或反馈。 有关贡献指南,请参阅 CONTRIBUTING.md。
Frequently Asked Questions
请参阅我们单独的 FAQ。
About us (SixtyFPS GmbH)
我们对软件充满热情——API 设计、跨平台软件开发以及用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从 Python、JavaScript、C++ 或 Rust 开发者到 UI/UX 设计师。我们相信软件是有机生长的,保持开源是维持这种增长的最佳方式。我们的团队成员远程分布在德国、芬兰和美国。
保持更新
- 在 X/Twitter 上关注 @slint_ui。
- 在 Mastodon 上关注 @slint@fosstodon.org。
- 在 LinkedIn 上关注 @slint-ui。
- 在 Bluesky 上关注 @slint.dev
- 订阅我们的 YouTube 频道
联系我们
欢迎加入 Github 讨论区 进行一般性聊天或提问。使用 Github 议题 来报告公开的建议或错误。
我们在 我们的 Mattermost 实例 中聊天,欢迎 您旁听或提出您的问题。
您当然也可以通过电子邮件 info@slint.dev 私下联系我们。







