Skip to content
HN On Hacker News ↗

1.4.0 - Release Notes

▲ 1358 points • 447 comments • by deaux • 1w ago • HN discussion ↗

Pangram verdict · v3.3

We believe that this text is a mix of AI and human-written content.

14 %

AI likelihood · overall

Mixed
86% human-written 14% AI-generated
SEGMENTS · HUMAN 43 of 59
SEGMENTS · AI 15 of 59
WORD COUNT 1,573
PEAK AI % 100% · §28
Analyzed
Oct 27
backend: pangram/v3.3
Segments scanned
59 windows
avg 27 words each
Distribution
86 / 14%
human / AI fraction
Verdict
Mixed
Pangram v3.3

Article text · 1,573 words · 59 segments analyzed

Human AI-generated
§1 Human · 0%

Ghostty 1.4.0 is a major release that includes large performance and memory improvements, a 100% complete Kitty graphics implementation including animation and relative placements (the first non-Kitty terminal to do so), SSH integration improvements, and hundreds more improvements and fixes across all platforms. This release features 7 months of work with changes from 172 contributors over 2,889 commits. Thank you to all the contributors, maintainers, community moderators, translators, packagers, and users who each helped make this release possible. These release notes are painstakingly and lovingly hand-crafted by human Ghostty maintainers, including the full changelog. They take a combined 16+ hours to write, so please enjoy. 🥰 GHSA-4hwh-wx3w-3fqg.

§2 Human · 0%

Paste protection didn't treat carriage returns as line endings, so a paste could run a command without confirmation in programs that don't use bracketed paste. This requires user interaction (copy-paste) to trigger.

§3 Human · 0%

GHSA-mhff-mv4q-fp63.

§4 Human · 0%

Malicious Kitty graphics commands could crash or hang Ghostty, force huge allocations, or in limited cases read or delete files outside the allowed temporary directories.

§5 Human · 0%

This only requires displaying malicious output.

§6 Human · 0%

GHSA-hcr9-7hcr-mjm8. Malicious terminal output could crash Ghostty, closing every window, via tmux control mode.

§7 Human · 0%

tmux doesn't need to be installed.

§8 Human · 0%

This affects Ghostty 1.3.0 and 1.3.1. GHSA-hp9c-qp4q-cpw3. The same impact as above, via a tmux control mode layout with a zero-sized or oversized pane. This affects Ghostty 1.3.0 and 1.3.1. GHSA-w9q4-5jvv-mcv4.

§9 Human · 0%

Clearing the screen into scrollback could corrupt memory if it deleted the scrollback page holding a styled or hyperlinked cursor. This only requires displaying malicious output, but only with a small scrollback-limit such as 0. The default isn't known to be affected.

§10 Human · 0%

GHSA-2r63-vmw6-3m3c. A crafted directory name could make the zsh shell integration send arbitrary escape sequences, such as silently replacing the clipboard via OSC 52.

§11 Human · 0%

bash was affected in a more limited way. This only requires cd-ing into a directory from untrusted content, such as a cloned repository.

§12 Human · 0%

macOS: GHSA-cw69-wm67-5pv8. Cmd-clicking a crafted OSC 8 hyperlink could open unsafe local files or custom URL schemes, leading to arbitrary command execution.

§13 Human · 0%

Ghostty now blocks unsafe targets and confirms custom URL schemes. This requires user interaction (cmd-click) to trigger.

§14 Human · 0%

macOS: GHSA-mfw9-xcr3-7gfp. The same issue as above for links detected by the link configuration, including the default URL matcher.

§15 Human · 0%

This requires user interaction (cmd-click) to trigger.

§16 Human · 0%

macOS: GHSA-v8cw-fg4j-jcc4.

§17 Human · 0%

Drag-and-drop text skipped paste protection, with the same impact as above. This requires user interaction (drag-and-drop) to trigger.

§18 Human · 0%

macOS: GHSA-mxqx-236q-wrv7.

§19 Human · 0%

Opening a file whose name contains control characters could run a different command than the one shown in the confirmation dialog.

§20 Human · 2%

This requires a crafted file on your system and confirming the dialog.

§21 Human · 0%

Note: I requested CVEs for the above advisories weeks ago, but GitHub hasn't assigned them yet. If/when they're assigned, I will update the above with proper CVE numbers. PRs: #12999 #13069 #13393 #14413 #14414 Ghostty 1.4 supports macOS 27 (Golden Gate). Most of the work was compatibility fixes: Tabs in the titlebar (macos-titlebar-style = tabs) lay out correctly again. The native tab bar no longer draws as a solid gray bar on top of your theme.

§22 Human · 0%

It now lets the new glass style blend with your terminal background.

§23 Human · 0%

macos-titlebar-style = hidden no longer covers the top lines of the terminal when Reduce Transparency is on.

§24 Human · 0%

The app icon no longer has a thin border.

§25 Human · 0%

The Shortcuts "New Window" action no longer opens two windows when Ghostty is running without any windows. Ghostty 1.4 remains fully compatible with prior macOS versions back to and including macOS 13 (Ventura). See the system requirements for more details. Ghostty 1.3.1 works on macOS 27, but it has some of the visual issues listed above, such as the gray tab bar. PRs: #13943 #13939 #13935 #13934 #13893 #13933 #13389 #13270 #13281 Ghostty now supports Kitty graphics animation and relative placements. These were the last major features of the Kitty graphics protocol that Ghostty didn't support.

§26 Human · 0%

Programs that display animated images with the Kitty protocol, such as an animated GIF shown with kitten icat, now animate in Ghostty instead of showing a single still frame.

§27 AI · 100%

Frame transmission, composition, and playback control are all supported, and animations pause while the terminal isn't visible.

§28 AI · 100%

Relative placements let a program position one image relative to another image's placement, so the child image moves along with its parent. We also did a full conformance pass against the specification and Kitty itself, fixing dozens of behavioral differences.

§29 AI · 100%

For example, images now scroll with text inside scroll regions (#4323 ), retransmitting an image ID replaces the old image (#6711 ), and invalid image data now gets an error response instead of silence, which could leave clients hanging.

§30 Human · 22%

The full list is in the terminal capabilities section. Kitty graphics are faster, too.

§31 AI · 100%

Image payloads are now parsed in bulk with SIMD instead of one byte at a time, making large image transfers about 16x faster to parse in our benchmarks (64 MiB of image data, x86_64 Linux), and drawing images costs much less per frame.

§32 Human · 0%

Our Kitty graphics implementation now covers 100% of the published specification, making Ghostty (and libghostty) the first terminal to do this outside of Kitty itself. PRs: #13264 #13473 #13240 #13245 #14130 #14137 #14138 #14017 Ghostty now transparently compresses scrollback that isn't visible, reducing the physical memory those pages use by 70% to 90% for typical text-heavy history.

§33 AI · 100%

Compression only runs while the terminal is idle and pages are decompressed on demand when you scroll back or search, so it has no measurable impact on I/O throughput.

§34 AI · 100%

Thanks to compression, the default scrollback limit has been raised from 10 MB to 50 MB per terminal. On platforms that support compression, a full scrollback still generally uses less physical memory than the old 10 MB limit did.

§35 AI · 100%

Compression lowers resident (physical) memory, not virtual memory, so look at resident memory when measuring it.

§36 Human · 0%

It is currently available on macOS and 64-bit Linux.

§37 Human · 0%

Beyond scrollback, memory usage is lower in many places: A new, empty terminal now uses about 16 KiB of terminal page memory on macOS, down from 128 KiB in Ghostty 1.3.1.

§38 Human · 0%

On macOS and Linux, memory freed by clearing or trimming scrollback is now returned to the OS instead of being held until the terminal closes. Hidden tabs release their GPU resources. On macOS, with one visible tab and 20 hidden tabs, GPU memory dropped from about 385 MiB to 18 MiB.

§39 Human · 6%

Rebuilding them when a tab becomes visible again takes under a millisecond.

§40 Human · 0%

PRs: #13209 #13220 #13226 #13227 #13537 #13827 #13587 #14011 #13722 #14035 #12760 There are performance improvements across the board in Ghostty 1.4 that yield significant gains compared to prior Ghostty versions.

§41 Human · 0%

The biggest win came from a surprising discovery: on macOS, the kernel caps every read from a pty at about 1 KiB no matter how large the read buffer is.

§42 AI · 100%

Previously, Ghostty processed each read as it arrived, so per-read overhead was paid every kilobyte, and the program writing output sat blocked while we parsed. Ghostty now drains the pty on one thread while parsing on another, raising end-to-end I/O throughput by 25% to 55% on macOS (M4 Max, plain and Unicode text) over Ghostty 1.3.x.

§43 AI · 100%

VT processing itself is also much faster. In parser benchmarks, plain ASCII text went from 128 MB/s to 725 MB/s (5.7x), CJK text got 3.4x faster, and a 2.6 GB dataset of real-world terminal recordings from asciinema is processed about 25% faster.

§44 Human · 20%

Together, these changes took cat-ing a 150 MB text file on macOS from 1.5 seconds to 566 milliseconds.

§45 Human · 0%

Other notable improvements: Resize: resizing a terminal with a large scrollback is about 6x faster (120x80 with 10,000 lines of scrollback), and 3x to 5x faster with history full of CJK text or emoji.

§46 AI · 100%

Rendering: the renderer holds the terminal lock 2.7x to 11x less per frame, leaving more time for the I/O thread during heavy output. Copy and search: formatting terminal contents as plain text, HTML, or VT, which backs clipboard copy, write_screen_file, and scrollback search, is 1.5x to 8x faster. Launch (macOS): about 15% faster from launch to visible window, and 27% faster to the first rendered frame. Idle energy: on macOS, the renderer's display link now sleeps when there's nothing to draw.

§47 AI · 100%

On GTK, hidden tabs stop rendering, matching macOS.

§48 AI · 100%

Large OSC sequences: OSC 52 clipboard payloads parse about 30x faster, and even short sequences like title changes are about 6x faster.

§49 Human · 0%

PRs: #14052 #14269 The GTK app has a new rendering pipeline.

§50 Human · 0%

It no longer uses GtkGLArea.

§51 Human · 0%

Instead, the renderer draws with EGL on its own thread, exports each frame as a DMABUF, and hands it to GTK to display.

§52 Human · 0%

Rendering is now triple-buffered, which should greatly reduce tearing, and no OpenGL calls run on the main thread anymore, which let us remove a number of workarounds.

§53 Human · 0%

The most visible result is crisp text under fractional scaling.

§54 Human · 0%

Text and box-drawing characters are no longer blurry with fractional display scaling such as 125% or 150% (#1938 ).

§55 Mixed · 65%

We fixed this once before, but it came back after upstream GTK changes.

§56 AI · 100%

Ghostty now renders at the window's true fractional scale, so every rendered pixel maps to exactly one pixel on screen.

§57 AI · 100%

The new render surface needs a system EGL library (see Changes for Package Maintainers).

§58 AI · 100%

On GPU drivers that can't export DMABUFs, Ghostty falls back to copying frames through the CPU, which is slower but works.

§59 Human · 0%

PRs: #13962 #13993 #13995 #13998 #14002 #14061 Ghostty now implements the Kitty clipboard protocol (OSC 5522) on both macOS and GTK.