Skip to content

kshivang/BossTerm

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

BossTerm

CI Release Download DMG Maven Central

A modern terminal emulator built with Kotlin and Compose Desktop.

BossTerm is a high-performance terminal emulator designed for developers who want a fast, customizable, and feature-rich terminal experience 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
Benchmark BossTerm vs iTerm2
Raw Throughput (1MB) +43% faster
Raw Throughput (5MB) +24% faster
Raw Throughput (50MB) +3% faster
Variation Selectors +12% faster
CJK Characters +10% faster
Powerline +10% faster
htop Simulation +13% faster
Git Diff Simulation +5% faster
Flags Emoji +3% faster

Full benchmark details: benchmark/README.md | Detailed Results

Installation

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)

# Download the .deb package from GitHub Releases
sudo dpkg -i bossterm_*_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Linux (Fedora/RHEL)

# Download the .rpm package from GitHub Releases
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+:

# Download bossterm-*.jar from GitHub Releases
java -jar bossterm-*.jar

Build from Source

git clone https://github.com/kshivang/BossTerm.git
cd BossTerm
./gradlew :bossterm-app:run

Features

  • Native Performance - Built with Kotlin/Compose Desktop for smooth 60fps rendering
  • Multiple Windows - Cmd/Ctrl+N opens new window, each with independent tabs
  • Multiple Tabs - Ctrl+T new tab, Ctrl+W close, Ctrl+Tab switch
  • Split Panes - Horizontal/vertical splits with Cmd+D / Cmd+Shift+D
  • Themes - Built-in theme presets (Dracula, Solarized, Nord, etc.) with custom theme support
  • Window Transparency - Adjustable opacity with background blur effects
  • Background Images - Custom background images with blur and opacity controls
  • Xterm Emulation - Full VT100/Xterm compatibility
  • True Color - Full 256 color and 24-bit true color support
  • Mouse Reporting - Click, scroll, and drag support for terminal apps (vim, tmux, htop, less, fzf)
  • Full Unicode - Emoji (πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦), variation selectors (☁️), surrogate pairs, combining characters
  • Nerd Fonts - Built-in support for powerline symbols and devicons
  • Inline Images - Display images in terminal via iTerm2's imgcat (OSC 1337)
  • Progress Bar - Visual progress indicator for long-running commands (OSC 1337)
  • Search - Ctrl/Cmd+F to search terminal history with regex support
  • Hyperlink Detection - Auto-detect URLs, file paths, emails with Ctrl+Click to open
  • Copy/Paste - Standard clipboard + copy-on-select + middle-click paste + OSC 52
  • Context Menu - Right-click for Copy, Paste, Clear, Select All
  • Drag & Drop - Drop files onto terminal to paste shell-escaped paths (iTerm2 style)
  • Auto-Scroll Selection - Drag selection beyond bounds to scroll through history
  • IME Support - Full Chinese/Japanese/Korean input method support
  • Visual Bell - Configurable visual flash for BEL character
  • Command Notifications - System notifications when long commands complete (OSC 133)
  • OSC 7 Support - Working directory tracking for new tabs
  • Settings UI - Full GUI settings panel with live preview
  • Debug Tools - Built-in terminal debugging with Ctrl+Shift+D
  • Customizable - JSON-based settings at ~/.bossterm/settings.json

Keyboard Shortcuts

Shortcut Action
Ctrl/Cmd+N New window
Ctrl/Cmd+T New tab
Ctrl/Cmd+W Close tab/pane
Ctrl+Tab Next tab
Ctrl+Shift+Tab Previous tab
Ctrl/Cmd+1-9 Jump to tab
Ctrl/Cmd+D Split pane vertically
Ctrl/Cmd+Shift+D Split pane horizontally
Ctrl/Cmd+Option+Arrow Navigate between panes
Ctrl/Cmd+, Open settings
Ctrl/Cmd+F Search
Ctrl/Cmd+C Copy
Ctrl/Cmd+V Paste
Ctrl+Space Toggle IME

Shell Integration

Enable working directory tracking and command completion notifications:

Bash (~/.bashrc):

# OSC 7 (directory tracking) + OSC 133 (command notifications)
__prompt_command() {
    local exit_code=$?
    echo -ne "\033]133;D;${exit_code}\007"  # Command finished
    echo -ne "\033]133;A\007"                # Prompt starting
    echo -ne "\033]7;file://${HOSTNAME}${PWD}\007"  # Working directory
}
PROMPT_COMMAND='__prompt_command'
trap 'echo -ne "\033]133;B\007"' DEBUG  # Command starting

Zsh (~/.zshrc):

# OSC 7 (directory tracking) + OSC 133 (command notifications)
precmd() {
    local exit_code=$?
    print -Pn "\e]133;D;${exit_code}\a"      # Command finished
    print -Pn "\e]133;A\a"                   # Prompt starting
    print -Pn "\e]7;file://${HOST}${PWD}\a"  # Working directory
}
preexec() { print -Pn "\e]133;B\a" }         # Command starting

This enables:

  • New tabs inherit working directory from active tab
  • System notifications when commands > 5 seconds complete while window is unfocused

Project Structure

BossTerm/
β”œβ”€β”€ bossterm-core-mpp/     # Core terminal emulation library
β”‚   └── src/jvmMain/kotlin/ai/rever/bossterm/
β”‚       β”œβ”€β”€ core/          # Core utilities and types
β”‚       └── terminal/      # Terminal emulator implementation
β”œβ”€β”€ compose-ui/            # Compose Desktop UI library (embeddable)
β”‚   └── src/desktopMain/kotlin/ai/rever/bossterm/compose/
β”‚       β”œβ”€β”€ ui/            # Main terminal composable (ProperTerminal)
β”‚       β”œβ”€β”€ terminal/      # Terminal data stream handling
β”‚       β”œβ”€β”€ input/         # Mouse/keyboard input handling
β”‚       β”œβ”€β”€ rendering/     # Canvas rendering engine
β”‚       β”œβ”€β”€ tabs/          # Tab management
β”‚       β”œβ”€β”€ window/        # Window management (WindowManager)
β”‚       β”œβ”€β”€ search/        # Search functionality
β”‚       β”œβ”€β”€ debug/         # Debug tools
β”‚       └── settings/      # Settings management
β”œβ”€β”€ bossterm-app/          # Main BossTerm application
β”‚   └── src/desktopMain/kotlin/ai/rever/bossterm/app/
β”‚       └── Main.kt        # Application entry point
β”œβ”€β”€ embedded-example/      # Example: single terminal embedding
β”œβ”€β”€ tabbed-example/        # Example: tabbed terminal embedding
└── .github/workflows/     # CI configuration

Configuration

Settings are stored in ~/.bossterm/settings.json:

{
  "fontSize": 14,
  "fontName": "JetBrains Mono",
  "copyOnSelect": true,
  "pasteOnMiddleClick": true,
  "scrollbackLines": 10000,
  "cursorBlinkRate": 500,
  "enableMouseReporting": true,
  "performanceMode": "balanced",
  "notifyOnCommandComplete": true,
  "notifyMinDurationSeconds": 5
}

Performance Modes

BossTerm offers configurable performance optimization via Settings > Performance:

Mode Best For
Balanced (default) General use - good balance of responsiveness and throughput
Latency SSH, vim, interactive commands - fastest response time
Throughput Build logs, large files - maximum data processing speed

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):

Maven Central

// build.gradle.kts
repositories {
    mavenCentral()
}

dependencies {
    // Core terminal emulation engine
    implementation("com.risaboss:bossterm-core:<version>")

    // Compose Desktop UI component
    implementation("com.risaboss:bossterm-compose:<version>")
}

JitPack (alternative):

JitPack

// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        maven { url = uri("https://jitpack.io") }
    }
}

// build.gradle.kts
dependencies {
    implementation("com.github.kshivang.BossTerm:bossterm-core-mpp:<version>")
    implementation("com.github.kshivang.BossTerm:compose-ui:<version>")
}

GitHub Packages (requires authentication):

// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/kshivang/BossTerm")
            credentials {
                username = System.getenv("GITHUB_ACTOR")
                password = System.getenv("GITHUB_TOKEN")
            }
        }
    }
}

// build.gradle.kts
dependencies {
    implementation("com.risaboss:bossterm-core:<version>")
    implementation("com.risaboss:bossterm-compose:<version>")
}

Usage

import ai.rever.bossterm.compose.EmbeddableTerminal
import ai.rever.bossterm.compose.rememberEmbeddableTerminalState

@Composable
fun MyApp() {
    // Basic usage - uses default settings from ~/.bossterm/settings.json
    EmbeddableTerminal()

    // With custom settings path
    EmbeddableTerminal(settingsPath = "/path/to/settings.json")

    // With custom font (via settings)
    EmbeddableTerminal(settings = TerminalSettings(fontName = "JetBrains Mono"))

    // With callbacks
    EmbeddableTerminal(
        onOutput = { output -> println(output) },
        onTitleChange = { title -> window.title = title },
        onExit = { code -> println("Shell exited: $code") },
        onReady = { println("Terminal ready!") }
    )

    // Programmatic control
    val state = rememberEmbeddableTerminalState()

    Button(onClick = { state.write("ls -la\n") }) {
        Text("Run ls")
    }

    // Send control signals (useful for interrupting processes)
    Button(onClick = { state.sendCtrlC() }) {
        Text("Stop (Ctrl+C)")
    }

    EmbeddableTerminal(state = state)

    // Session preservation across navigation/visibility changes
    val persistentState = rememberEmbeddableTerminalState(autoDispose = false)

    if (showTerminal) {
        EmbeddableTerminal(state = persistentState)
    }
    // Terminal process keeps running even when hidden!

    // Don't forget to dispose when truly done:
    DisposableEffect(Unit) {
        onDispose { persistentState.dispose() }
    }
}

Technology Stack

  • Kotlin - Modern JVM language
  • Compose Desktop - Declarative UI framework
  • Pty4J - PTY support for local terminal sessions
  • ICU4J - Unicode/grapheme cluster support

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.

Acknowledgments

BossTerm is a fork of JediTerm by JetBrains, completely rewritten with Kotlin and Compose Desktop.

Inspired by iTerm2, the beloved macOS terminal.


Built by Risa Labs Inc

About

Pure Kotlin Terminal Emulator. Works with SSH and PTY.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • Kotlin 91.9%
  • Python 5.2%
  • Shell 2.9%