Project Overview
Tabz is a tab-based terminal interface that pioneered the concept of organized, multi-terminal workflows in a single window. Supporting 15 terminal types out of the box — from Claude Code to LazyGit to custom shells — Tabz proved that developers benefit from terminal specialization.
Built as a desktop application with React, Vite, and xterm.js, Tabz featured a dual context menu system (separate menus for tabs and panes), tmux window switching, and full keyboard shortcuts with Alt+key bindings that avoid conflicting with terminal Ctrl sequences.
This was the prototype that led directly to TabzChrome — the leap from desktop app to Chrome extension.
By the Numbers
Tech Stack
Frontend
- React 18
- TypeScript
- Vite (dev + build)
- xterm.js
- Zustand (state)
Backend
- Node.js + Express
- node-pty (PTY)
- WebSocket streams
- tmux integration
Features
- 15 terminal types
- Dual context menus
- Alt+key shortcuts
- gg-hub integration
- Claude status detection
Architecture
Key Features
15 Terminal Types
Claude Code, Bash, Zsh, Fish, TFE, LazyGit, Btop, Midnight Commander, Vim, Python REPL, Node REPL, Ranger, Ncdu, Tmux, and Custom terminals.
Dual Context Menus
Separate right-click menus for tabs (rename, duplicate, close, move) and panes (split, resize, swap, terminal type). Context-aware actions everywhere.
tmux Window Switcher
Switch between tmux windows and sessions directly from the Tabz UI. No need to reach for Ctrl+B — it is all in the tab bar.
Alt+Key Shortcuts
Full keyboard shortcut system using Alt+key bindings. No Ctrl+B prefix conflicts with terminal applications. Fast navigation between tabs and panes.
gg-hub Integration
Connected to the gg-hub ecosystem for project management, terminal orchestration, and workflow automation across development tools.
Claude Status Detection
Automatic detection of Claude Code session status in terminal panes. Visual indicators show when Claude is thinking, writing, or idle.
Reflections
Tabz was the prototype that became TabzChrome. Building it taught the fundamentals of xterm.js rendering, PTY management with node-pty, and WebSocket terminal streaming. The dual context menu pattern and Alt+key shortcut system were design decisions that carried forward.
The key insight was the desktop app to Chrome extension pivot. Tabz worked great as a standalone application, but developers spend their time in the browser. Moving terminals into Chrome's sidebar eliminated the context switch entirely — and that is what made TabzChrome take off.