TTM

August 10, 2026 · View on GitHub

License: MIT Go Platform

TTM — Tiny Terminal Manager

Lightweight SSH bookmark manager built with Bubble Tea.

Manage, sync and connect to your servers — all from the terminal.

English · 中文

TTM Screenshot 1 TTM Screenshot 2

English

Features

  • Full TUI — no config files to hand-edit, everything is in the interface
  • SSH connect — password, private key, or keyboard-interactive auth
  • Bookmark management — add, edit, delete, star/favorite
  • Gist sync — push/pull bookmarks via GitHub or Gitee Gist
  • In-app config — set token and gist ID without leaving the TUI
  • Filter & paginate — fuzzy search across bookmarks
  • Private key input modes — paste key text or provide a key file path (resolved on save, ≤256KB)
  • Clipboard-aware copyCtrl+Y supports system clipboard with terminal fallback
  • Config export/import — share config across machines via Ctrl+B export + --import-config
  • i18n — English / 中文, toggle with L
  • Update check — press u to check for new releases, with download progress bar
  • Cross-platform — macOS, Linux, Windows, Android (Termux)
  • Copy SSH command — press y to copy the standard SSH command for the selected bookmark (e.g. ssh user@host -p 22), with Termux OSC52 fallback; the command is shown in the tip bar for manual copy too
  • Remote file transfer — double-press Ctrl+G during an SSH session to upload or download files/directories via SCP protocol (reuses existing connection, no re-authentication; remote path supports Tab completion; downloads default to ~/Downloads with customizable save directory)

Installation

Homebrew (macOS / Linux):

brew install vst93/tap/ttm

Shell script (macOS / Linux / Termux):

curl -fsSL https://raw.githubusercontent.com/vst93/ttm/refs/heads/main/cmd/install.sh | bash

China mirror:

curl -fsSL https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.sh | bash
OptionDescription
--helpShow all options
--lang enUse English (default)
--lang zh使用中文
--install-dir <dir>Install to custom directory
--forceContinue even if checksum fails
--skip-githubSkip GitHub direct download, use mirrors only
--previewInstall latest pre-release version

Windows (PowerShell):

irm https://raw.githubusercontent.com/vst93/ttm/main/cmd/install.ps1 | iex

Or with CDN mirror (faster in China):

irm https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.ps1 | iex
Environment VariableDescription
SKIP_GITHUB=1Skip GitHub direct download, use mirrors only
FORCE_INSTALL=1Continue even if checksum fails
INSTALL_DIR=pathInstall to custom directory
TTM_LANG=zhUse Chinese interface
NO_SHORTCUTS=1Skip creating desktop/start menu shortcuts
TTM_PREVIEW=1Install latest pre-release version

Install pre-release version:

# Shell (macOS / Linux / Termux)
curl -fsSL https://raw.githubusercontent.com/vst93/ttm/refs/heads/main/cmd/install.sh | bash -s -- --preview

# Windows (PowerShell)
$env:TTM_PREVIEW=1; irm https://raw.githubusercontent.com/vst93/ttm/main/cmd/install.ps1 | iex

Tip: If GitHub access is limited in your region, use SKIP_GITHUB=1 to skip direct GitHub downloads and use CDN mirrors instead.

CDN Mirror (jsdelivr): The installation script uses cdn.jsdelivr.net as a CDN mirror for faster downloads in regions with limited GitHub access. You can also use the CDN mirror directly:

# Use CDN mirror for installation
irm https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.ps1 | iex

# Or with options
$env:SKIP_GITHUB=1; $env:TTM_LANG="zh"; irm https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.ps1 | iex

Example with options:

$env:SKIP_GITHUB=1; $env:TTM_LANG="zh"; irm https://raw.githubusercontent.com/vst93/ttm/main/cmd/install.ps1 | iex

Or download ttm-windows-*.zip from Releases, extract ttm.exe, add to PATH.

Build from source:

git clone https://github.com/vst93/ttm.git && cd ttm
make build

Quick Start

ttm
  1. c — Open config editor, set GitHub/Gitee token and gist ID
  2. a — Add a new bookmark (host, user, port, auth type)
  3. Enter — Connect to the selected server
  4. s / S — Push or pull bookmarks via Gist

Configuration

Config directory: ~/.config/ttm/ (Linux), ~/Library/Application Support/ttm/ (macOS), %APPDATA%\ttm\ (Windows)

FileDescription
config.jsonPlatform, token, gist ID, locale
bookmarks.jsonBookmark entries
{
  "platform": "github",
  "token": "ghp_xxxxxxxxxxxx",
  "gistId": "abcdef1234567890abcdef1234567890",
  "locale": "en"
}

Export / Import: Press cCtrl+B to export config as a base64-encoded import command. Run ttm --import-config <base64> on another machine to import (details displayed, confirmation required).

Clipboard notes: In remote SSH/tmux sessions, clipboard falls back to terminal channel if system clipboard is unavailable. Enable tmux passthrough with set -g set-clipboard on.

Private key path input: The Private Key field accepts either raw key text or a file path. On save, if the value reads as a file (≤256KB), TTM stores the content. If reading fails, the path text is preserved with a tip.

Gist Sync

  1. c — Open config editor
  2. Select platform (github / gitee)
  3. Enter Personal Access Token (needs gist scope)
  4. Enter Gist ID (leave empty to auto-create on first push)
  5. Ctrl+S to save
  6. s to push, S to pull

Keybindings

Main list:

KeyActionKeyAction
EnterConnectaAdd bookmark
eEdit bookmarkdDelete bookmark
*Star / unstars / SPush / Pull Gist
cConfig editoruCheck updates
yCopy SSH commandLToggle EN / 中文
/Filterj / k / Navigate
h / l / Page?Help
qQuit

Editor shortcuts: Ctrl+S save, Ctrl+R reveal/hide secrets, Ctrl+Y copy field, Ctrl+U clear field, Ctrl+V paste, Ctrl+B export config.

SSH session shortcuts:

KeyAction
`Ctrl+G$ \times 2\text{Open} \text{transfer} \text{dialog} (\text{copy} \text{scp} \text{command}, \text{upload}, \text{or} \text{download})
$Esc/Ctrl+C`Cancel ongoing transfer
TabAuto-complete remote path (in download dialog)

Transfer dialog flow:

  1. Double-press Ctrl+G during an SSH session
  2. Choose: 1 copy scp command to clipboard, 2 upload local file/directory, 3 download remote file/directory
  3. If uploading: confirm remote directory (auto-detected), enter local path, confirm before transfer
  4. If downloading: enter remote path (Tab to complete), choose local save directory (default ~/Downloads), confirm before transfer
  5. Progress bar shows transfer speed and ETA
  6. Supports both single files and recursive directory transfer

Platform Compatibility

FeatureLinux/macOS ServerWindows Server
Upload/Download✅ Full support❌ Not supported (use scp command instead)
Tab path completion
Auto-detect remote directory❌ Falls back to home directory

Local terminal notes:

  • Windows Terminal — fully supported (ANSI escape sequences enabled by default)
  • Old cmd.exe — UI may display incorrectly; recommend upgrading to Windows Terminal
  • Termux (Android) — fully supported

License

MIT © 2025 vst


中文

功能特性

  • 全 TUI 界面 — 无需手动编辑配置文件,所有操作均在界面内完成
  • SSH 连接 — 支持密码、私钥、键盘交互三种认证方式
  • 书签管理 — 新增、编辑、删除、收藏
  • Gist 同步 — 通过 GitHub 或 Gitee Gist 推送 / 拉取书签
  • 应用内配置 — 无需离开 TUI 即可设置 Token 和 Gist ID
  • 搜索与分页 — 模糊过滤书签列表
  • 私钥输入模式 — 支持粘贴私钥文本或填写私钥文件路径(保存时解析,≤256KB)
  • 剪贴板感知复制Ctrl+Y 优先系统剪贴板,可用时回退终端通道
  • 配置导入导出 — 通过 Ctrl+B 导出 + --import-config 跨机器共享配置
  • 双语 — English / 中文,按 L 切换
  • 版本检查 — 按 u 检查新版本,下载时显示进度条
  • 跨平台 — macOS、Linux、Windows、Android (Termux)
  • 复制 SSH 命令 — 按 y 复制选中书签的标准 SSH 命令(如 ssh user@host -p 22),兼容 Termux OSC52;命令同时显示在提示栏,支持手动选中复制
  • 远程文件传输 — SSH 会话中双击 Ctrl+G,可上传或下载文件/目录(SCP 协议,复用已有连接,远程路径支持 Tab 补全,下载默认 ~/Downloads 可自定义)

安装

Homebrew (macOS / Linux):

brew install vst93/tap/ttm

脚本安装(macOS / Linux / Termux):

curl -fsSL https://raw.githubusercontent.com/vst93/ttm/refs/heads/main/cmd/install.sh | bash

国内加速:

curl -fsSL https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.sh | bash
参数说明
--help显示所有选项
--lang en使用英文(默认)
--lang zh使用中文
--install-dir <dir>安装到指定目录
--force校验失败时继续安装
--skip-github跳过 GitHub 直连,仅使用镜像下载
--preview安装预览版

Windows (PowerShell):

irm https://raw.githubusercontent.com/vst93/ttm/main/cmd/install.ps1 | iex

国内镜像:

irm https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.ps1 | iex
环境变量说明
SKIP_GITHUB=1跳过 GitHub 直连,仅使用镜像下载
FORCE_INSTALL=1校验失败时继续安装
INSTALL_DIR=path安装到指定目录
TTM_LANG=zh使用中文界面
NO_SHORTCUTS=1不创建桌面/开始菜单快捷方式
TTM_PREVIEW=1安装预览版

安装预览版:

# 脚本安装(macOS / Linux / Termux)
curl -fsSL https://raw.githubusercontent.com/vst93/ttm/refs/heads/main/cmd/install.sh | bash -s -- --preview

# Windows (PowerShell)
$env:TTM_PREVIEW=1; irm https://raw.githubusercontent.com/vst93/ttm/main/cmd/install.ps1 | iex

提示: 如果您所在地区 GitHub 访问受限,建议使用 SKIP_GITHUB=1 跳过 GitHub 直连下载,仅使用 CDN 镜像。

CDN 镜像 (jsdelivr): 安装脚本使用 cdn.jsdelivr.net 作为 CDN 镜像,在 GitHub 访问受限的地区可获得更快的下载速度。您也可以直接使用 CDN 镜像:

# 使用 CDN 镜像安装
irm https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.ps1 | iex

# 或带参数
$env:SKIP_GITHUB=1; $env:TTM_LANG="zh"; irm https://cdn.jsdelivr.net/gh/vst93/ttm@main/cmd/install.ps1 | iex

带参数示例:

$env:SKIP_GITHUB=1; $env:TTM_LANG="zh"; irm https://raw.githubusercontent.com/vst93/ttm/main/cmd/install.ps1 | iex

或从 Releases 下载 ttm-windows-*.zip,解压 ttm.exe,添加到 PATH

从源码构建:

git clone https://github.com/vst93/ttm.git && cd ttm
make build

快速开始

ttm
  1. c — 打开配置编辑器,设置 GitHub/Gitee 令牌和 Gist ID
  2. a — 新增书签(主机、用户、端口、认证方式)
  3. Enter — 连接选中服务器
  4. s / S — 通过 Gist 推送或拉取书签

配置说明

配置文件路径:~/.config/ttm/(Linux)、~/Library/Application Support/ttm/(macOS)、%APPDATA%\ttm\(Windows)

文件说明
config.json平台、令牌、Gist ID、语言
bookmarks.json书签数据
{
  "platform": "github",
  "token": "ghp_xxxxxxxxxxxx",
  "gistId": "abcdef1234567890abcdef1234567890",
  "locale": "zh"
}

导出 / 导入:cCtrl+B 导出配置为 base64 编码的导入命令。在其他机器运行 ttm --import-config <base64> 即可导入(展示配置详情,确认后写入)。

剪贴板说明: 远程 SSH/tmux 会话中,系统剪贴板不可用时自动回退终端通道。tmux 建议开启 set -g set-clipboard on

私钥路径输入: Private Key 字段可填写私钥文本或文件路径。保存时若读取文件成功(≤256KB)则存入内容,失败则保留路径文本并给出提示。

Gist 同步

  1. c — 打开配置编辑器
  2. 选择平台(github / gitee
  3. 输入 Personal Access Token(需要 gist 权限)
  4. 输入 Gist ID(留空则首次推送时自动创建)
  5. Ctrl+S 保存
  6. s 推送,S 拉取

快捷键

主列表:

按键功能按键功能
Enter连接a新增书签
e编辑书签d删除书签
*标星 / 取消s / S推送 / 拉取 Gist
c配置编辑器u检查更新
y复制 SSH 命令L切换 EN / 中文
/过滤j / k / 导航
h / l / 翻页?帮助
q退出

编辑器快捷键: Ctrl+S 保存、Ctrl+R 显示/隐藏敏感字段、Ctrl+Y 复制字段、Ctrl+U 清空字段、Ctrl+V 粘贴、Ctrl+B 导出配置。

SSH 会话快捷键:

按键功能
`Ctrl+G$ \times 2打开传输对话框(复制 \text{scp} 命令、上传、下载)
$Esc/Ctrl+C`取消正在进行的传输
Tab自动补全远程路径(下载对话框中)

传输流程:

  1. SSH 会话中双击 Ctrl+G
  2. 选择:1 复制 scp 命令、2 上传本地文件/目录、3 下载远程文件/目录
  3. 如上传:确认远程目录(自动检测),输入本地路径,确认后传输
  4. 如下载:输入远程路径(Tab 补全),选择本地保存目录(默认 ~/Downloads),确认后传输
  5. 进度条显示传输速度和剩余时间
  6. 支持单文件和递归目录传输

平台兼容性

功能Linux/macOS 服务器Windows 服务器
上传/下载✅ 完全支持❌ 不支持(请用 scp 命令代替)
Tab 路径补全
自动检测远程目录❌ 降级为 home 目录

本地终端说明:

  • Windows Terminal — 完全支持(默认启用 ANSI 转义序列)
  • 老版 cmd.exe — 界面可能显示异常,建议升级到 Windows Terminal
  • Termux(Android) — 完全支持

许可证

MIT © 2025 vst