Release notes
StableWormhole 1.2.0
October 22, 2026
All releases
You're reading notes for an older version. To update, visit the download page or choose Check for Updates… from the Wormhole menu.
Added
- Submodules get their own rows in Changes and History, with a folder-and-git icon and what changed in words ("2 new commits", "1 commit back", "uncommitted changes", "not checked out") where a file has line counts. A click lists the commits between the commit the repository records and the one the submodule is at, newest first, with each commit's subject, hash, author and age (and the commits left behind when the pointer went back), instead of git's two
Subproject commitlines. The button on a row opens a terminal in the submodule. - A terminal inside a submodule says whose it is in the title row ("in terminal").
- A small icon opens a file of the git panel in the editor chosen for Open in…: on the right of a Changes row while the pointer is over it, over a diff line (the file opens at that line, where the editor can: VS Code and its forks, Zed, Sublime Text and the JetBrains IDEs), in the diff's header, and on the files of a commit in History while they are still in the working tree. With Finder chosen it shows the file there.
- Column dividers: the lines between the sidebar, the terminal and the right panel are their own
dividercolour andmetrics.divider_widthin a theme (both follow the border unless set; a width of 0 draws none), and Settings → Appearance → Column dividers hides them in every theme. The edges still resize, and Increase Contrast keeps the lines. - Profiles: a whole Wormhole of its own for Work, Private or anything else, each with its terminals, theme, fonts, keys, notifications, trusted projects, start folder, environment, git identity and its own Claude and Codex login. Settings → Profile (the first page) edits the one you're in and makes new ones. Shell → Profile, the command palette ("Switch to Work") and a chip at the top of the sidebar (shown once there are two) switch profiles, open a window in one or move this window to one. Switching hides the other profile's windows, their terminals and agents still running; a window in another profile than the one shown wears its colour along the top and its name in the status bar. A folder listed under a profile opens in it,
Wormhole listnames each terminal's profile, and Settings → Coding agents installs the status hooks into a profile's Claude or Codex login too. - Groups of your own, as in a browser's tab groups: name them, give them one of nine colours and keep them in your order among the terminals in no group. Click a group's name for its popover (name, colour, New terminal in group, Ungroup, Close group, Pin group, Move group to new window) and its chevron to fold it; a folded group keeps its terminals' tiles, their count and a dot while one needs you. Drag terminals into and out of groups, and groups by their head. A pinned group stays when its last terminal closes. ⌘T opens a terminal in the selected one's group, ⇧⌘T in no group, and a terminal split off a grouped one joins its group. Close group asks first if an agent is working in it.
- Terminals can show as tabs instead of in the sidebar (Settings → Terminals & sidebar → Show terminals in, or View → Show Terminals as Tabs): one row under the title row with the profile chip, a group switcher (with an amber dot while another group needs you) and that group's terminals. As in macOS Terminal there's no tab bar while there's only one terminal. The switcher searches groups and terminals ("Go to group or terminal…"); tabs keep their place, show their close button under the pointer and scroll sideways when they don't fit. ⌃⌥[ and ⌃⌥] go to the previous and next group and ⌃⌥1–9 to a group by number, in either layout.
- Ten themes of Wormhole's own. Wormhole, in the app icon's colours, is the new default: Wormhole Dark in Dark Mode and Wormhole Light in Light Mode; an existing setup keeps the theme it has. With it come Nebula, Solar Flare, Borealis, Event Horizon, Void (true black), Crimson, Cyberpunk, Matrix and Soltari. Each uses its own primary colour where it has a signature one, and every colour keeps at least 5:1 contrast on its background.
- A theme file can hold several versions of a theme (Light, Dark, Light Minimal, …): shared colours at the top and a
variantslist in which each version sets only what differs. Each version is a theme of its own ("Soltari Light"), the family's name means its first version, and the Theme Studio saves a version back into its family's file. Settings → Appearance shows a family as one card with a swatch per version. - Settings → Updates → Channel: Unstable gets a build of every change as soon as it passes the tests, and shows Settings → Feature flags so you can try what's still being built. Stable, the default, gets releases only; going back to Stable keeps your build until the next release overtakes it.
- The Usage tab shows Codex's plan limits and Gemini's latest token count next to Claude's, and an expired reading waits for a fresh one instead of showing an unused allowance. Turn the integrations on or update them in Settings → Coding agents.
- Liquid Glass, off by default (Settings → Appearance): on macOS 26 and later the sidebar's cards and the tabs are glass and the status bar uses the window's own material. Before macOS 26, or with Reduce Transparency or Increase Contrast, every surface paints itself.
- Programs can ask whether the theme is light or dark (
CSI ? 996 n) and ask to be told when it changes (mode 2031), so editors and TUIs that follow the terminal's colours can switch with it. Wormhole answers from the background of the theme in use, and reports a theme change to the programs that asked. - Programs can draw double-width and double-height lines (
ESC # 6,ESC # 3/ESC # 4, back to normal withESC # 5), as vttest and banner tools do. A line of such a row takes twice the width (and a double-height line two rows at twice the size); selecting, clicking, the cursor and find work on it. Double-width text is stretched to twice its width (bitmap emoji keep their size and are centred in their cells). - A program can ask to be told the terminal's size in characters and in pixels, once when it asks and again whenever the window changes size (in-band resize notifications, mode 2048), instead of waiting for a signal.
- A program that turns on xterm's modifyOtherKeys (
CSI > 4 ; 1 mor; 2 m) is told which modifiers you hold on ordinary keys: Alt+key, Ctrl on the punctuation and digit keys with no control code, and Enter, Tab and Escape with a modifier arrive asCSI 27 ; modifiers ; key ~sequences as in xterm. Shift+Enter is then sent as Shift+Enter, not as Option+Enter. - Programs written for the VT52 work:
CSI ? 2 lswitches to VT52 mode (cursor movement, direct cursor addressing, the graphics set, the identify request), with its cursor and keypad keys, andESC <switches back. - A program can save and restore the pen's attributes and the colours it changed (xterm's
CSI # {,CSI # }andCSI # P,CSI # Q), and read back what a rectangle of the screen has in common (CSI Pt ; Pl ; Pb ; Pr # |).
Changed
- The line that joins a split's terminals in the sidebar runs through the middle of their tiles, behind them, instead of beside them.
- Notes and tasks in the right panel are hidden for now, behind a feature flag in development builds.
- The Usage tab of the right panel shows while a coding agent runs in the terminal.
- Settings: the previews are always in view. The window opens wider, to the right, with a preview column beside the page: the window in miniature (Appearance and every page without a preview of its own), the font specimen on Fonts, and the Terminals list on Terminals & sidebar, each following what you change as you change it. The page keeps its width; in a window narrower than that, or on a small screen, the previews sit in their pages as before.
- Settings: a calmer look. The nav's rows are 13 pt and inset from its edges with a rounded selection, each group of sections starts a clear step below the one before it. Pages have more air at the sides, an intro that wraps at a readable width and group headings in a larger, heavier type than the rows under them. The window opens a little taller so the whole nav shows.
- Right-click menus (a terminal's, a group's, the + button's shells, a pane's, Open in…) are the Mac's own menus now, with VoiceOver, type-to-select and the system look.
- The folder's hover card and a group's popover are the Mac's own popovers now. Resting on the folder in the title row opens a card with the path, Open in Finder, Copy path and Insert into terminal; a click on it still opens the folder in Finder, and a right-click opens a menu like the one a Finder window's title has, with the folders down to the disk and their Finder icons. Clicking a group's name opens a card with its name in a field, the nine colours and the actions; a colour wheel after the colours opens the Mac's Colours window for a colour of your own, which the group follows as you choose it and which is kept with the group (the group's right-click menu has Other colour… too, and Rename… edits the name in place on the group's head).
- The terminal engine,
wormhole-vt, is now under the MIT License, so other projects can use it. The app stays GPL-3.0-or-later. - A new app icon: the
>_prompt over a glowing disc that runs from blue to violet, on a plain tile, white in light mode and black in dark mode. - About Wormhole looks like the Mac's own About panel: a small window with the icon, name, version and copyright. The licences moved to Help → Licenses; Check for Updates stays in the Wormhole menu.
- A new look for the window. The terminal is a rounded surface, its text 12 pt from the window's edge in line with the traffic lights, the title row, the status bar and the sidebar's and panel's headers; the title row stands on the terminal's own colour. Split terminals are rounded surfaces of their own, 8 pt apart: the one with the keyboard has a quiet outline and the others are dimmed, the gap resizes them, and Settings → Terminal → Gaps between split terminals joins them with a hairline instead. Each pane's header names its terminal as the sidebar does and leads with its status tile.
- The sidebar is a list of rounded cards: one per group and one for each terminal in no group (a split's terminals share one), with the selection colouring the card itself. Its heading is gone and its + sits at the right of the top row; a long list scrolls with a scrollbar that follows "Show scroll bars" in System Settings. Each row leads with a status tile that looks like the agent's app icon (or a terminal's): a light circles its edge while it works, its amber edge breathes while it needs you, and a badge marks done, failed, new output or the bell. Under Reduce Motion they hold still.
- Settings → Terminals & sidebar has three row densities, Regular, Compact and Dense, for the sidebar and the tab bar, and "Show groups as cards" turns the cards off. View → Compact Rows becomes the Compact density.
- A group whose terminals share a repository shows its changed files (±N) once, on its first row; a terminal in another repository or worktree keeps its own count.
- The right panel's Changes, History and Notes are cards like the sidebar's, under its own tab bar, with the compare picker and refresh in the Changes card's head.
- The status bar puts the terminal that has waited longest for you first, with how long it has waited (a click goes there), and counts the rest ("2 working · 1 done"). It names the program in front instead of the shell and says how the terminal on screen is doing ("needs you", "done · 2m"); the branch, its changes and the agent's context stay in the title row.
- Settings → Appearance → Use the theme's primary colour, on by default. Turn it off to use your own primary in every theme; turn it back on and the theme's returns, with yours kept for next time. A colour you had already chosen stays in use.
- Light themes are easier to read: cards keep a visible edge on white, the amber of a terminal that needs you holds 3:1, and a profile's letter turns black on a light colour.
- Reading the window title back is now a setting of its own, off by default (Settings → Terminal → Privacy, "Let programs read the window title back", or
allow_title_reportinconfig.json). It used to come with "Let programs control the window", so if you turned that on and a program needs the title, turn this on too. A title that a program sets can no longer carry control characters into the window's title, the sidebar or a terminal's folder. - Edit → Rerun Command is now Put Command at Prompt: it types a finished block's command at the prompt and leaves the Return to you, and says why in a notice over the pane when it will not.
Removed
- Grouping by folder, and with it the sidebar's filter (Show, search, Hide idle), Group by, its Settings gear and shell menu, and the Order setting: terminals keep the order you give them. Right-click the + for another shell. The tab bar's two-row, stacked and bottom-bar layouts are gone too. Settings that named any of these still load and do nothing.
Fixed
- The Changes and History tabs of a terminal whose folder is in no git repository no longer blink every couple of seconds ("Reading git status…" flashed in over the note while a poll ran, and History redrew on each poll). Git is no longer asked about such a folder again and again; a cheap look for a
.gitin the folder and its parents runs instead, sogit init,git cloneinto the folder or acdinto a repository shows the repository within about half a second. - The Open folder in… menu in the title row shows each app's icon again (Zed, Xcode, Finder …), as the Mac gives it to Finder.
- A crash is written down: the log gets the panic's message and where it happened, and
logs/last-panic.txtkeeps the last one, so a crash of an app started from the Finder leaves more than a crash report. - A screen that keeps printing new words, such as
ttystorm donutwith a font that has ligatures, no longer slows the window down: a frame took 30 ms there and takes about 3 now. A word with no time to be shaped shows without its ligatures for a frame or two. - A program can no longer freeze a terminal for seconds by moving the cursor far left over and over with reverse wraparound on.
- A terminal's scrollback stays near its memory limit when the output is full of combining marks or links, which could make it hold hundreds of megabytes. Past 1 MiB of link addresses in one stretch of history, new links show as plain text.
- After a program turns on 8-bit controls, a title or other text with a dash, curly quotes or
œin it is no longer cut short, with the rest shown as stray characters. - A program that asks for thousands of reports without reading them no longer gets half an answer typed into its input when Wormhole stops answering.
- A saved terminal state that a program sends back with a mistake in it now changes nothing, instead of putting back part of it.
- A protected wide character (Chinese, Japanese, an emoji) at the edge of a selective erase is no longer erased with the rest.
- A line that ends in a tab no longer takes an extra, empty row when the window gets narrower.
- Dragging on the tab bar no longer moves the window.
- Scrolling the Theme Studio is smooth again: the component gallery and the token list draw only what is in view, each part of the window redraws on its own, and a turning status spinner no longer makes the whole window redraw. The icons of Settings → Feature flags and of the palette's profile commands, which were missing, show.
- A program can now switch on the application keypad, X10 mouse reports (mode 9), URXVT mouse reports (1015), pixel-position mouse reports (1016) and Backspace sending BS (DECBKM), and the terminal does what it asks. Until now only the other mouse modes and the cursor keys were followed.
- Pixel-position mouse reports (mode 1016) count from 1, as xterm's do, instead of from 0.
- A repeat (
CSI Ps b, REP) now repeats a character only when it comes right after one, as the standard and xterm have it: after a colour change, a cursor move, a line feed or another repeat it repeats nothing, where it used to repeat the last character printed. - Text a program writes to the status line (
CSI 2 $ ~, thenCSI 1 $ }) is no longer drawn on the main screen at the cursor: Wormhole has no status line, so it drops what is written there and the screen and cursor stay as they were. - Programs that ask a terminal for its line parameters (
CSI 0 x, DECREQTPARM, which some old VT100 software still does) now get an answer instead of waiting for one. - A program can switch the terminal between 80 and 132 columns with
CSI 80 $ |andCSI 132 $ |(DECSCPP), without clearing the screen, like the other window resizes it may ask for. - A program can ask where it is on the title stack (
CSI # S) and read back its modifyOtherKeys level and title modes with a status string request (DCS $ q > 4 m ST,DCS $ q > 0 t ST). - A terminal that a program has put back to the VT100 level (by leaving VT52 mode, or
CSI 61 " p) no longer answers status string requests (DECRQSS), as a real VT100 doesn't. - With ISO Latin-1 in a 96-character set slot (
ESC - A,ESC . A), DEL now showsÿ, the last character of the set, where it was dropped. - Return sends CR LF instead of CR while a program has new line mode set (
CSI 20 h), as on a VT100. - A terminal whose program is a short command rather than a shell (a shell profile that runs one, a program that fails at once) could stay empty, its output, often the error that explains why, lost: on macOS the system throws away what a program wrote when its terminal closes before it is read, and a short command is gone before the terminal's reader gets to it. The terminal now keeps its end open until the output is read.
- A program could hide text in a notification. Wormhole cleaned notification text of control characters and some invisible ones, but let through characters that draw nothing (Hangul and Mongolian fillers, the combining grapheme joiner, tag characters and variation selectors), which can carry a message you cannot see or make a line read differently from what it holds. They are dropped now, except the one emoji or text selector that follows a symbol. A malformed percent escape in a folder a program reports (
%+F) is refused too. - A program could freeze a terminal for seconds with a few kilobytes of output. The 80/132-column switch (
CSI ? 3 handl, afterCSI ? 40 h) rewrapped the whole scrollback twice each time, so a file shown withcatthat toggled it thousands of times stalled the pane. The switch now clears the screen and homes the cursor without changing the width, unless "Let programs control the window" is on. - A program could put text of its choosing on your command line. Wormhole's answer to a clipboard read repeated whatever the program named as the clipboard, so a file shown with
catcould type a command at your prompt (it did not run it: the text could not hold a Return). Only the names of real clipboards come back now. - A program could read your clipboard. A program in a terminal, also one over ssh or a file shown with
cat, could ask for the clipboard with OSC 52 and got its text at once, which is often a password. Now a bar over that terminal asks first, naming the program: Allow once, Always for this terminal (until it closes) or Deny. One question at a time, none for a terminal you cannot see, and 30 seconds without an answer deny. Settings → Terminal → Privacy has "Programs reading the clipboard" (clipboard_read: ask, allow or deny; a project cannot set it). A program setting the clipboard is still allowed, now with a notice over the pane saying how much it copied, and "Programs setting the clipboard" (clipboard_write) turns it off. - A program could make Rerun Command run something other than the command you saw. The command is read back from the screen, and a program can draw text so it cannot be seen (concealed, in the background's own colour, or as characters that draw nothing), so a block that looked like
lscould holdls; rm -rf ~; Rerun typed it and pressed Return. Put Command at Prompt (the renamed action) refuses a command with any such text, and never presses Return.