Show HN: Shirei, 用原生Go编写的跨平台GUI框架
摘要
Shirei是一个为Go语言设计的跨平台GUI框架,采用即时模式API,支持在MacOS、Windows和Linux上生成原生可执行文件,无需外部依赖。
查看缓存全文
缓存时间: 2026/07/12 19:50
hasenj/go-shirei
来源:https://github.com/hasenj/go-shirei
Shirei
Shirei 是一个跨平台 GUI 框架,适用于 Go。你可以用 Go 来编写用户界面,而不是 HTML 和 JavaScript。
真正跨平台:同一套代码能够在 MacOS、Windows 和 Linux 上生成外观完全一致的程序。同时,它也是为 Linux 构建不依赖任何外部库的独立 GUI 程序的最简单方式。
※ “Shirei” 来源于 “Simple Layout”(シンプル・レイアウト)的日语读音:シンプル・レイアウト → シレイ
haystack
动机
经验告诉我们,即时模式 API 是编写 GUI 应用程序唯一合理的方式。遗憾的是,目前没有一个好用且开箱即用的库或框架。有些要求你实现自己的后端,有些在跨平台支持上不够完善,还有一些对非拉丁文字的支持不够充分。
“即时模式”的关键是什么?是 UI 每帧都重新渲染所有内容吗?不是。关键在于:你只需根据数据(或主要根据数据)描述每一帧 UI 应该长什么样,就能构建出 UI。
这就是 React 胜出的原因:无需自己维护 UI 小部件,无需跟踪它们的状态来更新它们。你只需说:“在此时刻,我想要一个按钮在这里,按钮上的标签显示某某文字,当按钮被点击时,我想要执行某些操作。”
这个按钮以前存在吗?当你不再需要它时,它会发生什么?
你永远不需要回答这些问题。这是 React 最棒的地方,也是“即时模式”的真正含义。
如果你有一个 API 只允许你“绘制”东西,但还需要你自己维护所有“绘制”对象的状态,那就没什么意义。
process monitor
特性
-
原生:真正的可执行程序,不是网页。典型二进制文件大小 ≈10MB。
-
真正的即时模式 API:你永远不需要维护 UI 小部件,也无需将数据与小部件状态同步。
-
开箱即用:不仅仅是一个布局引擎,而是一个完整的框架,无需任何样板代码即可立即使用。
-
对国际化文本的完整支持:复杂字形塑造、双向排版、系统字体访问、东亚语言的 IME(输入法编辑器)支持。
-
灵活的布局与样式:Web 的优势之一在于 UI 布局极其灵活;你不必局限于一组标准的小部件和容器。你可以自己创建。
-
易于学习的 API,无论是人类还是 AI 代理都能轻松上手。如果你有一些小型程序创意但没时间实现,不妨让最新的 AI 引擎使用 shirei 来构建它。你会惊讶于它们的使用效果。
examples/ 目录下有几个示例程序 —— 如果只看一个,请从 haystack 开始。
快速开始
将以下内容复制到新文件夹的 main.go 文件中:
package main
import (
"fmt"
app "go.hasen.dev/shirei/app"
. "go.hasen.dev/shirei"
. "go.hasen.dev/shirei/widgets"
)
func main() {
app.SetupWindow("我的应用", 300, 100)
app.Run(RootView)
}
var count int
func RootView() {
Container(Attrs(Viewport, Background(220, 10, 97, 1)), func() {
Container(Attrs(Row, CrossMid, Pad(20), Gap(10)), func() {
Label(fmt.Sprintf("计数器: %d", count))
if Button(SymIPlus, "递增") {
count++
}
})
})
}
然后运行:
$ go mod init main
$ go mod tidy
$ go run .
学习
相似文章
@yff666:最近构建了 Keel,一个纯 Go 的桌面 UI 框架。基于 Gio,无需 HTML/CSS/JS/WebView。支持 macOS、Win…
一位开发者发布了 Keel,一个基于 Gio 构建的纯 Go 桌面 UI 框架,无需 HTML/CSS/JS/WebView,支持 macOS、Windows 和 Linux,并提供组件库、打包工具以及基于 MCP 的 Agent 端到端测试能力。
Gsxui – 适用于 Go 的 Shadcn 风格组件
Gsxui 是一套面向 Go 的 Shadcn 风格组件集,支持复制集成、类型检查且使用 Tailwind 样式化的服务器端渲染 UI 组件。它提供了用于初始化和添加组件的 CLI。
@LinearUncle: chatwise 大佬使用rust 做完waku 这个开源的harness 后,不知道在rust身上吃了什么苦,紧锣密鼓又开源了一个纯golang 写的桌面GUI 框架-MyGo. https://github.com/egoist/my…
egoist 开源了 MyGo,一个纯 Go 编写的桌面应用框架,支持系统 WebView 网页界面与纯 Go GPU 绘制的原生 UI 混合使用,无 cgo,单二进制仅几 MB,内置类型化 IPC 和完整的打包签名发布链路。
Show HN: 我使用 Rust 和 GPUI 构建了一个用于编码代理的原生应用
Waku 是一个使用 Rust 和 GPUI 构建的原生应用,它统一管理编码代理的命令行接口,提供本地优先存储、键盘驱动控制和检查点功能,以实现无缝的开发者工作流。
展示HN:面向Ada的现代GUI库——CSS样式、XML界面与SDL3
Adi2是一个面向Ada的现代GUI库,提供CSS样式、基于XML的UI布局,并在SDL3上实现丰富内容渲染,同时支持WebAssembly和工具特性。