Starship 1.27.0 在北京时间 2026 年 10 月 17 日下午发布。这版修了两个 Moderate(中等)级提示符安全问题,并把 package 模块补上了对 build.gradle.kts 的识别。我在本机用官方 musl 二进制对照了 1.26.0 和 1.27.0,又拿了一个最小 Spring Boot 4.1.1(Gradle Kotlin DSL)项目跑了一遍。
发布页:github.com/starship/starship/releases/tag/v1.27.0
两个安全修复
发布说明写明修了 GHSA-x486-6jjc-phfp 和 GHSA-679r-jwc5-r5m3。两份公告的严重级别都是 Moderate,修复版本都是 1.27.0,都没有 CVE 编号。
元数据符号链接可以拖垮提示符(GHSA-x486)
仓库里如果放着一个指向无界设备(例如 /dev/zero)的 package.json 符号链接,1.26.0 的 package 模块会跟着读下去,提示符渲染卡住,内存一路涨。公告确认 1.26.0 受影响,Windows 没有评估。follow_symlinks = false 挡不住这条路径。
我按公告思路建了个克隆仓库,只放 package.json -> /dev/zero,然后分别跑 starship module package(默认配置,空 starship.toml):
== starship 1.26.0 module package (package.json -> /dev/zero)
killed after 3s, peak RSS 3528 MB
== starship 1.27.0 module package (package.json -> /dev/zero)
exit=0 elapsed=0.05s peak RSS 0 MB output=[]
1.26.0 三秒内 RSS 顶到约 3.5 GB,被我杀掉。1.27.0 立刻返回空输出,峰值 RSS 记不下来(进程太短)。修法是给共享的读文件函数加了 100 MiB 上限,并拒绝目录、设备这类非普通文件。
降信任仓库里还会调 git 可执行文件(GHSA-679r)
Starship 调外部 git 时会带 --git-dir,这会绕过 git 自己的仓库所有者检查。别人的仓库若配了 filter.*.clean,在会走 git 可执行文件的场景下(例如开启 git_metrics,或仓库用了 reftable),过滤器可能以当前用户身份跑起来。
我在临时目录放了一个 root 拥有、启用 extensions.refstorage=reftable 的仓库,给已跟踪文件配了一个只写无害标记文件的 clean 过滤器,再把工作区弄脏。当前用户直接跑 git status:
fatal: detected dubious ownership in repository at '/tmp/s679-shared-repo'
同一个目录里开启 git_metrics 再跑 Starship。1.26.0 跑完,临时目录里多了 clean 过滤器写下的标记文件,说明过滤器以当前用户身份执行了;1.27.0 跑完没有这个文件。
1.27.0 会看 gitoxide 给出的 trust;信任不够时不再为 status / metrics 走外部 git。符号引用这类固定查询仍允许降信任,但不会跑过滤器。
package 终于认 build.gradle.kts
以前 package 只读 build.gradle,Kotlin DSL 项目常常没版本号。1.27.0 在找不到 build.gradle 时会回落到 build.gradle.kts(发布说明对应 #7627)。
我用 start.spring.io 生成了一个最小工程:Spring Boot 4.1.1、Java 21、Gradle Kotlin DSL、只加 web。build.gradle.kts 里是:
group = "com.example"
version = "0.0.1-SNAPSHOT"
Wrapper 指向 Gradle 9.8.1。本机编译并启动:
./gradlew --no-daemon -q build
# 得到 demo-0.0.1-SNAPSHOT.jar
java -jar build/libs/demo-0.0.1-SNAPSHOT.jar --server.port=18089
# 2026-10-18T08:16:19.916+08:00 INFO ... Tomcat started on port 18089 (http) with context path '/'
# 2026-10-18T08:16:19.923+08:00 INFO ... Started DemoApplication in 1.149 seconds (process running for 1.497)
curl -s localhost:18089/hello
# hello from demo
在该项目目录里对照两个版本的模块输出(去掉 ANSI 色):
1.26.0 package => []
1.26.0 java => [via ☕ v21.0.12 ]
1.26.0 gradle => [via 🅶 v9.8.1 ]
1.26.0 git_branch => [on main ]
1.27.0 package => [is 📦 v0.0.1-SNAPSHOT ]
1.27.0 java => [via ☕ v21.0.12 ]
1.27.0 gradle => [via 🅶 v9.8.1 ]
1.27.0 git_branch => [on main ]
1.26.0 的 package 是空的;1.27.0 读出了 v0.0.1-SNAPSHOT。java / gradle / git_branch 两边一致。二进制校验和与官方 sha256 对过:
starship 1.26.0
branch:main
commit_hash:fca92d8
build_time:2026-06-28 17:04:57 +00:00
starship 1.27.0
branch:main
commit_hash:f8e4e21
build_time:2026-10-17 09:20:07 +00:00
还加了 Jujutsu 相关模块
发布说明里新增了 jj_bookmark、jj_change、jj_metrics、jj_status,也给 vcs 模块加了 Jujutsu。官方文档写明这些模块默认不在 format 里,需要自己加,或把 vcs 的 order 调成先 jj。具体配置见配置文档。
同版还有 Bash 右侧提示(Flyline)、git_branch.ignore_remotes、OpenTofu 的 .tofu 文件检测、Zig 的 build.zig.zon 版本读取等。
我怎么装的
官方安装脚本或各发行版包管理器都可以。我这边是直接下 GitHub Release 的 starship-x86_64-unknown-linux-musl.tar.gz,用附带的 .sha256 校验后再解压。装完确认版本:
starship --version
# starship 1.27.0
一起交流
分享你的思考,让讨论更进一步。