目前市面上大多数客户端都是基于 Electron 或 HTML 开发,我个人不太喜欢这种“塑料的感觉”(并不是贬义,缺乏真实触感的体验)。因此,我选择使用 Java Swing 开发一个桌面端客户端。
核心部分采用 Kotlin 开发,最终目标是通过 Kotlin Multiplatform 打造一款全平台的 SSH/终端 工具。
目前尚不支持 SFTP/FTP 等
使用 Kotlin 实现了 XTerm 协议(尚未完全实现)。桌面端的渲染层基于 Java Swing ,未来计划将这一部分迁移到 KMP ,从而实现真正的跨平台支持(包括移动端)。
在实现协议的过程中,参考了许多经典的客户端,例如:
这是一个长期发展的项目。
希望大家给点建议
1 shuangbiaog 282 天前 点个星星支持一下,个人觉得 ai 功能不太合适 |
![]() | 2 powersee OP @shuangbiaog #1 感谢。我也觉得 AI 不合适,因为“太花里胡哨”了,这个优先级不会太高。但是,我对 X-Server 挺感兴趣的,可能会尝试实现一下,会完全采用 Kotlin 开发,后续跨平台也好兼容。 |
![]() | 3 XDiLa 282 天前 感觉和 Termius 差别不大 但是管理主机方便 Termius 更加便捷吧。还有就是这种 ssh 终端工具太多了 很少能有非常吸引人的地方。我看你和 Wave 很像 |
![]() | 4 XDiLa 282 天前 等你证书下来了我在安装体验一下,从你发的截图看 UI ,感觉是尚可的 |
![]() | 5 XDiLa 282 天前 感觉你后续发展的目标非常和 Warp 类似 |
![]() | 6 powersee OP @XDiLa #3 目前来说,Termius 是更加方便的 #4 苹果这个证书有点麻烦,我被限制了,苹果团队还在处理中; UI 参考了 IDEA 的 #5 我个人是比较反对终端 “美化” 的,其实我更喜欢 XShell 这种原生质感 |
![]() | 7 czhh 282 天前 和 finalshell 啥区别 |
9 yellowstrong 282 天前 ![]() 下载体验了一下,跟作者观点一致,比一众 chrome 套壳应用体验可好太多了,后续希望能长期发展下去 |
![]() | 10 bobobobob 282 天前 Java Swing ,想起我的大学时光了。。。 |
![]() | 11 powersee OP @yellowstrong #9 感谢。会持续维护的,个人觉得 JVM 的性能还是比 Electron 的效率高一些。 |
14 shewhen 282 天前 |
15 liansishen 282 天前 star 了,等后续更新 |
16 iyiluo 282 天前 ssh 客户端加 ai 功能感觉挺离谱的,这不是把命令隐私都泄露了吗,没必要。ftp 的功能反倒优先级更高 |
17 shewhen 282 天前 ![]() 期待加入 SFTP ,干翻 Termius ,FinalShell ,XShell ! |
![]() | 18 powersee OP @shewhen #14 感谢使用。我通过 history 生成过百万行,也依然非常流畅。 可以通过 “设置 - 终端” 修改历史行数。 我采用全新思路设计了终端渲染和终端协议处理,无论数据再多也不会影响渲染效率,具体可以参考: https://github.com/TermoraDev/termora/blob/1.0.0/src/main/kotlin/app/termora/terminal/Terminal.kt |
![]() | 19 powersee OP 282 天前 @iyiluo #16 是这样,我觉得 AI 比较鸡肋,我个人是比较反对的,后续我会考虑如何以 “方便、效率、易用” 的方面来接入 AI 。我比较倾向于: https://plugins.jetbrains.com/plugin/14823-full-line-code-completion 这种,完全本地化运行,但是我没有这方面的经验 |
![]() | 20 lozzow 282 天前 希望加入 Quake Mode |
![]() | 22 thetbw 282 天前 ![]() java 之光 |
![]() | 23 molezznet 282 天前 先 star 再试用 比起 ai 什么, 还是期待 trzsz 之类或 sftp 之类的优先级 |
![]() | 25 ZeroDu 282 天前 win 测试了一下不错,丝滑,比用 Electron 的好多了 ,终端用来用去还是 xshell 顺手,功能全。不过 Termius 的这种 ui 其实还可以的 |
![]() | 30 KagurazakaNyaa 282 天前 似乎没有支持 24 位深度色彩(TrueColor)终端,使用 btop 的 truecolor 模式会渲染出错,就像 xshell 一样,应该是只做了 256 色支持 |
![]() | 31 powersee OP |
![]() | 32 powersee OP @XiLingHost #30 我会进行测试。是 https://github.com/aristocratos/btop 吗? |
![]() | 33 szdev 282 天前 作为苹果用户,真的比较抵触 java 开发的软件,占用内存太严重了,之前比较喜欢用 FinalShell 运行久一点就是好几个 G 内存,后面接触到了 termius 一直在用就是因为内存占用好太多了~ |
34 yannxia 282 天前 不错不错,这个还挺快的,已经 star ,帮 |
35 randomstream 282 天前 |
![]() | 36 Loku 282 天前 SFTP 优先级高一点,AI 是没必要吧? |
![]() | 37 powersee OP @szdev #33 Finalshell 我研究过,我不知道它为什么启动就占用 1G ,可能哪里有问题。不过我开发的这个内存占用好很多,Java 的缺点就是不会及时归还内存给操作系统。 |
![]() | 39 KagurazakaNyaa 282 天前 @powersee 是,可以尝试使用任意在终端渲染真彩色的应用测试 |
![]() | 40 Cooky 282 天前 支持,只要够快,够省内存就好 |
41 F532uKfxnXPiFdnC 282 天前 @shewhen #14 老哥,你这个录屏 gif 的工具叫啥名,求一个 |
42 F532uKfxnXPiFdnC 282 天前 Java 之光,挺美观; 我觉得如果可以参考 warp 加入一点 AI ,然后支持 macOS 上的 brew install 方式安装就更完美 |
![]() | 43 powersee OP @qianchengv #42 后续会加入,因为苹果开发者证书还没下来,所以需要一段时间 |
![]() | 44 minami 282 天前 只要不是 Electron/CEF 就点赞 |
![]() | 46 w292614191 282 天前 |
![]() | 47 powersee OP @w292614191 #46 相比于 xterminal 、termius 、electerm 这类的最大区别是前者使用 electron 开发,而 termora 使用 java 开发,个人觉得在丝滑程度略层一筹。 相比于 finalshell ,虽然与 termora 都是 java 开发,前者渲染基于 jediterm ,在性能和易用性不如 termora (通过调用输入法可以对比出来),finalshell 的内存占用异常的高,termora 就好很多。但不可否认的是,finalshell 目前的功能是比 termora 多的。 |
48 Lowae 282 天前 via Android 居然看到 kmp 的项目了,star 了。 不过要迁移的话可能改动也不小,ui 层基本需要替换为 compose |
![]() | 49 powersee OP @Lowae 后续有开发移动端的计划,主要是核心渲染部分。会抽象出 VisualTerminalDisplay ,然后底层使用 skiko 绑定到各个平台就好,改动的确不会太小 |
50 lscho 282 天前 ![]() Java 和 Electron 谁也别说谁,半斤对八两。。。。 |
51 sn0wdr1am 282 天前 x11 Forwarding. |
![]() | 52 Ccf 282 天前 等 macos 正式版 |
![]() | 53 w3cll 282 天前 Swing 的 UI 你是从哪里找的 |
54 willgyw 282 天前 太棒了,已 star 换了 macOS 之后一直想找一个像 Xshell 一样支持 Zmodem 的客户端,无奈只能用 item2 。 刚才试用了一下发现体验很棒,应该会继续用一段时间。 |
55 smilenceX 282 天前 下载试用了,很不错。 试用的感受: 首页的输入框可以加一个说明性的文字,我直接写 `ssh [email protected]` 按回车没反应,应该是我的用法不对。 proxy 功能 12 星好评 希望可以自定义配置文件的路径,这样就可以用 one drive 同步配置文件了。 |
![]() | 56 powersee OP @sn0wdr1am #51 我对这个协议很感兴趣,我会尝试实现的 @w3cll #53 flatlaf @willgyw#54 感谢 @smilenceX #55 其实是可以的。打开 app 目录 有一个 termora.cfg 文件,在后面加个 -Dtermora.base-data-dir=目录 https://github.com/TermoraDev/termora/blob/470b95cc426ce31e2d67c9e0f77e80154ac28aae/src/main/kotlin/app/termora/Application.kt#L69 |
57 Remember 282 天前 你这缺了太多功能,怎么敢直接 release 1.0.0 啊? 不说没实现的 sftp/trzsz 那些,最基础的 key 认证也只支持 rsa ,另外也不支持任何 key agent 。 只能是先 star 了。 不过打开看了一下 win11 占用 300M 不到内存,这在 java 里很优秀了啊。 |
![]() | 58 powersee OP @Remember #57 的确缺了很多功能,所以要慢慢完善嘛。因为我只测试了 rsa ,后面会扩展更多,另外,您说的 key agent 是指? |
60 willgyw 282 天前 还有一个小的需求,好像 item2 里面不需要任何插件就可以实现 tmux 和 vim 以及系统剪切板之间共享内容,请问这个功能可以实现吗? |
61 Lowae 282 天前 @powersee 不过好在 kmp 的迁入是可以做到渐进的,而且也不是重 UI 的项目 我推荐个项目,看看能不能给你带来一些灵感。 https://github.com/JakeWharton/mosaic |
62 macaodoll 282 天前 via Android 插眼等更新 |
![]() | 63 windfalls 28 天前 R 门, 贫僧这就用 rust 给你重写 |
![]() | 64 caola 282 天前 ![]() xterminal 是我用过最好用的 SSH 工具了,但它是用 Electron 的,流畅度上一般,如果有可能的话,建议可以抄一下他们的功能和界面 |
![]() | 65 zhiyu1998 282 天前 看着不错,已 star |
![]() | 68 Hconk 282 天前 via iPhone 列几个希望能有的,前面几个功能有了应该能日常使用了,如果比其他软件流畅那应该能吸引更多人切过去: 1. SFTP/FTP/SCP 文件管理,trzsz 2. 串口,串口自动登陆 3. 快捷指令按钮,按钮命令分组 4. x-server 5. 支持 cmd/poweshell ,类似 clink 的命令提示,自动提示 6. 代理,多层跳板 7. log 记录 8. 字符高亮,自定义主题 9. 自定义插件 |
![]() | 69 Hconk 282 天前 via iPhone ![]() 可以参考参考 WindTerm 的功能 |
71 sn0wdr1am 281 天前 终端主题,参考同行的。 |
72 shewhen 281 天前 @qianchengv #41 pixpin |
![]() | 74 cowcomic 281 天前 JAVA 的内存占用真的是硬伤,期待以后的 JVM 能优化这个 功能上提供几个个人感受 xshell 个人离不开的功能主要有下面几个 1 ,和 xftp 联动 2 ,目录同步,虽然比较简陋,但也够了 3 ,屏幕搜索 |
![]() | 75 zhongjun96 281 天前 |
77 Greendays 281 天前 挺好看的。如果支持 SFTP ,我就用这个来替代现在的 Windterm 了 |
![]() | 78 Poko div class="badges"> 281 天前 用起来挺快的,颜值也不错,优先加入 SFTP 吧 |
![]() | 79 kalman03 281 天前 Kotlin + Swing 有点意思,新瓶装旧酒 |
![]() | 80 liuzhedash 281 天前 看了下挺好的,star 了。 不过现在用 xshell ,暂时不打算真用 lz 的,JAVA 再怎么说也比 electron 省资源。 |
![]() | 81 ripperdev 281 天前 在 mac 上试用了下,启动挺慢的,比使用 Electron 的 Tabby 还要慢。习惯性的用 ctrl+d 退出当前终端时,tab 没有关闭,得手动点一下 |
![]() | 82 powersee OP |
![]() | 83 liyanggyang 281 天前 大佬,有个疑问想请教下,您是如何判断 linux 命令已经直接完毕的,然后返回渲染? 我之前在网上找了些方案: 一、看 io 输入是否还有, 弊端:1 、有时候网络波动,io 没有输入但是命令还没返回完; 2 、类似 sleep 10 echo 1 这种命令,10 秒内 io 没返回直接 return 了不行 二、根据换行后的 #、$ 等标识( 比如 [root@localhost ~]# ) ,弊端:不够优雅,而且如果是 cat xxx.txt ,xxx.txt 文本中有 # 等在末尾,恰好有可能碰撞到返回 三、 用户输入命令自行拼接,比如 输入 ls , 变为 ls , echo end , 根据 返回 end 判断。弊端 :不够优雅,且有同样“二”问题 等等 |
![]() | 84 NowTime 281 天前 @powersee 感觉我经常使用的一些快捷键似乎在这个软件失效了,比如: - `Ctrl + W` 删除光标前一个单词,结果是关闭终端且没有任何提示 - `Ctrl + 左右方向键` 光标跳跃单词移动 ... |
85 lyp92nlf 281 天前 SSH client is opening... SSH client opened successfully. Sesson established. Session created. 通过代理连接主机会在这里卡 15 秒左右, 其它的还不错,正常连接挺快的,希望可以自定义字体,不然中文不太协调 |
![]() | 86 powersee OP @liyanggyang #83 pty 可以理解为是网络流,它是无边的。终端只负责渲染和输入,并不是涉及到 “执行” ,执行命令是由底层的 zsh/bash/sh 来操作的。我们无法获取到用户输入的命令,这个正是我有疑虑的地方,如果无法准确的获取到用户输入的命令是没办法做到 “命令提示” 的。 @NowTime #84 是的,这些快捷键还没有实现,和 #83 的回答一样,目前我还没有好的思路如何获取用户输入的命令。 |
![]() | 87 powersee OP @willgyw #60 “vim 以及系统剪切板之间共享内容” 可以提个 https://github.com/TermoraDev/termora/issues/new 详细描述一下嘛? |
![]() | 88 Lunrry 281 天前 请问和 Windterm 相比有什么优势呢 |
89 lloveinmypacket 281 天前 @powersee 可以做一个假的输入 UI 给用户,各种提示都可以实现,最后再给底层执行 |
![]() | 90 blankmiss 281 天前 有点像 termius 不过 java 内存占用不大吗 |
![]() | 91 zoharSoul 281 天前 不错啊 挺漂亮的 |
![]() | 92 zhongjun96 281 天前 常用的快捷键 Ctrl+D 关闭当前窗口,Ctrl+N 新增窗口 没实现 |
![]() | 93 zeusho871 281 天前 干翻 FinalShell 那个玩意儿很反人类 多窗口在 mac 里 轻轻一拖就多了 |
![]() | 95 monkeyWie 281 天前 via Android 为啥不直接上 flutter 呢 |
![]() | 96 molezznet 281 天前 发现没有 import ? export 完, 不知道如何使用 json 了 |
![]() | 97 lululau 281 天前 这两年程序员都跟 Terminal 软件干上了?反正不管什么 Warp / wezterm / ghostty ,我觉得还是 iTerm2 功能最强大 |
![]() | 98 powersee OP |
99 lvrvfv 281 天前 支持,最近刚用 kmp 开发了一个客户端,向楼主学习 |
![]() | 100 liuliuliuliu PRO 我觉得可以试试用 .net 写,aot 编译,跨平台还不需要运行时,内存占用也小 |