Web Session Terminal v0.4.2

Close the tab.
Your shell keeps running.

westerm is a web terminal whose sessions survive closing the window, restarting the program, and rebooting. Tabs, split panes, and workspaces, in your browser or a desktop app for macOS, Windows, and Linux.

curl -fsSL https://westerm.app/install.sh | sh

Then run westerm and open http://127.0.0.1:4317.

Sessions that survive

Three ways to lose a terminal. None of them work here.

127.0.0.1:4317
api
Shell pid 48213
Tab closed
The shell is still running · pid 48213
Opening 127.0.0.1:4317 again…
Starting westerm…
Rebooting…

This loop prints the time every second. Try to stop it.

Close the tab

A background PTY host keeps every shell running. Open the page again and pick up where you left off.

The same process

Restart westerm

The dashboard and the shells run apart. Start westerm again and the page reconnects to the same shells.

The same process

Reboot

westerm saves each screen and folder. After a reboot, every session comes back in its folder, marked “restored”. A Claude Code, Codex, or Gemini CLI conversation resumes too.

A new shell, the same screen and folder

AI agents

Reboot. Your agent picks up the conversation.

westerm sees Claude Code, Codex, and Gemini CLI in your shells. A ring around the AI mark shows what each one is doing. After a reboot, the restored shell runs the agent's resume command for you.

  • WorkingBlue ring, turning
  • Needs your inputYellow ring, pulsing: a permission, an approval, or a question
  • DoneGreen ring: it finished while you looked away
  • IdleGray ring
Claude Code
claude --resume <id>with the flags it had
Codex
codex resume --lastthe folder's newest conversation
Gemini CLI
gemini --resume <id>or the folder's latest, when the id is not known

macOS and Linux. Settings ▸ Terminal ▸ Resume AI agents turns resuming off.

Agents sidebar

Every agent in the workspace, by folder.

The Agents button at the top of the activity bar opens it. A yellow dot on the button means an agent needs your input.

  • Each folder shows its git branch and shells. Each agent shows its state and for how long.
  • Start here opens a shell in that folder and starts Claude Code, Codex, or Gemini CLI.
  • Resume continues one of the folder's last five conversations.

One tab, everything

A shell, a browser, and an editor, side by side.

terminal-browser plays a video, a shell runs neofetch, and terminal-code edits the README, all split in one tab.

westerm: terminal-browser, a shell, and terminal-code split in one tab

Features

Built for work that runs for days.

Tabs and split panes

Drag a pane onto an edge to split, or onto the center to swap. Layouts are saved per tab.

Workspaces

A set of tabs per project, each with a color and an icon. The workspaces out of view keep running.

Remote windows

Open a Linux server's westerm in its own window, over QUIC or an SSH tunnel. A lost network ends nothing.

terminal-browser and terminal-code

Launch a web browser and a code editor that run in the terminal, next to your shells and SSH hosts. On Windows they run in WSL.

Docs pane

Read and edit a folder's Markdown files in View, Edit, or Split mode. The pane can follow your shell's cd.

Command palette

⌘K or Ctrl+Shift+K launches, switches, renames, and moves anything. Type a URL to open it.

Themes, fonts, and languages

Ten color themes with light and dark sets. Pick terminal fonts from the ones installed on your computer. The UI speaks English, 한국어, 日本語, and 简体中文.

One binary, or a desktop app

A single Rust executable with the UI inside, for macOS, Linux, and Windows. Get it with a script, npm, or Cargo. The desktop app puts the same dashboard in its own window.

How it works

The shells live apart from the window.

The page you see is only a view. A background PTY host owns every shell, so the view can come and go.

Local only

The server listens on 127.0.0.1 only. Only the dashboard's own origin can open shells or change the layout.

  1. 1
    Browser or the desktop appReact + wterm, drawn by the Ghostty WASM core
    can close
  2. WebSocket
  3. 2
    Dashboardwesterm on 127.0.0.1:4317, UI inside
    can restart
  4. Unix socket · named pipe
  5. 3
    PTY hostwesterm host runs the shells, saves screens and folders, and watches AI agents
    keeps running
  6. PTY · ConPTY
  7. 4
    Your programsshell, ssh, claude, codex, gemini, terminal-browser, tode

Install

Up and running in a minute.

Install script

macOS · Linux

curl -fsSL https://westerm.app/install.sh | sh

Windows (PowerShell)

irm https://westerm.app/install.ps1 | iex

The script picks the build for your OS and CPU, checks its SHA-256, and installs it to ~/.local/bin (Windows: %LOCALAPPDATA%\Programs\westerm).

npm and Cargo

npm (Node.js 22 or later)

npm install -g @pistacrab/westerm

The package has the release executables for every platform. No compiler or install script runs. Or run it once with npx @pistacrab/westerm.

Cargo

cargo install westerm --locked

Windows: Cargo does not include Microsoft's ConPTY, which terminal-browser images need. Use npm or the script there.

Desktop app

The same dashboard in its own window. If a westerm already runs on port 4317, the app opens that one. Quitting the app keeps your shells running.

SystemFile
macOSwesterm-macos-app.dmg
Windows x64westerm-windows-app-setup.exe
Linux x64.deb · .rpm
Linux arm64.deb · .rpm

macOS: the app is not notarized yet, so allow its first open once:

xattr -dr com.apple.quarantine /Applications/westerm.app

Windows: SmartScreen may ask once. Choose More info ▸ Run anyway.

Commands

westerm
Start westerm, then open http://127.0.0.1:4317
westerm stop
Save every session and stop
westerm update
Install the newest release
westerm --port 4318
Use another port

All install options, and building from source

Keep your terminals. Close everything else.