A modern terminal,
reimagined.

Real PTY sessions. ANSI rendering by xterm.js. An encrypted vault for SSH credentials. AI assistance from Anthropic, OpenAI, or Ollama — all in one tab-grouped, themeable terminal.

$curl -L https://mterm.dev/install.sh | bash
MIT licensed·Open source·Linux · Windows · macOS· Star on GitHub
mTerminalvoyager-prod7 tabs · 3 groups
voyager-prod·arthur@voyager·git⌘⇧G grid
ssh deploy@voyager.production
// connection authenticated via vault: voyager-prod
Welcome to Voyager — Ubuntu 24.04 LTS
arthur@voyager:/srv/api$ git pull --rebase origin main
From github.com:voyager/api
+ 4 commits, 17 files changed, +412/−98
arthur@voyager:/srv/api$ pnpm migrate
╭─ Running 3 pending migrations ──────────────╮
0042_add_invoices_index · 18ms
0043_drop_legacy_users · 91ms
! 0044_archive_partition_2026q2 · 312ms (slow)
╰──────────────────────────────────────────────╯
arthur@voyager:/srv/api$
side chat⌃⇧A
why is migration 0044 slow?

312ms is 3× slower than your last partition migration.

The cause is a full-table lock during ALTER TABLE … ADD CONSTRAINT.

ask anything…claude-sonnet
SSH~/srv/apigit pull --rebase origin main·UTF-87 tabs · 3 groups·ai $0.042··14:32

Features

Everything a terminal should be — and a few things it never was.

workspace
ssh2
voyager-prod
git pull --rebase
1
logs
tail -f api.log
2
frontend2
vite dev
ready in 412ms
3
storybook
4
backend1

01 · Tabs

Multi-tab PTY with groups.

Each tab is an independent PTY session. Group them by project, color them by intent, drag them between groups. Live labels track your cwd and current command in real time.

vault unlocked
saved hosts4
voyager-prod
deploy@voyager.production
2m
ci-runner-eu
runner@ci-eu.internal
1h
staging
deploy@stg.voyager.dev
yesterday
bastion
arthur@bastion.corp
3d
XChaCha20-Poly1305 · Argon2id m=64 MiB

02 · Vault

Encrypted SSH credentials.

Saved hosts and secrets sealed with XChaCha20-Poly1305 and Argon2id (m = 64 MiB). Your credentials never touch disk in plaintext, on any platform.

ai command
Anthropic·claude-sonnet
find files larger than 100MB in this repo
$ find . -type f -size +100M -not -path "./.git/*"

Recursively scans from cwd, skipping .git. Append -print for pathnames or pipe to du -h for sizes.

⌃⇧P

03 · AI

Models that read your shell.

Anthropic, OpenAI, or local Ollama. Open the palette with ⌃⇧P, side chat with ⌃⇧A, or right-click to explain any selection. Your keys, your privacy.

mcp listening/run/user/1000/mterminal.sock
// → inspector → mTerminal
{
"jsonrpc": "2.0",
"method": "send_keys",
"params": {
"tab": 3,
"keys": "pnpm test --watch\n"
}
}
// 14 ms
{ "result": "ok" }
list_tabs · get_output · send_keys · 3 clients connected

04 · MCP

An embedded MCP server.

Other tools speak to your terminal over a Unix socket: list_tabs, get_output, send_keys. Build agents that drive shells like a human would.

Why

Built around three questions
most terminals never ask.

Productivity

Why does context-switching cost so much?

Tab groups, persistent workspaces, live labels, and a command palette that finds anything in milliseconds. Open seven projects, close the laptop, reopen tomorrow — every tab, every group, every color in place.

Security

Where do my credentials really live?

An on-disk vault sealed with modern AEAD cryptography. Master password derived through Argon2id, never weakened, never bypassed. Your SSH keys load into memory only the moment you connect.

Extensibility

Can my terminal speak to other tools?

An embedded MCP server exposes the entire session over JSON-RPC. Pair it with any AI client, route it through agents, drive it from scripts. The terminal stops being a dead-end and starts being an interface.

Themes

Six built-in palettes. One keystroke away.

Switch live from the command palette. Every theme keeps the same ANSI mapping so muscle memory survives the jump.

~ mTerminal
git status
// On branch main · ahead 2
+ apps/web/page.tsx
+ packages/ui/card.tsx
services/legacy/auth.ts
pnpm build --filter web
✔ done in 1.42s
mTerminalDefault · onyx & amber
~ Tokyo Night
git status
// On branch main · ahead 2
+ apps/web/page.tsx
+ packages/ui/card.tsx
services/legacy/auth.ts
pnpm build --filter web
✔ done in 1.42s
Tokyo NightDeep blue, electric purple
~ Catppuccin Mocha
git status
// On branch main · ahead 2
+ apps/web/page.tsx
+ packages/ui/card.tsx
services/legacy/auth.ts
pnpm build --filter web
✔ done in 1.42s
Catppuccin MochaPastel · cozy night
~ Solarized Dark
git status
// On branch main · ahead 2
+ apps/web/page.tsx
+ packages/ui/card.tsx
services/legacy/auth.ts
pnpm build --filter web
✔ done in 1.42s
Solarized DarkSchaap · timeless
~ Gruvbox Dark
git status
// On branch main · ahead 2
+ apps/web/page.tsx
+ packages/ui/card.tsx
services/legacy/auth.ts
pnpm build --filter web
✔ done in 1.42s
Gruvbox DarkRetro · earthy
~ Light
git status
// On branch main · ahead 2
+ apps/web/page.tsx
+ packages/ui/card.tsx
services/legacy/auth.ts
pnpm build --filter web
✔ done in 1.42s
LightPaper · daylight

⌃⇧P · type theme · pick

Download

Install on your machine in under a minute.

Linux

Universal installer

Alternatives

.deb (Debian, Ubuntu)

AUR (Arch)

AppImage

Windows

PowerShell installer

Alternatives

NSIS (per-user, no admin)

Scoop (preview)

macOS

Homebrew cask

Alternatives

Universal DMG (arm64 + x64)

View all releases on GitHub

Need an older build? Releases ≥ v0.3.0 are signed.