A modern terminal emulator built with Kotlin and Compose Desktop — high-performance, deeply customizable, and feature-rich on macOS, Linux, and Windows.
Performance
BossTerm delivers industry-leading throughput for developer workflows. Benchmarked against iTerm2, Terminal.app, and Alacritty (December 2025, Latency Mode):
Raw Throughput @ 50MB (MB/s) - Higher is Better
BossTerm ████████████████████████████████████████████████████ 1,645 MB/s ✓
Alacritty ██████████████████████████████████████████████████ 1,633 MB/s
iTerm2 █████████████████████████████████████████████████ 1,599 MB/s
Terminal ████████████████████████████████████████████████ 1,491 MB/s
Raw Throughput @ 1MB (MB/s) - Higher is Better
BossTerm ████████████████████████████████████████████████████ 364 MB/s ✓
iTerm2 ███████████████████████████████████ 255 MB/s
Terminal ██████████████████████████████████ 249 MB/s
Alacritty █████████████████████████████████ 233 MB/s
Variation Selectors (chars/sec) - Higher is Better
BossTerm ████████████████████████████████████████████████████ 1.01M ✓
iTerm2 █████████████████████████████████████████████████ 904K
Terminal ████████████████████████████████████████████████ 879K
Alacritty █████████████████████████████████████████████ 829K
htop Simulation (ms) - Lower is Better
BossTerm ████████████████████████████████████████████████ 3.09 ms ✓
Terminal █████████████████████████████████████████████████████ 3.21 ms
iTerm2 ██████████████████████████████████████████████████████ 3.55 ms
Alacritty ███████████████████████████████████████████████████████ 3.72 ms
Full benchmark details: benchmark/README.md | Detailed Results
Installation
Universal Installer (Recommended)

The universal installer automatically detects your platform and installs BossTerm using the best method available.
Features:
- Auto-detects platform (macOS, Linux, Windows) and architecture (x64, ARM64)
- Uses the best installation method (Homebrew → DMG on macOS, Deb → RPM → Snap → JAR on Linux)
- Installs Java 17+ automatically if needed (Windows)
- Creates CLI launcher (
bossterm command)
- Supports
--version, --uninstall, , and flags
Common operations:
curl -fsSL https://raw.githubusercontent.com/kshivang/BossTerm/master/install.sh | bash -s -- --version 1.0.80
curl -fsSL https://raw.githubusercontent.com/kshivang/BossTerm/master/install.sh | bash -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/kshivang/BossTerm/master/install.sh | bash -s -- --method dmg
curl -fsSL https://raw.githubusercontent.com/kshivang/BossTerm/master/install.sh | bash -s -- --uninstall
Alternative Installation Methods
macOS (Homebrew)
brew tap kshivang/bossterm
brew install --cask bossterm
macOS (DMG)
Download the latest DMG from GitHub Releases and drag BossTerm to Applications.
Linux (Debian/Ubuntu)
sudo dpkg -i bossterm_*_amd64.deb
sudo apt-get install -f
Linux (Fedora/RHEL)
sudo dnf install bossterm-*.x86_64.rpm
Linux (Snap)
sudo snap install bossterm --classic
Or download the .snap file from GitHub Releases and install manually:
sudo snap install bossterm_*.snap --classic --dangerous
JAR (Cross-platform)
Requires Java 17+:
java -jar bossterm-*.jar
Build from Source
git clone https://github.com/kshivang/BossTerm.git
cd BossTerm
./gradlew :bossterm-app:run
Features
Design
BossTerm's default look is the Operator theme — part of the shared BOSS "Operator's Console" visual language: an amber signal (#F2A93B) for the live/now moment on a calm ink floor (#0E1217), with cyan data accents and a MesloLGS mono voice. The tab bar and terminal surface both follow the active theme, and you can switch themes/palettes in Settings.
🎨 Visual styleguide — a self-contained HTML reference for the whole design system's colors / type / components (open it in a browser).
Keyboard Shortcuts
Shell Integration
Enable working directory tracking and command completion notifications:
Bash (~/.bashrc):
__prompt_command() {
local exit_code=$?
echo -ne "\033]133;D;${exit_code}\007"
echo -ne
-ne
}
PROMPT_COMMAND=
DEBUG
Zsh (~/.zshrc):
precmd() {
local exit_code=$?
print -Pn "\e]133;D;${exit_code}\a"
print -Pn
-Pn
}
() { -Pn }
This enables:
- New tabs inherit working directory from active tab
- System notifications when commands > 5 seconds complete while window is unfocused
Project Structure
Configuration
Settings are stored in ~/.bossterm/settings.json:
Performance Modes
BossTerm offers configurable performance optimization via Settings > Performance:
| Mode | Best For |
|---|
| Balanced (default) | General use - good balance of responsiveness and throughput |
|
Note: For fontName, use a monospace font name installed on your system (e.g., "SF Mono", "Menlo", "JetBrains Mono"). If not set, BossTerm uses the bundled MesloLGS Nerd Font which includes powerline symbols.
Embedding in Your App
BossTerm provides embeddable terminal libraries for Kotlin Multiplatform projects.
Full Documentation: See docs/embedding.md for the complete embedding guide, including custom context menus, focus management, and session persistence.
Gradle Setup
Maven Central (recommended):

repositories {
mavenCentral()
}
dependencies {
implementation("com.risaboss:bossterm-core:<version>")
implementation("com.risaboss:bossterm-compose:<version>")
}
JitPack (alternative):

dependencyResolutionManagement {
repositories {
maven { url = uri("https://jitpack.io") }
}
}
dependencies {
implementation("com.github.kshivang.BossTerm:bossterm-core-mpp:<version>")
implementation("com.github.kshivang.BossTerm:compose-ui:<version>")
}
GitHub Packages (requires authentication):
dependencyResolutionManagement {
repositories {
maven {
url = uri("https://maven.pkg.github.com/kshivang/BossTerm")
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
dependencies {
implementation("com.risaboss:bossterm-core:<version>")
implementation("com.risaboss:bossterm-compose:<version>")
}
Usage
Session Sharing
Watch — or hand over — a live terminal to any device, with no cloud relay and no account.
BossTerm runs the share server itself; viewers open a link (or scan a QR code) in any browser, or
connect from another BossTerm as a native client.
Enable it under Settings → Session Sharing (off by default), then Share from a tab's menu.
Defaults: binds the LAN on port 7677, Cloudflare remote mode, approval required only for public
links.
See docs/session-sharing.md for the full guide — scopes,
remote-access setup, the viewer, the native client, the encryption design, and every setting.
BossTerm MCP
BossTerm ships an in-process Model Context Protocol
server that exposes the running terminal to MCP-aware clients (Claude Code,
Codex, Gemini CLI, OpenCode). Clients can enumerate tabs, read scrollback,
search output, capture the last completed command, and — when write tools
are enabled — drive shells, send signals, open new splits, and run
commands in a visible pane while still capturing stdout/stderr and exit
code (run_command — recommended default shell for AI clients).
- Endpoint:
http://127.0.0.1:7676/ over Server-Sent Events, configurable
via Settings → BossTerm MCP → Port.
Turning it on (as a user)
- Open Settings → BossTerm MCP and toggle Enable BossTerm MCP Server.
A green "BossTerm MCP on" pill appears in the tab bar.
- (Optional) Under Exposed Tools, untick any built-in tool you don't
want clients to call — toggles apply live.
- Under Attach to AI CLI, click the button for each AI CLI you want to
register the endpoint with. Re-attachment is idempotent and happens
silently on subsequent launches.
Using as Claude Code's default shell
run_command is exposed by default and ready for explicit use (e.g. "split and
run X"). To make it Claude Code's default shell — preferred over its built-in
Bash for everything — turn on Settings → BossTerm MCP → "Use run_command
as AI clients' default shell" (off by default). With it on, the server's
initialize-time instructions tell Claude Code to prefer run_command (a soft
nudge that applies to the next client connection).
For a hard guarantee that also takes effect instantly, add the user-global
PreToolUse hook described in
docs/mcp-server.md.
BossTerm writes/deletes the ~/.bossterm/mcp.port marker the moment you flip
the setting, and the hook routes Bash calls to mcp__bossterm__run_command
whenever the marker is present — so toggling the setting turns enforcement on or
off per command, with no Claude restart.
Embedding it (as a developer)
Common knobs on BossTermMcpConfig: toolNamePrefix to namespace built-in
tools, allowWriteTools = false for an observe-only build, additionalTools
to register app-specific MCP tools, and customToolDescriptions to override
descriptions of individual built-ins. The
and
modules demonstrate both hooks.
See docs/mcp-server.md for the full reference —
every built-in tool's JSON schema, the manage_tools meta-tool, the
BossTermMcpConfig field-by-field table, and troubleshooting.
Session Daemon
A tmux-style background process that owns your terminal sessions, MCP server, and shares so they
keep running after you close the GUI — reopen BossTerm and it reattaches to the live sessions. On by
default; turn it off under Settings → Session Daemon to fall back to the pre-daemon behavior
(in-process MCP/sharing, sessions die with the window), a path that's preserved byte-for-byte.
Manage it under Settings → Session Daemon (toggles take effect after restarting BossTerm). The
daemon never stops when you close the GUI — only via Quit daemon, or OS logout.
Technology Stack
- Kotlin - Modern JVM language
- Compose Desktop - Declarative UI framework
- Pty4J - PTY support for local terminal sessions
- ICU4J - Unicode/grapheme cluster support
Command-Line Interface
install.sh installs a bossterm CLI launcher (and a Python helper +
man page) under /usr/local/bin/ or ~/.local/bin/. With no arguments it
launches the GUI; with a positional path it opens that directory.
Beyond launching, the CLI has subcommands that talk to a running BossTerm
through the in-process MCP server:
bossterm
bossterm ~/Projects/foo
bossterm new
bossterm new-tab
bossterm run npm
bossterm run --=h -f
bossterm send $
bossterm logs --lines 50
bossterm attach claude
bossterm mcp status
bossterm mcp on | off
bossterm config
bossterm --
Run man bossterm after installation for the complete reference.
Note on local dev usage: the repo-root ./bossterm is a symlink into
cli-resources/bossterm, so ./bossterm --version works from a clean
git clone. GitHub's "Download ZIP" link does preserve symlinks
(the file materializes as plain text containing the link target). If
you've downloaded a zip rather than cloned, run
directly, or the repo.
Documentation
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
License
BossTerm is dual-licensed under:
You may select either license at your option.
Authors
Shivang — shivang@risalabs.ai
Open Source Origin and History
BossTerm was originally inspired by JediTerm by JetBrains (authored by Dmitry Trofimov dmitry.trofimov@jetbrains.com and Clément Poulain). The initial version of JediTerm was itself a reworked terminal emulator Gritty, which was in its own turn a reworked JCTerm terminal implementation.
BossTerm has since been completely rewritten from the ground up in Kotlin with Compose Desktop — no JediTerm, Gritty, or JCTerm code remains. Everything was rewritten from scratch with a new rendering engine, new buffer implementation, and new UI framework. A lot of new features were added including split panes, inline images, AI assistant integration, custom platform services, and high-performance incremental snapshot rendering.
Acknowledgments
- JediTerm by JetBrains — original inspiration for terminal emulation
- iTerm2 — the beloved macOS terminal, inspiration for many UX features
- Pty4J — PTY library for local terminal sessions
- ICU4J — Unicode and grapheme cluster support
References
Built by Risa Labs Inc