Skip to content

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

botttle

botttle

An agentic development environment — a terminal workspace with tabs and panes, built in Rust on GPUI.


What this is

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.

Status

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.

Themes

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.

Settings

⌘, (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.

Running it

cargo run --release

Requires a recent stable Rust toolchain. On Linux, GPUI needs the usual Wayland or X11 development packages.

Keys

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.

Layout

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

License

MIT — see LICENSE.

About

A self hosted client portal for freelancers to manage projects, clients, and payments in one place.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages