Changelog
Release notes for every public Terminal Graph beta. The newest build
is always listed first. The
Sparkle beta feed only retains the
most recent few releases — this page is the durable history.
New
- Hold space to pan — Hold the spacebar and drag to pan the canvas, Figma-style. The cursor turns into a hand while you pan. (Space still types normally when you're focused in a terminal, editor, or note.)
Fixed
- Node focus — Deselecting a node now actually releases its focus instead of leaving it quietly capturing keyboard input, and clicking a node again reliably re-focuses it.
New
- Drag and drop images — Drop an image onto a terminal to feed it straight into the shell (handy for handing an image to Claude Code), or onto the canvas to create an image node. Images dragged from browsers, Slack, or the macOS screenshot thumbnail work even when there's no file on disk, and a highlight shows where the drop will land.
Fixed
- Open Anyway & permissions — Unsigned builds are now self-signed with a stable identity, so the "Open Anyway" prompt is available on download and macOS permission grants (folder access, microphone, notifications) persist across updates instead of resetting each time.
- Save on quit — Quitting with
⌘Q now reliably saves every open window's layout and working directories, instead of leaning on the periodic autosave.
- Editor restores your place — Reopened editor nodes return to your last cursor position, scroll offset, and code folding.
New
- MCP: target any window — Agents can now address a specific open window by id or project path.
list_workspaces reports every open window and which one is focused; previously every call hit the active window.
- MCP: region screenshots —
capture_canvas accepts an optional bounding box, so an agent can screenshot a specific canvas region — even off-screen — without panning.
Fixed
- Browser URLs — Browser nodes now load
data:, mailto:, file:, and other non-http schemes correctly instead of leaving a blank page.
- MCP argument handling — Structured workflow/group arguments, browser
url values, and data: URLs are no longer silently dropped, and malformed workflow connections now return a clear error.
New
- Terminal Alerts — Terminals can now flag when they need your attention: when a command fails, or when a long-running command finishes. The sidebar dot and minimap ring light up for the terminal that needs you, and clicking jumps straight to it. Toggle alerts per-terminal from the right-click menu, or set defaults in Settings → General.
- Jump from the minimap — Click any node in the minimap to focus and pan to it.
Fixed
- Account sign-in — Credentials now live in a config file instead of the macOS Keychain, so signing in no longer triggers repeated password prompts on launch or after each update. You'll sign in once more after updating.
Fixes
- The minimap centers your canvas. The scaled-down overview sat in one corner with empty space around it instead of filling the minimap area — hard to read on large graphs.
- Panning works on large displays. On big monitors you couldn't scroll along one axis: the margin around your content was a fixed size, and when that was smaller than the screen there was nothing left to pan to. The margin now scales with your viewport.
- Terminal nodes close reliably. Deletion no longer round-trips through Ghostty's close callback, which could leave a node — most often an ephemeral hook terminal — undeletable when the callback didn't fire.
Utility Nodes
Nine new dataflow nodes for building pipelines without writing code:
- Run — execute a command per input signal
- Collect — accumulate stream data into a single signal (bridge stream→signal)
- Gate — open/close valve that passes or blocks signals
- Delay — queue, debounce, or throttle signals
- Template — string interpolation with
{{mustache}} placeholders
- Switch — route signals to different outputs based on content matching
- Webhook — receive HTTP requests as signals
- Trigger — manual or interval-based signal source
- File Watcher — emit signals on file changes
All nine are available from the context menu, via MCP, and as blueprint-capturable nodes.
Terminal Notifications
New terminalgraph notify CLI command. Send macOS notifications from any terminal node:
terminalgraph notify --title "Build" "deploy complete"
MCP Improvements
- Improved server reliability — fewer timeouts and stalls under load
- Fixed node type serialization so
switch and file_watcher round-trip correctly
- Fixed JSON output to preserve forward slashes in paths and URLs
Other
- Added Terms of Service, Acceptable Use Policy, and updated Privacy Policy
- Updated documentation for Bezier connections, waypoints, stream fanout, and utility nodes
New
- Bezier connections — Wires between nodes now render as smooth S-curves instead of straight lines. Double-click a wire in wiring mode to add a reroute waypoint, then drag it to shape the path. Right-click a waypoint to remove it.
Fixed
- Stream fanout — Connecting one output port to multiple inputs now delivers data to all targets. Previously only one connection would receive each chunk.
- Group worktree cleanup — Closing a group with
Cmd+W during multi-select now prompts for worktree cleanup instead of orphaning git worktrees on disk.
- Config data loss — Fixed a race where settings could be overwritten with defaults if the app saved config before it finished loading from disk.
Fixed
- Auto-save — Canvas state now saves automatically as you work instead of only on quit. Force-quit or crash no longer loses your layout.
- Unbound windows — Windows opened without a project folder now save and restore their state across sessions.
Fixed
- Snapping near groups — Moving nodes near split-tree groups no longer snaps to individual group members. Groups snap as a single unit.
New
- MCP server — AI agents can control Terminal Graph over a localhost MCP server. Create, inspect, and manage nodes, connections, and groups programmatically.
- Accounts — Sign in with your internet.dev account, and help support development.
- Theming — Customize your workspace with TOML-based themes. Pick from built-in options or create your own in Settings (
Cmd+,).
Fixed
- Terminal duplication — Duplicating a terminal via right-click now copies the startup command.
New
- Hooks — Drop executable scripts in
.terminalgraph/hooks/ to run automation on workspace events (e.g. post-worktree-create). Hooks run in an ephemeral terminal with colored borders showing progress, success, or failure.
- Terminal context menu — Right-click terminal content for Copy, Paste, Clear, Reset Terminal, Close Node, and group/split actions. Respects mouse capture in vim/tmux.
- Split tree drag and drop — Drag a node out of a split tree to detach it, or drag an external node over a split tree to see a live preview of where it will land.
- Smarter node placement — New nodes, blueprints, and file drops now anchor at the cursor's top-left and automatically avoid overlapping existing nodes.
Fixed
- Worktree config refresh — Worktree titles now update automatically when a branch is created or commits land on a detached HEAD, both on app focus and every 30 seconds.
Improvements
- Default group size increased to 1400×800.
New
- Worktree names — Worktrees now have a display name separate from the branch, pre-filled from themed name packs (moons, islands, constellations, stations, ports, signals).
- Settings window —
Cmd+, opens a settings window where you can pick your worktree name pack.
- Detached HEAD worktrees — Leave the branch field empty to create a worktree at a detached HEAD. Title shows the short SHA.
- Blueprint worktree binding — Instantiating a blueprint that was captured from a worktree-bound group now prompts you to bind it to a new worktree.
Improvements
- Smarter blueprint capture — Blueprints always fold in live state (CWD, URL) now, including for group children. The capture mode toggle is gone.
Fixed
- Empty workspace — New workspaces now show the empty overlay instead of auto-creating a terminal node.
- Duplicate node connections — Duplicating a node no longer produces invisible or broken connection wires.
- New terminal CWD — Terminals created with
Cmd+N now start in the workspace root instead of sometimes picking up a directory from another window.
- Terminal node size —
Cmd+N now uses the same default size as right-click "New Terminal".
Fixed
- Note-to-terminal piping — Text sent from a note node's save port to a terminal now submits automatically instead of sitting in the input buffer waiting for Enter.
- Note save ports — Split the single
save port into save-content (markdown) and save-path (file path) so downstream nodes receive the payload they need.
New
- Microphone permission — Terminal apps that need audio input (e.g. Claude Code
/voice) can now access the microphone.
Fixed
- Worktree base branch — Creating a worktree without specifying a base branch now defaults to
main instead of failing silently.
New
- Folder management — New Ask dialog for picking a workspace folder, and the empty canvas overlay now surfaces recent folders for one-click reopen.
Fixes
- Presentation mode scroll — Scrolling inside a presented group now reaches the group's members instead of being swallowed by the group chrome.
- Blueprints in worktrees — Dropping a blueprint into a worktree group now retargets its paths to the worktree's working directory, so commands resolve against the right tree.
Fixed
- Sidebar file tree no longer crashes on deep or wide workspaces. Opening nested directories is now smooth and instant.
- Sidebar overlay no longer jumps when expanding directories.
Improvements
- Squared sidebar corners and a resizable sidebar width for a cleaner, more flexible chrome.
New
-
Groups — collect nodes into a container
with a layout strategy (freeform or split-tree). Groups can bind
to a git worktree so the group’s terminals, editors, and
watchers all share an isolated checkout.
-
Blueprints — capture a selection of nodes
(or a whole group with its layout) as a reusable blueprint, then
instantiate it elsewhere on the canvas. Saved per-workspace or
globally.
Improvements
-
Group titles now default to the layout kind instead of a generic
placeholder.
-
Grouping a selection into a split-tree now hugs the selection
bounds instead of expanding past them.
-
Quit and window-close now follow the same shutdown path, so
terminal/PTY teardown is consistent either way.
Added
Fixed
-
Focus newly created nodes automatically so you can start typing
right away.
New features
terminalgraph / tg CLI inside terminal
nodes
Send and receive data through connected canvas ports from any
terminal-node shell. The binary is auto-injected into the
node’s environment — no PATH setup.
-
tg ports — list port paths for the current
node
-
tg send "hello" — write to the node’s
stdout FIFO
-
tg run jq .name — run a command with
stdin/stdout piped through connected ports
-
tg help --agent — structured help output for
agents
Live dimensions overlay while resizing
Drag any node’s resize handle and a small overlay shows
current width × height in points. Terminal nodes also show
the live grid size in columns × rows, so you can size a
shell to an exact pty geometry instead of guessing.
Bug fixes
Port indicator debug panel now in release builds
Open the command palette (⌘K) and search for
Port Indicators to open a live-tuning panel for
port dot size, opacity, stroke, label position, and hitbox radius.
Changes apply to the canvas instantly. Previously debug-only.
Welcome to Terminal Graph. An infinite macOS
canvas where terminals, browsers, notes, editors, images, and
file-watchers live as draggable nodes. Wire them together, pipe
data between them, keep the whole shape of a project in one view.
Canvas
- Pannable, zoomable infinite canvas
- Workspace state persists across launches
- Focused node presentation mode
- Data connections between nodes
Terminals
- Ghostty-powered terminal nodes
- Cmd+click URLs and local file paths
- Text input port to pipe data into the shell
Editor & notes
- Monaco-backed editor with explicit save controls
- File-backed and fileless editor and image nodes
-
⌘= / ⌘− /
⌘0 to adjust font size
Command palette
- ⌘K to open, fuzzy-search every command
Quality of life
- Reopen recently closed nodes
- Sidebar file tree for project workspaces
- Native macOS titlebar, menus, and app icon
Known rough edges
-
App is not yet code signed. First launch requires an extra
“Open Anyway” step in
System Settings → Privacy & Security.