Ghostty v1.2.0

v1.2.0
Added 3
  • Added command palette accessible via ctrl+shift+p on GTK and cmd+shift+p on macOS to invoke keybind actions
  • Added quick-terminal-size configuration option to set the default size of the quick terminal using percentages or pixels
  • Added opt-in SSH shell integration features to improve compatibility with remote machines that lack Ghostty terminfo support
Changed 3
  • Updated application icon on macOS to be compatible with macOS Tahoe and support light, dark, translucent, and custom tinting styles
  • Updated application icon on GTK (Linux and FreeBSD) to better match desktop environments with GNOME-aligned styling
  • Made quick terminal resizable at runtime with size persisted for the duration that Ghostty is running
Security 1
  • Fixed an issue on macOS where Ghostty could be used as a vector for privilege escalation from other vulnerable or malicious sources

From Ghostty

Ghostty 1.2.0 features 6 months of work with changes from 149 contributors over 2,676 commits. Thank you to all the contributors, maintainers, community moderators, translators, packagers, and users who each helped make this release possible. This release contains major improvements to every part of Ghostty, including hundreds of bug fixes.

Security
  • macOS: GHSA-q9fg-cpmh-c78x. Fixed an issue where Ghostty can be used as a vector for privilege escalation from other vulnerable or malicious sources. This requires a vulnerable application outside of Ghostty to initiate this chain of events. As such, this is considered a low risk advisory.
Highlights
New App Icons

PRs: GH-7638 GH-8038

On macOS, Ghostty 1.2 ships with a new macOS Tahoe compatible icon shown below. This icon is built with the new Icon Composer application and allows the icon to work with all of the new macOS light, dark, translucent, and custom tinting styles.

On GTK (Linux and FreeBSD), Ghostty 1.2 ships with a new icon that better matches many desktop environments. We chose to align with the GNOME styling since that is common and doesn't generally look out of place in most environments.

It's impossible to make a perfect, globally consistent icon for the Linux and BSD ecosystem due to the diversity of desktop environments. We believe this icon looks better in more environments than the prior icon, and avoids some negative reactions that the prior icon demonstrated a macOS-centric point of view.

Command Palette

PRs: GH-7153 GH-7156

Ghostty now has a command palette that can invoke most keybind actions, such as creating new terminals, moving focus, changing text selection, copy and paste, etc.

The command palette is bound by default to ctrl+shift+p on GTK and cmd+shift+p on macOS. This can be rebound to any keybind using the toggle_command_palette keybind action. The command palette is also available via the menubar on both macOS and GTK.

The command palette exposes almost every available keybind. As new keybind actions are added to Ghostty, they will be automatically available in the command palette as well. This has some immediate benefits, namely that you can access keybind actions even if they aren't bound to a keybind. This is useful for infrequently used actions.

For example, I personally find myself using the move_tab action via the command palette frequently, but not frequently enough to justify binding it.

In future versions of Ghostty, we'll continue to expand the features that are available in the command palette. For example, we're working on a new terminal sequence specification that would allow terminal programs to expose any of their actions directly in the command palette (e.g. imagine Neovim commands being fully available in the command palette).

Quick Terminal Size

PRs: GH-2384

A new configuration quick-terminal-size can now configure the default size of the quick terminal. This was one of the most highly requested features.

The quick-terminal-size configuration supports both percentage and pixel size. If you specify only one value, it specifies the size of the primary axis (depending on the location). If you specify two values, then the second value is the secondary axis. The example below illustrates:

# Percentage, primary axis only
quick-terminal-size = 25%

# Pixels work too, primary axis only
quick-terminal-size = 600px

# Two values specify primary and secondary axis
quick-terminal-size = 25%,75%

# You can also mix units
quick-terminal-size = 300px,80%

The primary axis is defined by the quick-terminal-position configuration. For the top and bottom values, the primary axis is the height. For the left and right values, the primary axis is the width. For center, it depends on your monitor orientation: it is height for landscape and width for portrait.

Beyond simply specifying the size, the quick terminal is now resizable at runtime and will remember that size for the duration that Ghostty is running. In prior versions, the size was fixed, which caused real problems depending on monitor size and resolution.

Screenshots with a couple examples on GTK are shown below:

SSH Improvements (Work-in-Progress)

PR: GH-7608

Ghostty now has opt-in shell integration features to make Ghostty more compatible with SSH for remote machines that haven't updated to support Ghostty's terminfo.

The new ssh-env opt-in feature will automatically set the TERM variable to xterm-256color for SSH sessions (as well as forward some other environment variables to make sessions work better). While not strictly correct, this band-aid solution helps more than it hurts in most cases.

The new ssh-terminfo opt-in feature will automatically copy the Ghostty terminfo to the remote machine so that the proper xterm-ghostty TERM setting can be used and remote programs can take full advantage of all of Ghostty's features (and avoid xterm features we don't support).

Both of these features are opt-in because they require overriding the ssh command in your shell. This operation is not without risk, so we want to make sure users are aware of what they're doing. We do our best to make this stable and reliable, but there are edge cases we can't account for. As such, this is still a work-in-progress and we welcome feedback.

Renderer Rework

PRs: GH-7620

The renderer backends have been reworked so that the core logic is shared, whether rendering with OpenGL or Metal. This change will allow for quicker improvements to that area of the code in the future, and will also help to ensure feature parity between the two backends, which is something that was starting to become an issue as many features were implemented for Metal but not for OpenGL.

In the process of this rework, several improvements were made for the OpenGL backend, which should now be more efficient and has near feature parity with the Metal backend.

This means that Linux users will now see proper linear alpha blending, which removes artifacts seen around the edges of text with certain combinations of background and foreground color. The default alpha-blending configuration value on Linux is now linear-corrected, which performs linear blending with a correction step for text so that the apparent weight matches the non-linear blending that people are used to.

This rework also made it so that custom shaders can now be hot reloaded.

Custom Cursor Shaders

PRs: GH-7648

Custom shaders are now provided information about the terminal cursor, so that custom effects and animations can be applied to it, like a trail or smear.

The example below shows a "cursor blaze" shader that leaves a trail behind the cursor as it moves:

Cursor shaders and custom shaders in general are not for everyone, but we've seen some incredibly creative shaders from the community. A lot of people are having a lot of fun, and beyond simple eye candy they can be practically useful too, such as making the cursor easier to follow as it moves (but perhaps less loudly).

We do eventually plan to add a first-party animated cursor, so that users don't need to take on the additional performance cost of a custom shader just to have a cursor that's easier to follow as it moves, but adding this feature to custom shaders was an easy stop-gap measure. Plus, this will still be useful even after we add the first-party animated cursors, since some users may still want to have very specific custom effects that aren't possible through the built-in option.

Terminal Background Images

PRs: GH-3645

You can now specify a background image for your terminal using the background-image configuration. This comes with a set of other configurations so that the image appears just how you'd like it: background-image-opacity, background-image-position, background-image-fit, and background-image-repeat.

In Ghostty 1.2.0, the background image is duplicated in VRAM for each terminal. For sufficiently large images and many terminals, this can lead to a large increase in memory usage (specifically VRAM). A future Ghostty release will share image textures across terminals to avoid this issue.

Graphical Progress Bars

PRs: GH-7975, GH-8477

Ghostty now recognizes the ConEmu OSC 9;4 sequences and renders a GUI native progress bar.

As far as we know, we believe Ghostty is the first terminal emulator on macOS to support this feature. Multiple terminals other than Ghostty on both Linux and Windows already support this feature.

Progress bars can show success/error states, numerical progress towards completion, indeterminate progress (pulsing), and more. Programs like Amp are already utilizing the progress bar today to show activity, as shown below:

Graphical progress bars are now supported by multiple terminals across Windows, Linux, and macOS as well as a handful of major terminal programs such as the systemd and Zig CLIs. We hope, given the growing terminal support, that more programs will start using this feature.

Today, Ghostty shows a simple, basic progress bar at the top of the terminal. In future versions, we will expand progress so it is shown in tab headers, task bars, dock icons, etc.

The progress report OSC 9;4 sequence collides with the iTerm2 notification sequence. Ghostty is the only emulator to support both sequences. To handle this, OSC 9;4 always parses as a progress report, meaning you can't send any notifications starting with ;4 as notifications. We think this is a reasonable trade-off given the extremely specific text and the wider support for the more recommended OSC 777 notification sequence.

Fallback Font Size Adjustment

PRs: GH-7840, GH-7953

When the font(s) you configured for Ghostty don't have a glyph for a character we need to render, we find a font on the system that does. These fonts are now adjusted in size to better match the primary font. This is similar (but not identical) to font-size-adjust in CSS.

This helps account for the differing sizes of fonts, and creates a generally …

View original

Upgraded? How did it go?

Discussion