# Wormhole 1.2.0

Released October 22, 2026.

### 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 commit` lines.
  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
  `divider` colour and `metrics.divider_width` in 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 list` names 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 `variants` list 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 with `ESC # 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 m` or `; 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 as `CSI 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 l` switches to VT52 mode (cursor movement, direct
  cursor addressing, the graphics set, the identify request), with its cursor and keypad keys, and
  `ESC <` switches back.
- A program can save and restore the pen's attributes and the colours it changed (xterm's
  `CSI # {`, `CSI # }` and `CSI # 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_report` in `config.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 `.git` in the folder and its parents runs instead, so `git init`, `git clone` into the
  folder or a `cd` into 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.txt` keeps 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 donut` with 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 $ ~`, then `CSI 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 $ |` and `CSI 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 h` and `l`, after `CSI ? 40 h`) rewrapped the whole scrollback twice each time, so
  a file shown with `cat` that 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 `cat` could 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 `ls` could
  hold `ls; 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.

---

Source: https://getwormhole.app/releases/1.2.0
