13个版本

0.1.6 2022年1月21日
0.1.5 2021年11月24日
0.1.4 2021年10月22日
0.1.0 2021年6月30日
0.0.2 2020年10月22日

GUI中排名第1044

Download history 43/week @ 2024-03-11 17/week @ 2024-03-18 11/week @ 2024-03-25 116/week @ 2024-04-01 19/week @ 2024-04-08 28/week @ 2024-04-15 34/week @ 2024-04-22 22/week @ 2024-04-29 18/week @ 2024-05-06 16/week @ 2024-05-13 23/week @ 2024-05-20 54/week @ 2024-05-27 18/week @ 2024-06-03 13/week @ 2024-06-10 22/week @ 2024-06-17 15/week @ 2024-06-24

每月下载量81
3个Crates中使用(通过sixtyfps-rendering-backen…

(GPL-3.0-only…

1MB
14K 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正在由客户在生产嵌入式设备上使用,这些设备运行嵌入式Linux和Windows。Slint运行时所需的内存小于300KiB,并且可以在不同的处理器架构上运行,如ARM Cortex M、ESP32、STM32。
  • 桌面进行中。虽然Slint适合Windows、Linux和Mac,但我们正在努力提高后续版本的平台支持。
  • Web: 进行中. Slint应用程序可以编译为WebAssembly,并可在网页浏览器中运行。由于存在许多其他Web框架,因此Web平台不是我们的主要目标平台。Web支持目前仅限于演示目的。
  • 移动

无障碍性

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

演示

嵌入式

RaspberryPi STM32 RP2040
在Raspberry Pi上运行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

入门

你好世界

用户界面是在一种声明式、易于使用、直观的领域特定语言中定义的,它可以以强大的方式描述图形元素、它们的放置、它们的层次结构、属性绑定以及数据在不同状态之间的流动。

以下是必有的“你好世界”示例。

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

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

文档

有关更多详细信息,请参阅Slint语言文档

示例文件夹包含示例和演示,展示了如何使用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. 付费许可证.

有关许可的更多信息,请参阅许可常见问题解答

贡献

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

  • 如果您在问题中看到RFC标签,请随时提出您的意见。
  • 有关贡献指南,请参阅CONTRIBUTING.md

常见问题解答

请参阅我们单独的FAQ

关于我们(SixtyFPS GmbH)

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

保持更新

联系我们

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

我们在我们的 Mattermost 实例中进行聊天,欢迎您收听或提问。

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

依赖关系

~21–39MB
~448K SLoC