Skip to main content
otter-term is Otter Shell’s built-in terminal emulator. It embeds Ghostty’s ghostty-vt core in a static libotter_vt library. Otter libraries handle Wayland windows, PTYs, input, rendering, configuration, and the clipboard. The terminal supports tabs, horizontal and vertical splits, OSC shell integration, and IME input. It requires neither X11 nor an installed libghostty-vt library.

Launching

Pass a directory path to open there, or use -e to run a command instead of your default shell.
--cwd and --working-directory also accept the --cwd=PATH form.

Features

Tabs

Multiple terminal tabs in one window. Close buttons appear per tab and hide when only one tab remains.

Split Panes

Split any tab horizontally or vertically. Each pane has its own focus, resizes independently, and closes without affecting the others.

Shell Integration

OSC 7 tracks the current working directory so new tabs and splits open in the right place. OSC 133 reports command status, shown with the directory at the right of the tab strip, and can capture command output for the context menu.

URL Handling

OSC 8 hyperlinks and detected http://, https://, and www. URLs are underlined on hover and opened with a configurable command (default: xdg-open).

IME Support

Full zwp_text_input_v3 support with preedit text display and candidate-window positioning at the terminal cursor.

Clipboard

Copy with Ctrl+Shift+C and paste with Ctrl+Shift+V. Primary selection and a right-click context menu are also supported. Programs can write to the clipboard with OSC 52 when general_allow_clipboard_write is on.

Scrollback

Configurable scrollback. Idle panes compress history so big buffers cost less memory.

Program status

Programs report working, blocked, done, or error state with OSC 7501. Tab labels and the window title show the state and progress. OSC 9;4 progress works as a fallback.

Kitty images

Kitty graphics protocol images, including parent-linked placements and Unicode placeholders. Overlapping transparent images composite in placement order.

Configuration

otter-term reads ~/.config/otter-shell/otter-term.conf, then /etc/otter-shell/otter-term.conf, then compiled defaults. On startup it normalizes your file, adding missing defaults and removing unknown keys. The file hot-reloads whenever you save it. Font, colors, padding, and grid size update without restarting the terminal. The Terminal tab in otter-settings edits the same keys. Terminal chrome (tab strip, split rules, status pills, visual bell) follows theme.conf and its profile, and hot-reloads when you save it.
general_shell = "" uses $SHELL, falling back to /bin/sh if unset. The default general_term value xterm-256color works best for remote hosts over SSH. Only set it to xterm-ghostty when the target host has that terminfo entry installed.
Set shell_capture_output = true to enable OSC 133 command-output capture. The right-click context menu then gets a Copy Last Output action that copies the full output of the most recent command. Off by default to keep large command output off the hot PTY path.
general_allow_clipboard_write controls OSC 52 and iTerm2 clipboard writes from programs. Writes larger than general_clipboard_write_max_bytes are rejected.

Color palette

Cell colors come from colors_* keys in otter-term.conf: foreground, background, cursor, selection_background, url_foreground, and the 16 ANSI colors (black through bright_white). Defaults give a complete palette. Palette changes hot-reload on save. Theme profiles do not change the terminal palette. When generated colors are enabled, otter-theme-gen supplies the terminal colors through its otter_term template.

Keyboard shortcuts

Change the copy and paste shortcuts with keybinds_copy and keybinds_paste. The right-click menu also has Copy URL, Copy Path, Copy Last Output, Close Tab/Split, Clear, Clear Scrollback, and Reset.