TamboUI 承诺为使用 Java 构建 TUI 提供更强大的功能
Source: InfoQ - Backend

针对“让 2026 成为终端侧的 Java 之年”这一号召,首个现代化 Java TUI 库 TamboUI 应运而生。受 Ratatui(据推测是开发 Claude CLI 时使用的库)的启发,它承诺提供从低级终端绘制到高级 API 的全面支持,包括组件和事件处理。目前,该库已发布 0.3.0 版本,并且已经被 Maven 和 Spring 等主要项目采用。
在一月初发表的博文中,Andersen 鼓励 Java 社区使用 Java 而非其他编程语言来构建文本用户界面(TUI)。他坚称,在开发文本用户界面方面,该语言的成熟度和功能使其至少与 Python、Rust 或 Go 一样出色。
Andersen: 如今的不同之处不在于对终端的怀旧,而在于压力。如今的开发者期待快速的反馈、简便的流程,以及能够融入现有工作环境的工具。
Andersen 指出,打包和分发曾是 Java 命令行界面(CLI)的一大障碍,但如今,得益于原生选项和更简化的运行时部署方式,这些方面已经能满足当今开发者对“低门槛”的期待。Java 成熟的库和跨平台可靠性完美契合 CLI 应用场景,这使得使用 Java 而非其他语言来构建新的终端工具成为必然之选。
Bluesky 上一场关于 Claude Code CLI 的讨论激发了新建一个 Java TUI 库的想法。随后,一篇多人合作撰写的博文正式宣布推出 TamboUI 。Champeau 承诺,这款新发布的库将把 Java 生态系统的 UI 构建能力从“原始”水平提升至现代化水平,提供更广泛的功能,更贴近社区需求,并且具备更高层次的能力。它提供的 API 范围将涵盖从低级(在终端上“绘图”这种最基本的特性)到高级(如组件、事件处理、CSS 等)的所有 API。
Champeau:[TamboUI] 为 Java 开发者提供的功能与他们在桌面应用程序(例如 JavaFX)中使用多年的功能相同,并且可在终端环境中实现。
为了进一步了解该库的现状及其开发动机,InfoQ 联系了 Andersen 和 Champeau,请他们发表更多的看法。
InfoQ:为什么 Java 现在适合开发高效的 TUI 了?
Max Rydahl Andersen:分发本应简单直观,用户不需要关心 JAR 文件、类路径或 JVM 参数。命令行工具(CLI)应该像任何原生工具一样,让人感觉可以轻松地安装和运行。像 JReleaser 这样的工具,再结合 JBang ,只要是使用主流的打包生态系统,打包和分发完整的应用程序就会变得轻而易举。这种体验与人们熟悉的 npm/pip/pipx/npx/uvx 非常相似。
InfoQ:要让使用 Java 开发终端用户界面要变得更加友好,还需要做些什么?
Max Rydahl Andersen:从技术角度来看,我们需要现代化的终端 UI 库,具备合理的布局和控件、支持键盘和鼠标操作、可以正确地处理 Unicode、在终端支持的情况下可以显示图片,以及良好的风格设计。
从文化层面来看,将 Java 置于虚构的基座之上,仅将其视为“企业级”或“微服务架构”的专属工具,这种做法并没有什么好处。Java 的绝大多数原生工具,包括编译器、构建工具、依赖管理器和测试工具,都运行在终端环境中。然而,我们却始终未能投入足够的精力来优化这方面的使用体验。
这两个方面都需要改变。
InfoQ:您从其他生态系统中得到了什么启发?
Champeau:我们最初的灵感来源于使用 Rust 编写的 Ratatui。不错,Ratatui 的实现层次仍然比较低,与 Java 开发者习惯的开发方式相比尤其如此。因此,我们很清楚地意识到,我们需要更进一步的抽象。我们借鉴了 Charm 、 Bubbletea 等其他框架的理念,同时也从 Java 桌面生态系统中汲取了灵感,融合了 Swing 和 JavaFX 的设计思想。简而言之,我们的目标是提供 Java 开发者所熟悉的抽象层次,并为现代 Java 提供适配的 API。对我们而言,TamboUI 采用模块化架构同样至关重要,用户可以自由选择所需的抽象层级,从最低层到最高层都可以。我认为,这在 TUI 生态系统中相当独特:其他框架往往自带一个固定的模型,而我们则提供选项,让你在需要时可以构建自己的模型。
InfoQ:那么,Java 适合用于构建命令行界面(CLI)吗?
Champeau:毫无疑问!我想补充一点,如果你担心启动时间或分发问题,我们从一开始就考虑到了这一点:TamboUI 与 GraalVM 完全兼容,这让你能够从 Java 源代码构建原生二进制文件。实际上,你可以发布一个约 10MB 的可执行文件,其中包含所需的一切,能够立即启动,并且内存占用更小。这是我们在将自己与 Go 等其他语言进行比较之前必须解决的最后一个问题。
这款新的 Java TUI 替代方案迅速被采纳,并被集成到 Quarkus 生态系统中用于实现响应式开发控制台,同时被用于驱动 Maveniverse Pilot 的交互式构建日志仪表盘,并创建了基于控制台的 Spring Initializr TUI 。另有一个 Spring 集成的示例介绍了 TamboUI 与 Spring Boot 的集成。此外,该公告在更广泛的社区中也获得了积极的反馈。