botttle
An agentic development environment — a terminal workspace with tabs and panes, built in Rust on GPUI.
botttle is a GPU-rendered terminal you can split and tab like an editor, built to grow into a place where agents work next to you rather than in a separate window.
The terminal comes first, because everything an agent does in a development loop — running builds, reading logs, driving tools — already happens in one. The pane tree, tab model, and event plumbing are the parts that outlive the terminal.
Early. What works today:
- Real PTYs — each pane runs your login shell through a full ANSI emulator
(
alacritty_terminal), with 24-bit color, text attributes, and 10k lines of scrollback. - Tabs, each holding its own pane layout.
- Splittable panes — split right or down, any depth; splitting along an axis a pane already lives on adds a sibling instead of nesting.
- Mouse selection (click, double-click for words, triple-click for lines), copy and paste, scrollback via the wheel, live font resizing.
- A focused pane is marked by its border, so you can see where input will land.
- 12 themes — six families in light and dark — and a settings screen.
- Window title tracking (OSC 0/2), clipboard escapes (OSC 52), and color queries.
Not there yet: IME composition, drag-to-resize splits, search, and the agent layer itself.
Botttle, Gruvbox, One, Cursor, OpenCode, and VS Code, each in a light and a dark variant. Gruvbox, One, and VS Code use those projects' published terminal palettes; Cursor and OpenCode are approximations matched by eye.
⌘, (or ctrl+shift+,) opens the settings screen, and every change is written
straight to ~/.config/botttle/settings.json:
- Appearance — theme, and a background override that replaces the window and terminal grounds while leaving the chrome readable.
- Typography — terminal and interface font families (the terminal list is filtered to likely monospace families, with a toggle to show every installed one), sizes, line height, and ligatures.
- Terminal — cursor shape (block, bar, underline) and scrollback depth.
The file is plain JSON and can be edited by hand; unknown or missing keys fall back to defaults.
cargo run --releaseRequires a recent stable Rust toolchain. On Linux, GPUI needs the usual Wayland or X11 development packages.
⌘ on macOS; ctrl+shift elsewhere.
| Chord | Action |
|---|---|
⌘T |
New tab |
⌘W |
Close pane (closes the tab with the last pane) |
⌘⇧W |
Close tab |
⌘D / ⌘⇧D |
Split right / split down |
⌘] / ⌘[ |
Focus next / previous pane |
⌘⇧] / ⌘⇧[ |
Next / previous tab |
⌘C / ⌘V |
Copy selection / paste |
⌘K |
Clear |
⌘= / ⌘- / ⌘0 |
Font size |
⌘, |
Settings (esc closes) |
Everything else goes to the shell untouched, including bare ctrl chords.
crates/botttle
├── main.rs window setup and app wiring
├── workspace.rs root view: tab strip, status bar, actions
├── pane.rs the pane tree (split, close, collapse, render)
├── actions.rs actions and their default key bindings
├── settings.rs user settings, persisted as JSON
├── settings_view.rs the settings screen
├── theme/ the resolved look: palettes, fonts, sizing
└── terminal/
├── mod.rs PTY + emulator, and the bridge to the main thread
├── view.rs grid rendering, keyboard, mouse, selection
├── keys.rs keystrokes to terminal byte sequences
└── color.rs ANSI colors to gpui colors
MIT — see LICENSE.
