PyQt6 · QTermWidget · plugin-driven

Tile your terminal. Then automate it.

QTerminator brings the beloved split-and-tile workflow of Terminator to a fast, Qt-native terminal. Arrange panes however you think — recursive splits, tabs, groups, broadcast input — then extend it with dozens of built-in plugins. It even speaks to AI coding agents over a local socket and MCP.

A Qt port of Terminator · ~40 built-in plugins · ~1,400 tests · GPL-3.0 · 6 languages

Split & tile

Recursive horizontal and vertical splits with nesting, a full tab bar, named groups, and broadcast input — type once and reach every pane in a group at once.

A plugin for everything

Around forty built-in plugins — recording, telemetry, triggers, snippets, instant replay, smart clipboard and more — plus clean hooks for dropping in your own.

Built for AI agents

A local agent-control socket and an MCP server let tools like Claude Code introspect tabs, inject input, and read the rendered screen — same-user-only by design.

Arrange it your way

The layout in your head, on your screen

Terminator's tiling philosophy, rebuilt on a modern Qt stack — with the conveniences power users keep asking for.

  • Tile
    Splits, tabs & groups

    Recursive horizontal/vertical splits, a tab bar with rename/reorder/close, named terminal groups, broadcast-to-group or broadcast-to-all input, and a read-only lock to prevent stray keystrokes.

  • Theme
    Profiles & live theming

    Named profiles (font, color scheme from 13 built-ins, cursor, scrollback) you switch and cycle per terminal — and auto_profile can turn a prod host red automatically.

  • Bind
    50+ rebindable shortcuts

    Every common operation has a keyboard shortcut, all rebindable from a searchable, category-grouped Preferences dialog.

  • Persist
    Layouts & sessions that survive restarts

    Splits and tabs are saved as TOML and restored on launch; optional tmux-backed sessions keep your running processes alive across restarts entirely.

Drive it with AI

QTerminator exposes a local Unix-socket JSON-RPC surface — and a matching qterminator-mcp server — so an agent can list tabs, inject input, tail the PTY, and snapshot the rendered screen. An event channel pushes command-finished, trigger-match, and cwd-changed events instead of polling.

Access is same-UID-only, and shell integration parses OSC 133/7/8 (the same sequences kitty, iTerm2 and starship use) into structured per-command history.

Share your session

Hand off a live tmux-backed terminal three ways: over mosh, through a local SSH server, or straight to a browser over WebSocket.

The browser bind is secured with Ed25519 challenge-response auth and timing-safe verification — read-only or read-write, your call — and stays loopback-bound by default.

~40 built-in plugins

Batteries very much included

Plugins hook into URL handling, context menus, and an output watcher backed by a shared pyte screen — so each one sees a consistent view of the grid at near-zero idle cost. A taste of what ships in the box:

command_telemetryper-command duration, CPU, peak memory
instant_replayscrub backward through history
asciinema_recordper-tab session recording
triggersregex → notify / color / run / capture
snippetsnamed text with placeholder prompts
smart_clipboardpaste-escaping, copy as path/markdown
badgeslive click-through metadata overlay
hotkey_windowQuake-style dropdown terminal
modalvim-like normal/insert keybindings
tmux_web_sharebrowser access with Ed25519 auth
workspace_switcherfuzzy-find projects, open in tabs
undo_closerestore a recently closed tab

…plus logger, screenshot, PDF/HTML export, print, text transforms, process control, scheduler, notifications, file & output monitors, stacked panes, pattern links, paste history, timestamps, dynamic profiles and more — and your own drop into a config directory.

Under the hood

Real VT emulation, modern stack

PyQt6modern Qt6, HiDPI & Wayland
QTermWidget 6real C++ VT emulation
Vendored SIP bindingsbuilds from source, one command
pyte shadow screenshared grid view for plugins
MCP serverone-line agent integration
~1,400 testspytest + pytest-qt, headless

Packaged for openSUSE, Ubuntu/Debian and Fedora with a desktop file, AppStream metadata, icons and man pages, and translated into Czech, German, French, Japanese, Russian and Simplified Chinese. Requires Python 3.10+, PyQt6 6.5+, and QTermWidget 6.

Get QTerminator

QTerminator is early (v0.1) but substantial, with a deep feature set and a large automated test suite. The vendored bindings build from source in one step.

git clone https://codeberg.org/qterminator/qterminator
cd qterminator
# Requires Python 3.10+, PyQt6 6.5+, QTermWidget 6 + Python bindings
just run

From the blog