Skip to content

Customization

TermBeam ships with a single discoverable entry point — the Tools panel — that surfaces every action, opens the Settings, edits the Touch Bar, and manages Workspaces. All preferences sync server-side so the same setup follows you between phone, tablet and laptop.

Open the panel from the floating ▦ button in the top-right corner, with Ctrl+K / Cmd+K, or by tapping the Tools entry on the Sessions Hub. On mobile it slides up from the bottom; on desktop it docks to the right (~420 px wide). It is non-blocking — the terminal stays visible underneath so you can see live changes.

The panel is grouped into seven categorized sections:

SectionHighlights
SESSIONNew tab, Find in terminal, Rename session, Close session
FILESBrowse files, Upload files, Download file, View markdown
VIEWIncrease / Decrease font size, Preview port, View code, Git changes, Theme picker (inline)
SHARECopy link (auto-login URL with token)
AGENTSLaunch agent, Resume agent session
SETTINGSOpen the Settings panel
SYSTEMRefresh (clear PWA cache), Clear terminal, About

The Theme picker is rendered inline inside the VIEW section — tap the trigger to flip through 38 themes with a live colour-bar preview. Pick a theme and the picker auto-closes.

Reach Settings from the Tools panel → Settings… (or via Cmd+, / Ctrl+,). The panel is non-blocking so theme, font and haptics changes are visible against the terminal as you make them.

SectionWhat it controls
AppearanceTheme picker (live preview cards) and font-size slider.
Notifications & FeedbackBrowser notifications when a backgrounded command completes, haptic feedback on TouchBar key presses, and a Splash screen toggle to skip the cold-load brand animation.
Touch BarToggle “Start collapsed by default” and open the Customize keys editor.
New Session DefaultsDefault folder and default initial command pre-fills used by + New session and by workspace sessions when they don’t override.
WorkspacesList of named workspaces. Mark one as the default startup workspace, edit per-workspace sessions, drag to reorder.

All of the above is persisted to ~/.termbeam/prefs.json (mode 0o600) on the server. The browser keeps a localStorage cache (termbeam-prefs) for instant first paint and offline UX, but the server file is the source of truth.

Open Settings → Touch Bar → Customize keys to enter the key editor. The Touch Bar is a dynamic 1–3 row grid with 8 columns; the visible height of the bar follows the row count exactly (a 3-row bar is taller than a 2-row bar) so you always see what you customized.

  • Grid: 8 columns × up to 3 rows. The editor refuses to add a 4th row — the bar wouldn’t fit comfortably above a mobile keyboard.
  • Cell size: every key is 1 column wide by default; flag a key as size-2 (e.g. ↵ Enter) to span two columns.
  • Drag to reorder: drag a slotted key onto another slot to swap, or onto an empty slot to move. The editor renders the same 8-col grid as production so what you see is exactly what ships to the bar.
  • Empty rows are removed automatically — delete the last key in a row and the row collapses, the bar shrinks, and the live Touch Bar follows.
  • Reset restores the default 12-key layout (Esc, Copy, Paste, Home, End, ↑, ↵×2, Ctrl, Shift, Tab, ^C).

Each key has a label, an optional 2-column size, an optional color, and one of the following payloads:

TypeFieldWhat it does
TextsendWrites a literal string to the PTY when pressed (e.g. \u001b for Esc, \r for Enter, plain text for shortcuts). Pick from a small set of common escape sequences in the picker, or type your own.
ActionactionRuns a built-in client action — copy, paste, clear, find, etc. — without sending bytes to the PTY.
ModifiermodifierLatches a Ctrl / Shift / Alt / Meta modifier. The next key press combines with it (so Ctrl + C still sends ^C). Modifiers visibly highlight when latched.
  • Size 2 keys span two grid columns. Use this for the most-pressed key (Enter is 2-wide by default). The editor previews the actual width so you can tell at a glance whether your row will fit.
  • Style can be plain (default) or accent (a coloured highlight — Enter uses this).
  • Custom color overrides the accent for a single key (handy for “danger” keys like ^C).

A workspace is a named bundle of sessions you want to spin up together. Each session in a workspace stores its own:

  • name — human-readable label
  • cwd — working directory (absolute path; falls back to the server CWD if missing on this host)
  • shell — full shell path (validated against the host’s detected shells; falls back to the runtime default if it doesn’t exist on the current machine)
  • color — accent color shown in tabs and the Sessions Hub
  • initialCommand — a string written to the shell after spawn (capped at 8192 characters)

Default workspace and server-side autoboot

Section titled “Default workspace and server-side autoboot”

Mark one workspace as the default and TermBeam’s server reads the prefs at startup and spawns those sessions itself, before any client connects. This has two important consequences:

  • Multi-device parity — open TermBeam on your phone, tablet or laptop and you land on the same set of running sessions, every time.
  • Sticky deletes — closing a session in the UI stays closed until the next service restart. The server doesn’t re-spawn workspace sessions on every page reload, only on its own restart. (The previous client-side autoboot used to re-spawn on every browser refresh, which was confusing.)

If you only have one named workspace it is treated as the implicit default — no need to flag it. The legacy single startupWorkspace from older versions is still honoured when no named workspace exists.

If a workspace session can’t spawn (missing shell after a host migration, deleted directory, …) the server logs a warning, keeps spawning the rest, and reports Spawned X/N workspace session(s) in the log. If every workspace session fails, the server falls back to a single default session in config.cwd so you always land on something interactive.

In Settings → Workspaces you can:

  • Save current — snapshot the currently running sessions into a new workspace.
  • Edit — rename the workspace, edit each session’s name / cwd / shell / color / initial command, drag to reorder, remove individual entries.
  • Set default — toggle which workspace auto-spawns at server start.
  • Delete — remove a workspace (does not affect any currently running sessions).
StorageContents
~/.termbeam/prefs.json (server)Source of truth for all preferences (theme, fonts, defaults, touch-bar keys, workspaces). Written via authenticated PUT /api/preferences.
localStorage termbeam-prefs (browser)Instant-first-paint cache. Replaced on hydrate by the authoritative server copy.
localStorage termbeam-tab-order (browser)Saved tab order (JSON array of session IDs).
localStorage termbeam-hub-filter (browser)Last-used filter on the SessionsHub page.
localStorage termbeam-push-subscribed (browser)Whether the browser is subscribed to push notifications.

The schema is roughly:

{
"themeId": "one-dark",
"fontSize": 13,
"notifications": false,
"haptics": true,
"showSplash": true,
"defaultFolder": "",
"defaultInitialCommand": "",
"touchBarCollapsed": true,
"touchBarKeys": [
{ "id": "esc", "label": "Esc", "send": "\u001b", "row": 1, "col": 1 },
{ "id": "enter", "label": "", "send": "\r", "size": 2, "row": 1, "col": 7, "style": "accent" },
],
"workspaces": [
{
"name": "DevWorkspace",
"default": true,
"sessions": [
{
"name": "server",
"cwd": "/path/to/repo",
"shell": "/bin/zsh",
"color": "#4a9eff",
"initialCommand": "npm run dev",
},
],
},
],
"startupWorkspace": { "enabled": false, "sessions": [] }, // legacy, still honoured
}
  • Configuration — CLI flags, environment variables, defaults
  • Usage Guide — terminal navigation, file browser, port preview, themes
  • API ReferenceGET / PUT /api/preferences, POST /api/sessions