<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="/sheet.xsl"?><rss version="2.0"><channel><title>Hacker News</title><link>https://news.ycombinator.com/</link><description>Links for the intellectually curious, ranked by readers.</description><item><title>Genie 4</title><link>https://deepmind.google/blog/genie-4-a-new-generation-of-world-simulation/</link><pubDate>Tue, 27 Oct 2026 16:06:01 +0000</pubDate><comments>https://news.ycombinator.com/item?id=50261319</comments><description>&lt;a href="https://news.ycombinator.com/item?id=50261319"&gt;Comments&lt;/a&gt;</description><ns0:encoded xmlns:ns0="http://purl.org/rss/1.0/modules/content/">&lt;main data-marker="page-start" data-marker-end="page-end" id="page-content" morss_own_score="5.954971857410882" morss_score="65.45251288877259"&gt;&lt;span&gt; October 27, 2026 &lt;/span&gt;&lt;span&gt;Models&lt;/span&gt;&lt;h1&gt;Genie 4: A new generation of world simulation&lt;/h1&gt;&lt;p&gt;Today, we are announcing Genie 4, our new world model, which unlocks unprecedented realism and improves real-time interactive simulation. Genie 4 is natively multimodal, enabling audio-like music, ambient noises, and interactive dialogue to be simultaneously generated with the world.&lt;/p&gt;&lt;p&gt;The Genie 4 model incorporates and builds on capabilities from the Gemini family: Gemini Omni anchors the simulations in real-world appearance and behavior, while other Gemini models provide the complex reasoning needed to help maintain a simulation’s coherence and continuity.&lt;/p&gt;&lt;p&gt;With this foundation, you can set an event in motion, and Genie 4 simulates what happens next: how the world responds, how it sounds, and how the people in it move, react, and speak.&lt;/p&gt;&lt;p&gt;Understanding and simulating the world is a crucial aspect of building AGI. Genie 4 advances our ability to create safe, infinitely variable simulations that can help with everything from developing training environments for robots and agents to unlocking the creation of new interactive experiences.&lt;/p&gt;&lt;p&gt;We have started rolling Genie 4 out as a research preview for trusted testers — gathering feedback before we release it to consumers and developers, starting with Google AI Ultra subscribers in Project Genie and early access partners of the Gemini API and Google AI Studio. Join the waitlist for Genie 4 in Project Genie &lt;a href="https://forms.gle/WQnSNEM3omF7Uruu7"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Genie 4 advances four key capabilities&lt;/h2&gt;&lt;p&gt;The following are recordings of real-time interactions from Genie 4, where users use standard keyboard controls for navigation and camera control, and text prompts to steer the scene as it evolves.&lt;/p&gt;&lt;h3&gt;Shaping world simulation in real-time&lt;/h3&gt;&lt;p&gt;With Genie 4, you can use natural language to modify a simulation in real-time — like changing the weather, moving the camera, or introducing a new person or object — and Gemini will contextually adapt your prompt to match the surrounding scene. Between your inputs, Gemini also monitors and steers the scene to keep the world progressing cohesively.&lt;/p&gt;&lt;h6&gt;Turn on audio to hear Genie 4 worlds.&lt;/h6&gt;&lt;h3&gt;Pushing the frontier in realism for physics and human action&lt;/h3&gt;&lt;p&gt;Genie 4 introduces a new standard of realism to real-time interactive simulation. Built on an advanced physical understanding of the world, Genie 4 simulates real-world physics scenarios, such as aerodynamics, collisions, and more.&lt;/p&gt;&lt;p&gt;The most dramatic leap is how Genie 4 simulates people, creating characters that move naturally, respond organically to their environments, and can be interactively steered in real-time.&lt;/p&gt;&lt;h3&gt;Modeling how the world sounds&lt;/h3&gt;&lt;p&gt;Genie 4 is our first real-time world model to generate audio natively. Every world carries the ambient sound of its own setting, from wind in the trees to waves crashing at the beach.&lt;/p&gt;&lt;p&gt;The true frontier, however, is human speech. Genie 4 introduces interactive dialogue that adapts on the fly. Characters converse and react to your inputs or events in the world, all in real-time.&lt;/p&gt;&lt;h3&gt;Simulating complex events with Gemini models&lt;/h3&gt;&lt;p&gt;Bringing Gemini and Genie 4 together adds a new layer of reasoning to world simulation, allowing us to model complex, multi-step events and test how AI systems navigate different environments before bringing them to the real world.&lt;/p&gt;&lt;p&gt;To achieve this in real-time, Gemini 3.8 Flash serves as a guiding agent in the loop: as Genie 4 generates a world in real-time, Gemini continuously observes the scene, breaks down goals into a sequence of steps, and reviews incoming frames to track the progress and verify that each step succeeded. As the world shifts or the user intervenes, Gemini adapts its plan in the moment, unlocking worlds with reliable causality, procedural behaviors, and multi-step reasoning.&lt;/p&gt;&lt;p&gt;As part of exploring this capability, we have also been experimenting with Gemini 4 Argon and Genie 4 to bring our frontier research together with &lt;a href="https://deepmind.google/models/gemini-robotics/"&gt;Gemini Robotics&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In the example below, Argon breaks down a user-instructed task into steps for Genie to render. These steps are interleaved as text captions to Genie 4 as the simulation is rendering. Because Genie 4 can be steered in real-time with text captions using Gemini, this now unlocks the path of adapting the simulation as it progresses towards the completion of that task. This capability becomes a path for simulating a breadth of scenarios in imagined worlds, using Gemini 4 Argon and Genie 4.&lt;/p&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;p&gt;Gemini 4 Argon and Genie 4 work together to simulate Apptronik's Apollo humanoid playing a game of checkers, breaking the task down into real-time steps.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2&gt;Learnings from trusted testers&lt;/h2&gt;&lt;p&gt;While Genie 4 is a major research milestone, it remains an early, experimental model. To understand how interactive world models can support real-world workflows—and where they still need to grow—we’ve been working with cohorts of trusted testers across creative industries, journalism, education, gaming, and engineering.&lt;/p&gt;&lt;p&gt;Testers highlighted how the leap in photorealism, native audio, and real-time steering allows ideas and concepts to be turned into realistic simulations, unlocking new abilities across disciplines:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Creative direction&lt;/strong&gt;: Creatives and technologists are testing Genie 4 as a rapid "draft mode" for pre-visualization and ideation. For example, filmmakers can step into a live simulation of a scene and run multiple "takes" in real-time, adjusting camera angles, lighting, dialogue, and action on the fly.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Historical scenarios &amp;amp; immersive photographs&lt;/strong&gt;: Photojournalists are exploring how a single 2D archival photograph can become a grounded simulation of that environment in seconds. Teams are testing how populated, dynamic worlds can help experience historical spaces or visualize how short-term environmental events, like a flash flood or wildfire, unfold.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Interactive experience concept design&lt;/strong&gt;: Game developers and creative technologists are testing Genie 4 to go from an initial idea to an explorable prototype in seconds, testing visual styles, material aesthetics, and interactive mechanics through natural language prompts before writing a single line of engine code.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Simulation&lt;/strong&gt;: Aside from our robotics research, enterprise partners across industries are evaluating Genie 4 as a tool for rapid "zero-to-one" scenario generation, and identifying gaps to further improve Genie to best fulfill that simulation need.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Future Work: Towards hybrid world models&lt;/h2&gt;&lt;p&gt;A promising path for future progress lies in hybrid world models, which combine the logical, structured reasoning of code and language models with the rich, sensory representation of pixel-level simulation.&lt;br&gt;&lt;/p&gt;&lt;p&gt; Bringing Genie and Gemini models closer together is an early step in this direction. Gemini works behind the scenes to map the structure and plan the narrative timeline, while Genie generates the immediate physical reality—rendering how the world looks, sounds, and responds, pixel by pixel. Together, these complementary strengths can unlock a new class of world models that are far more coherent, controllable, and grounded than either approach could achieve alone.&lt;/p&gt;&lt;h2&gt;Building world models responsibly&lt;/h2&gt;&lt;p&gt;Genie 4 marks a new area of frontier research that merges real-time generation and photorealism, introducing a new range of capabilities and dimensions that we want to roll out and explore in a responsible way. Genie 4 includes strict safety guardrails that are consistent with our safety policies across other models. Before launching this preview, we evaluated Genie 4 through internal rigorous safety evaluations to prevent the generation of harmful or malicious content. Also, we have intentionally deployed it first to trusted tester partners to get early feedback, before we release the model more broadly.&lt;/p&gt;&lt;p&gt;To maintain transparency, all video and audio generated by Genie 4 will include SynthID, our imperceptible digital watermarking technology that helps identify AI-generated content across visual and audio modalities.&lt;/p&gt;&lt;h2&gt;Understanding current limitations&lt;/h2&gt;&lt;p&gt;Genie 4 remains an early, evolving area of research.&lt;/p&gt;&lt;p&gt;While it can maintain coherent environments over short sessions, visual details and object permanence can still shift or drift over time—especially as a simulation runs longer, after multiple complex prompt edits, or when navigating throughout the scene. Complex physical interactions, real-time audio accuracy, rendering legible text, spatial accuracy, and long-term consistency are active areas of ongoing research. We are sharing Genie 4 as a preview to learn alongside our community and safely advance the frontier of interactive simulation.&lt;/p&gt;&lt;h2&gt;Next steps for Genie 4&lt;/h2&gt;&lt;p&gt;Genie 4 has been released as a research preview to trusted testers, and is coming soon to Google AI Ultra subscribers in Project Genie and early access partners in the Gemini API and Google AI Studio. Join the waitlist for Genie 4 in Project Genie &lt;a href="https://forms.gle/WQnSNEM3omF7Uruu7"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We’re excited for users to step inside, experiment, and build their own interactive worlds soon.&lt;/p&gt;&lt;h2&gt;Acknowledgements&lt;/h2&gt;&lt;p&gt;Genie 4 was made possible by core contributions from Hang Qi, Diego Rivas, Aleksander Hołyński, Inbar Mosseri, Jack Parker-Holder, Shlomi Fruchter, Tejas Kulkarni, James Assiene, Philip Ball, Jakob Bauer, Eddie Cao, Lucy Chai, Harris Chan, Kleopatra Chatziprimou, Hao Chen, Yoni Choukroun, Mark Collier, Enric Corona, Kurtis David, Ariel Ephrat, Maxime Gazeau, Ruiqi Gao, Chelsee Glover-Odom, Liangke Gui, Swaroop Guntupalli, Shan Han, Tingbo Hou, Jiri Hron, Hui Huang, Drew A. Hudson, Zhouyuan Huo, Linyi Jin, Christos Kaplanis, Dhrupad Karwa, Eunyoung Kim, Congtao Kuang, Eliot Laidlaw, José Lezama, Hao Li, Shuang Li, Yuchen Liu, Hanzi Mao, Mark Matthews, Matt McGill, Kay McKinney, Ricardo Monti, Mark Murphy, Joseph Ortiz, Roni Paiss, Frank Perbet, Ben Poole, Tal Reiss, Konstantinos Rematas, Guy Scully, Jeremy Shar, Shashank Shastry, Sri S, Omer Tov, Ruben Villegas, Andrey Voynov, Hongjie Wang, Luyu Wang, Kaustubh Sridhar, Mo Samsami, Stephen Spencer, Yufei Wang, Will Whitney, Rundi Wu, Joyce (Jingjing) Xie, Jesse Yin, Shiran Zada, Serena Zhang, Xiaofan Zhang, Zhengqi Li, Zhixing Zhang, Yuan Zhong, Shuo-yiin Chang, Dmitry Lagun, Ronny Huang, Yao Su, Ankush Gupta, Genzhi Ye, Haolin Jia, Weiqin Wang, Xi Xiong, Salah Zaiem, Carol Zheng, .&lt;/p&gt;&lt;p&gt;Genie 4 also required close collaborations across partner teams, we thank all our cross-functional partners that made this launch possible: Dina Bashkirova, Emil Bergner, Greta Borisko, Irina Blok, Melissa Byun, Gabe Clapper, Viral Carpenter, Michael Y. Chang, Maximo Cudich-Sieburger, Chloe Doan, Alisa Fortin, Shivani Ghanta, Vikram Gopali, Ezra Gorman, Khyatti Gupta, Sam Hasinoff, Philipp Henzler, Hector Hinestroza, Ed Hirst, Tyler Holland, Kristian Holsheimer, Tiffany Hu, Kapil Joshi, Randeep Katari, Pavan Kumar, Vikhyat Kumeria, Sam Kvaalen, Matthew Levine, Yinxiao Li, Yuchi Liu, Miao Luo, Nick Matarese, Kangfu Mei, Signe Nørly, Moises Oliveira, Eric Paskie, Manika Puri, Susanna Ricco, Andrey Ryabtsev, Cai Schumann, Nicole Brichtova, Andy Sekyere, Grace Shih, Melissa Smith, Duncan Noble Smith, Kenda Stewart, Rod Strougo, Jenn Sturgeon, Amy Zeng, Gaby Pearl, Eleanor Tomlinson, Kenyon Watson, Inês Ayer, Luke Talbot, Han-Yun Tsao, Guillaume Vernade, Karen Wang, Changchang Wu, Ian Wilkinson, Weijuan Xi, Jennifer Yick, Yunhan Zhao, Eric Zhang, Jason Zhang, Annie Zhou, James Zhou, Chris Walker, Alan Yam, Alex Chen, Cliff Lungaretti, Dan Motzenbecker, Kaloyan Kolev, Matthew Carey, Nate Zucker, Sam Lawton, Shashwath Santosh, Suz Chambers.&lt;/p&gt;&lt;p&gt;Thanks to Raia Hadsell, Aäron van den Oord, Josh Woodward, Steve Seitz, Carlos Hernandez, Elias Roman, Jung E. Kim, Abhishek Bapna, Eli Collins, Tulsee Doshi, Carolina Parada, Jie Tan, Koray Kavukcuoglu and Demis Hassabis for their insightful guidance and support throughout the research process.&lt;/p&gt;&lt;p&gt;Lastly, we thank our trusted tester and early access users that have provided feedback to help guide our research forward.&lt;/p&gt;&lt;article&gt;&lt;h3&gt;Genie 4&lt;/h3&gt;&lt;a href="https://deepmind.google/models/genie/"&gt;  &lt;div&gt;Learn more&lt;/div&gt; &lt;/a&gt;&lt;/article&gt;&lt;article&gt;&lt;h3&gt;Genie 3: A new frontier for world models&lt;/h3&gt;&lt;time&gt;August 2025&lt;/time&gt;&lt;span&gt;Models&lt;/span&gt;&lt;a href="https://deepmind.google/blog/genie-3-a-new-frontier-for-world-models/"&gt;  &lt;div&gt;Learn more&lt;/div&gt; &lt;/a&gt;&lt;/article&gt;&lt;article&gt;&lt;h3&gt;How to create effective prompts with Genie&lt;/h3&gt;&lt;a href="https://deepmind.google/models/genie/prompt-guide/"&gt;  &lt;div&gt;Learn more&lt;/div&gt; &lt;/a&gt;&lt;/article&gt;&lt;/main&gt;</ns0:encoded></item><item><title>Ghostty 1.4.0</title><link>https://ghostty.org/docs/install/release-notes/1-4-0</link><pubDate>Tue, 27 Oct 2026 16:51:22 +0000</pubDate><comments>https://news.ycombinator.com/item?id=50261998</comments><description>&lt;a href="https://news.ycombinator.com/item?id=50261998"&gt;Comments&lt;/a&gt;</description><ns0:encoded xmlns:ns0="http://purl.org/rss/1.0/modules/content/">&lt;div class="docs-mdx-module__jNbX7a__customMDX" morss_own_score="2.6307423919364217" morss_score="287.8493026570631"&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;This release features &lt;strong&gt;7 months of work&lt;/strong&gt; with changes from
&lt;strong&gt;172 contributors&lt;/strong&gt; over &lt;strong&gt;2,889 commits&lt;/strong&gt;. Thank you to all the contributors,
maintainers, community moderators, translators, packagers, and users
who each helped make this release possible.&lt;/p&gt;
&lt;p&gt;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. 🥰&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-4hwh-wx3w-3fqg"&gt;GHSA-4hwh-wx3w-3fqg&lt;/a&gt;.
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.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-mhff-mv4q-fp63"&gt;GHSA-mhff-mv4q-fp63&lt;/a&gt;.
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. This only requires displaying malicious
output.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-hcr9-7hcr-mjm8"&gt;GHSA-hcr9-7hcr-mjm8&lt;/a&gt;.
Malicious terminal output could crash Ghostty, closing every window,
via tmux control mode. tmux doesn't need to be installed. This affects
Ghostty 1.3.0 and 1.3.1.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-hp9c-qp4q-cpw3"&gt;GHSA-hp9c-qp4q-cpw3&lt;/a&gt;.
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.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-w9q4-5jvv-mcv4"&gt;GHSA-w9q4-5jvv-mcv4&lt;/a&gt;.
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
&lt;code&gt;scrollback-limit&lt;/code&gt; such as &lt;code&gt;0&lt;/code&gt;. The default isn't known to be affected.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-2r63-vmw6-3m3c"&gt;GHSA-2r63-vmw6-3m3c&lt;/a&gt;.
A crafted directory name could make the zsh shell integration send
arbitrary escape sequences, such as silently replacing the clipboard via
OSC 52. bash was affected in a more limited way. This only requires
&lt;code&gt;cd&lt;/code&gt;-ing into a directory from untrusted content, such as a cloned
repository.&lt;/li&gt;
&lt;li&gt;macOS: &lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-cw69-wm67-5pv8"&gt;GHSA-cw69-wm67-5pv8&lt;/a&gt;.
Cmd-clicking a crafted OSC 8 hyperlink could open unsafe local files or
custom URL schemes, leading to arbitrary command execution. Ghostty now
blocks unsafe targets and confirms custom URL schemes. This requires
user interaction (cmd-click) to trigger.&lt;/li&gt;
&lt;li&gt;macOS: &lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-mfw9-xcr3-7gfp"&gt;GHSA-mfw9-xcr3-7gfp&lt;/a&gt;.
The same issue as above for links detected by the &lt;code&gt;link&lt;/code&gt; configuration,
including the default URL matcher. This requires user interaction
(cmd-click) to trigger.&lt;/li&gt;
&lt;li&gt;macOS: &lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-v8cw-fg4j-jcc4"&gt;GHSA-v8cw-fg4j-jcc4&lt;/a&gt;.
Drag-and-drop text skipped paste protection, with the same impact as
above. This requires user interaction (drag-and-drop) to trigger.&lt;/li&gt;
&lt;li&gt;macOS: &lt;a href="https://github.com/ghostty-org/ghostty/security/advisories/GHSA-mxqx-236q-wrv7"&gt;GHSA-mxqx-236q-wrv7&lt;/a&gt;.
Opening a file whose name contains control characters could run a
different command than the one shown in the confirmation dialog. This
requires a crafted file on your system and confirming the dialog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Ghostty 1.4 supports macOS 27 (Golden Gate). Most of the work was
compatibility fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tabs in the titlebar (&lt;code&gt;macos-titlebar-style = tabs&lt;/code&gt;) lay out correctly
again.&lt;/li&gt;
&lt;li&gt;The native tab bar no longer draws as a solid gray bar on top of your
theme. It now lets the new glass style blend with your terminal
background.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;macos-titlebar-style = hidden&lt;/code&gt; no longer covers the top lines of the
terminal when Reduce Transparency is on.&lt;/li&gt;
&lt;li&gt;The app icon no longer has a thin border.&lt;/li&gt;
&lt;li&gt;The Shortcuts "New Window" action no longer opens two windows when
Ghostty is running without any windows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ghostty 1.4 remains fully compatible with prior macOS versions back to
and including macOS 13 (Ventura). See the
&lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#system-requirements"&gt;system requirements&lt;/a&gt; for more details.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Note&lt;/p&gt;&lt;p&gt;Ghostty 1.3.1 works on macOS 27, but it has some of the visual issues
listed above, such as the gray tab bar.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Ghostty now supports Kitty graphics
&lt;a href="https://sw.kovidgoyal.net/kitty/graphics-protocol/#animation"&gt;animation&lt;/a&gt;
and &lt;a href="https://sw.kovidgoyal.net/kitty/graphics-protocol/#relative-placements"&gt;relative placements&lt;/a&gt;.
These were the last major features of the Kitty graphics protocol that
Ghostty didn't support.&lt;/p&gt;
&lt;p&gt;Programs that display animated images with the Kitty protocol, such as an
animated GIF shown with &lt;code&gt;kitten icat&lt;/code&gt;, now animate in Ghostty instead of
showing a single still frame. Frame transmission, composition, and playback
control are all supported, and animations pause while the terminal isn't
visible. Relative placements let a program position one image relative to
another image's placement, so the child image moves along with its parent.&lt;/p&gt;
&lt;p&gt;We also did a full conformance pass against the specification and Kitty
itself, fixing dozens of behavioral differences. For example, images now
scroll with text inside scroll regions (&lt;a href="https://github.com/ghostty-org/ghostty/issues/4323"&gt;#4323 &lt;/a&gt;), retransmitting an image
ID replaces the old image (&lt;a href="https://github.com/ghostty-org/ghostty/issues/6711"&gt;#6711 &lt;/a&gt;), and invalid image data now gets an
error response instead of silence, which could leave clients hanging. The
full list is in the &lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#terminal-capabilities"&gt;terminal capabilities&lt;/a&gt; section.&lt;/p&gt;
&lt;p&gt;Kitty graphics are faster, too. Image payloads are now parsed in bulk
with SIMD instead of one byte at a time, making large image transfers
&lt;strong&gt;about 16x faster&lt;/strong&gt; to parse in our benchmarks (64 MiB of image data,
x86_64 Linux), and drawing images costs much less per frame.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Ghostty now transparently compresses scrollback that isn't visible,
reducing the physical memory those pages use by &lt;strong&gt;70% to 90%&lt;/strong&gt; for typical
text-heavy history. 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.&lt;/p&gt;
&lt;p&gt;Thanks to compression, &lt;strong&gt;the default scrollback limit has been raised from
10 MB to 50 MB&lt;/strong&gt; per terminal. On platforms that support compression, a
full scrollback still generally uses less physical memory than the old
10 MB limit did.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Note&lt;/p&gt;&lt;p&gt;Compression lowers &lt;em&gt;resident&lt;/em&gt; (physical) memory, not &lt;em&gt;virtual&lt;/em&gt; memory, so
look at resident memory when measuring it. It is currently available on
macOS and 64-bit Linux.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Beyond scrollback, memory usage is lower in many places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new, empty terminal now uses about &lt;strong&gt;16 KiB&lt;/strong&gt; of terminal page memory
on macOS, down from 128 KiB in Ghostty 1.3.1.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.
Rebuilding them when a tab becomes visible again takes under a
millisecond.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are performance improvements across the board in Ghostty 1.4
that yield significant gains compared to prior Ghostty versions.&lt;/p&gt;
&lt;p&gt;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. 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 &lt;strong&gt;25% to 55%&lt;/strong&gt;
on macOS (M4 Max, plain and Unicode text) over Ghostty 1.3.x.&lt;/p&gt;
&lt;p&gt;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 &lt;a href="https://asciinema.org/"&gt;asciinema&lt;/a&gt; is processed about 25% faster.
Together, these changes took &lt;code&gt;cat&lt;/code&gt;-ing a 150 MB text file on macOS from
1.5 seconds to 566 milliseconds.&lt;/p&gt;
&lt;p&gt;Other notable improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resize:&lt;/strong&gt; resizing a terminal with a large scrollback is about &lt;strong&gt;6x
faster&lt;/strong&gt; (120x80 with 10,000 lines of scrollback), and 3x to 5x faster
with history full of CJK text or emoji.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendering:&lt;/strong&gt; the renderer holds the terminal lock &lt;strong&gt;2.7x to 11x&lt;/strong&gt;
less per frame, leaving more time for the I/O thread during heavy
output.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy and search:&lt;/strong&gt; formatting terminal contents as plain text, HTML,
or VT, which backs clipboard copy, &lt;code&gt;write_screen_file&lt;/code&gt;, and scrollback
search, is 1.5x to 8x faster.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Launch (macOS):&lt;/strong&gt; about 15% faster from launch to visible window, and
27% faster to the first rendered frame.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Idle energy:&lt;/strong&gt; on macOS, the renderer's display link now sleeps when
there's nothing to draw. On GTK, hidden tabs stop rendering, matching
macOS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Large OSC sequences:&lt;/strong&gt; OSC 52 clipboard payloads parse about &lt;strong&gt;30x
faster&lt;/strong&gt;, and even short sequences like title changes are about 6x
faster.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PRs: &lt;a href="https://github.com/ghostty-org/ghostty/issues/14052"&gt;#14052 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14269"&gt;#14269 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The GTK app has a new rendering pipeline. It no longer uses &lt;code&gt;GtkGLArea&lt;/code&gt;.
Instead, the renderer draws with EGL on its own thread, exports each frame
as a DMABUF, and hands it to GTK to display. 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.&lt;/p&gt;
&lt;p&gt;The most visible result is crisp text under fractional scaling. Text and
box-drawing characters are no longer blurry with fractional display
scaling such as 125% or 150% (&lt;a href="https://github.com/ghostty-org/ghostty/issues/1938"&gt;#1938 &lt;/a&gt;). We fixed this once before, but it
came back after upstream GTK changes. Ghostty now renders at the window's
true fractional scale, so every rendered pixel maps to exactly one pixel
on screen.&lt;/p&gt;
&lt;p&gt;The new render surface needs a system EGL library (see
&lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#changes-for-package-maintainers"&gt;Changes for Package Maintainers&lt;/a&gt;).
On GPU drivers that can't export DMABUFs, Ghostty falls back to copying
frames through the CPU, which is slower but works.&lt;/p&gt;
&lt;p&gt;Ghostty now implements the
&lt;a href="https://sw.kovidgoyal.net/kitty/clipboard/"&gt;Kitty clipboard protocol&lt;/a&gt;
(OSC 5522) on both macOS and GTK. Ghostty 1.3 could parse the protocol
but didn't implement it.&lt;/p&gt;
&lt;p&gt;OSC 52 can only read and write plain text. The Kitty clipboard protocol
lets programs running in the terminal read and write any kind of clipboard
data, such as images or HTML, and lets them pick among the formats on the
clipboard. Programs can also enable paste events (mode 5522), which tell
the program what formats a paste contains so it can read the one it
wants. This is how a terminal program can accept a pasted image, for
example.&lt;/p&gt;
&lt;p&gt;Clipboard access follows the existing &lt;code&gt;clipboard-read&lt;/code&gt; and
&lt;code&gt;clipboard-write&lt;/code&gt; configurations. By default, reads prompt for permission
and writes are allowed. The permission prompt shows a preview of the
clipboard contents, including images. Programs that send a password can
have your answer remembered for the rest of that terminal session. A new
&lt;code&gt;clipboard-write-limit-bytes&lt;/code&gt; configuration limits the size of a single
write (default 64 MiB). A write over the limit fails and leaves the
clipboard untouched.&lt;/p&gt;
&lt;p&gt;PRs: &lt;a href="https://github.com/ghostty-org/ghostty/issues/10423"&gt;#10423 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13706"&gt;#13706 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can now rearrange splits on GTK by dragging them, matching the macOS
feature introduced in Ghostty 1.3. When a tab has two or more splits, each
split shows a drag handle at the top. Grab the handle and drop the split
onto any other split, including splits in other tabs and windows. An
overlay shows which side of the target split it will land on. The terminal
contents, working directory, and running processes all move with it.&lt;/p&gt;
&lt;p&gt;A new &lt;code&gt;drag-handle&lt;/code&gt; configuration controls when drag handles are shown on
both macOS and GTK: &lt;code&gt;auto&lt;/code&gt; (default), &lt;code&gt;always&lt;/code&gt;, or &lt;code&gt;never&lt;/code&gt;. With &lt;code&gt;never&lt;/code&gt;,
splits can't be rearranged with the mouse. Hiding the handles was a
common request from users who found them in the way.&lt;/p&gt;
&lt;p&gt;On GTK, splits can only be dropped onto other splits. Dragging a split out
to create a new tab or window is macOS-only.&lt;/p&gt;
&lt;p&gt;Ghostty 1.4 includes dozens of improvements to core terminal emulation. We
now run &lt;a href="https://github.com/ThomasDickey/esctest2"&gt;esctest&lt;/a&gt;, Thomas Dickey's
terminal conformance suite, against Ghostty's terminal core in CI.
Alongside that, we fixed many differences from xterm in cursor movement
within margins, tab stops, character sets, mode reports, and more. You
can find the full list of related changes in the
&lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#terminal-capabilities"&gt;terminal capabilities&lt;/a&gt; section.&lt;/p&gt;
&lt;p&gt;Ghostty also supports several new sequences, including soft terminal reset
(DECSTR), extended cursor position reports (DECXCPR), backarrow key mode
(DECBKM), and screen size reports in characters (&lt;code&gt;CSI 19 t&lt;/code&gt;). Programs can
also now ask whether the terminal is visible using
&lt;a href="https://rockorager.dev/misc/visibility-reports/"&gt;visibility reports&lt;/a&gt;
(mode 2033), so they can stop rendering while hidden.&lt;/p&gt;
&lt;p&gt;Keyboard encoding also matches xterm more closely, with fixes for
&lt;code&gt;modifyOtherKeys&lt;/code&gt; mode 2 and legacy Alt-as-Escape encoding of non-ASCII
keys.&lt;/p&gt;
&lt;p&gt;Two new sequences are disabled by default because they can be abused by
untrusted programs, including ones running on a remote machine:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Allow programs to resize the window (CSI 8 t)
vt-window-resize-allowed = true

# Allow programs to request screen checksums (DECRQCRA)
vt-xt-checksum-report = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ghostty 1.2 introduced &lt;a href="https://ghostty.org/docs/features/ssh"&gt;SSH shell integration features&lt;/a&gt;
as a work in progress. In Ghostty 1.4, they're backed by a new
&lt;code&gt;ghostty +ssh&lt;/code&gt; CLI action: a drop-in &lt;code&gt;ssh&lt;/code&gt; wrapper that prepares the
remote session for Ghostty and then runs the real &lt;code&gt;ssh&lt;/code&gt; with your
arguments forwarded unchanged.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ghostty +ssh user@example.com

&lt;span&gt;# Or alias it so every ssh invocation goes through it&lt;/span&gt;
&lt;span&gt;alias&lt;/span&gt; ssh=&lt;span&gt;'ghostty +ssh --'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Before connecting, &lt;code&gt;+ssh&lt;/code&gt; installs Ghostty's terminfo on the remote host
so the proper &lt;code&gt;xterm-ghostty&lt;/code&gt; &lt;code&gt;TERM&lt;/code&gt; value can be used, and forwards
&lt;code&gt;COLORTERM&lt;/code&gt;, &lt;code&gt;TERM_PROGRAM&lt;/code&gt;, and &lt;code&gt;TERM_PROGRAM_VERSION&lt;/code&gt;. If the terminfo
install fails (for example, &lt;code&gt;tic&lt;/code&gt; isn't available on the remote), it falls
back to &lt;code&gt;TERM=xterm-256color&lt;/code&gt;. Flags such as &lt;code&gt;--terminfo=false&lt;/code&gt;,
&lt;code&gt;--forward-env=false&lt;/code&gt;, and &lt;code&gt;--verbose&lt;/code&gt; control each step.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;ssh-env&lt;/code&gt; and &lt;code&gt;ssh-terminfo&lt;/code&gt; shell integration features (still opt-in)
now call &lt;code&gt;+ssh&lt;/code&gt; too. Previously, each shell integration carried its own copy
of this logic, which made up roughly a third of our shell integration
scripts. Now bash, zsh, fish, elvish, and Nushell all behave identically,
and you can get the same behavior from scripts or anywhere else by calling
&lt;code&gt;ghostty +ssh&lt;/code&gt; directly.&lt;/p&gt;
&lt;p&gt;The terminfo install itself is also more reliable. Ghostty now always
installs its own bundled terminfo rather than accepting whatever
&lt;code&gt;xterm-ghostty&lt;/code&gt; entry the remote already has, and it reinstalls
automatically when a Ghostty update changes the terminfo. It also no longer
needs &lt;code&gt;infocmp&lt;/code&gt; or Ghostty's terminfo on the local machine. Installs are
cached per host &lt;em&gt;and&lt;/em&gt; port, so two machines behind one address no longer
share a cache entry. And &lt;code&gt;ssh-env&lt;/code&gt; no longer silently overrides &lt;code&gt;SetEnv&lt;/code&gt;
entries in your &lt;code&gt;~/.ssh/config&lt;/code&gt; (&lt;a href="https://github.com/ghostty-org/ghostty/issues/11518"&gt;#11518 &lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;+ssh-cache&lt;/code&gt; command that manages this cache now takes positional
destinations (&lt;code&gt;ghostty +ssh-cache user@example.com&lt;/code&gt;) and has a new
&lt;code&gt;--prune=30d&lt;/code&gt; flag. See the &lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#breaking-changes"&gt;breaking changes&lt;/a&gt; if you
script against &lt;code&gt;+ssh-cache&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt; The minimum required macOS version for Ghostty 1.4 remains
unchanged (macOS 13 Ventura). Ghostty is now compatible with macOS 27.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GTK:&lt;/strong&gt; Ghostty 1.4 requires &lt;strong&gt;GTK 4.18&lt;/strong&gt; and &lt;strong&gt;libadwaita 1.7&lt;/strong&gt;, up from
GTK 4.14 and libadwaita 1.5 in Ghostty 1.3. This aligns with our
&lt;a href="https://ghostty.org/docs/linux/#supported-gtkadwaita-versions"&gt;GTK/Adwaita version policy&lt;/a&gt;.
Notably, Ubuntu 24.04 LTS doesn't meet this requirement. Systems with
older GTK or Adwaita versions can work around this requirement by using an
older version of Ghostty or the Flatpak package. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14330"&gt;#14330 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenGL (GTK):&lt;/strong&gt; The minimum required OpenGL version remains 4.3, but
Ghostty now renders through EGL instead of GTK's OpenGL widget. This
should be invisible for nearly everyone, but if Ghostty fails to start
with an EGL error, please make sure your GPU driver provides a working
EGL implementation.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Important&lt;/p&gt;&lt;p&gt;We previously announced that Ghostty 1.4 would require macOS 14.
Nothing forced our hand to do this in this release, so we kept macOS
13 support. &lt;strong&gt;We still plan to drop macOS 13 in a future release.&lt;/strong&gt; Apple
dropped security support for macOS 13 in the fall of 2025, so we
recommend upgrading regardless.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The following behaviors have changed in 1.4.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;copy-on-select&lt;/code&gt; has been reworked and now accepts &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;primary&lt;/code&gt;,
&lt;code&gt;clipboard&lt;/code&gt;, or &lt;code&gt;both&lt;/code&gt;. &lt;strong&gt;The meaning of &lt;code&gt;clipboard&lt;/code&gt; has changed:&lt;/strong&gt; it
previously copied to both the selection clipboard and the system
clipboard, and now copies only to the system clipboard. If you set
&lt;code&gt;copy-on-select = clipboard&lt;/code&gt; and want the old behavior, change it to
&lt;code&gt;both&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12600"&gt;#12600 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12604"&gt;#12604 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;copy-on-select&lt;/code&gt; now defaults to &lt;code&gt;none&lt;/code&gt; (previously &lt;code&gt;true&lt;/code&gt;), so
selecting text no longer copies it anywhere and middle-click paste of the
selection no longer works by default. To restore the 1.3 behavior, set
&lt;code&gt;copy-on-select = primary&lt;/code&gt;. Note that an explicit &lt;code&gt;copy-on-select = true&lt;/code&gt;
on macOS now copies selections to the system clipboard, which is
different from 1.3. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12600"&gt;#12600 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12604"&gt;#12604 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;cmd+arrow_up&lt;/code&gt; and &lt;code&gt;cmd+arrow_down&lt;/code&gt; now run &lt;code&gt;jump_to_prompt&lt;/code&gt; again,
matching Terminal.app and Ghostty 1.2. In 1.3, these keys were hardcoded
to scroll to the top and bottom and couldn't be rebound. To keep the 1.3
behavior, set &lt;code&gt;keybind = cmd+arrow_up=scroll_to_top&lt;/code&gt; and
&lt;code&gt;keybind = cmd+arrow_down=scroll_to_bottom&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12245"&gt;#12245 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The default &lt;code&gt;ctrl+shift+page_up&lt;/code&gt; and &lt;code&gt;ctrl+shift+page_down&lt;/code&gt; keybinds
now move the current tab left and right (&lt;code&gt;move_tab&lt;/code&gt;), matching Firefox,
GNOME Terminal, and VS Code. &lt;code&gt;jump_to_prompt&lt;/code&gt; moved to
&lt;code&gt;ctrl+shift+arrow_up&lt;/code&gt; and &lt;code&gt;ctrl+shift+arrow_down&lt;/code&gt;, so programs running in
the terminal no longer receive those keys. If a program you use needs
them, unbind them with &lt;code&gt;keybind = ctrl+shift+arrow_up=unbind&lt;/code&gt; and
&lt;code&gt;keybind = ctrl+shift+arrow_down=unbind&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/4998"&gt;#4998 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12458"&gt;#12458 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The list below contains deprecations that remain compatible today through
a compatibility layer, but may break in a future release if they are
ignored:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;scrollback-limit&lt;/code&gt; has been renamed to &lt;code&gt;scrollback-limit-bytes&lt;/code&gt;, to make
room for the new &lt;code&gt;scrollback-limit-lines&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13473"&gt;#13473 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;copy-on-select = true&lt;/code&gt; is replaced with &lt;code&gt;copy-on-select = primary&lt;/code&gt; on
Linux and FreeBSD, or &lt;code&gt;copy-on-select = clipboard&lt;/code&gt; on macOS.
&lt;code&gt;copy-on-select = false&lt;/code&gt; is replaced with &lt;code&gt;copy-on-select = none&lt;/code&gt;.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12600"&gt;#12600 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12604"&gt;#12604 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is no set timeline to remove these deprecations, but we recommend
adapting to the new configurations sooner rather than later to avoid
any possible disruptions in the future.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scrollback history is now transparently compressed while the terminal
is idle, reducing the physical memory used by compressed scrollback by
70% to 90% for typical text. Compression is available on macOS and 64-bit
Linux and can be disabled with the new &lt;code&gt;scrollback-compression&lt;/code&gt;
configuration. Because of this, the default scrollback limit has been
raised from 10 MB to 50 MB, which on average still uses less memory than
a full scrollback did previously. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13264"&gt;#13264 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new configuration &lt;code&gt;scrollback-limit-lines&lt;/code&gt; limits scrollback by number
of lines instead of bytes. The existing &lt;code&gt;scrollback-limit&lt;/code&gt; configuration
has been renamed to &lt;code&gt;scrollback-limit-bytes&lt;/code&gt; (the old name continues to
work). If both are set, the first limit reached applies, and both accept
&lt;code&gt;unlimited&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13473"&gt;#13473 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;copy-on-select&lt;/code&gt; now accepts &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;primary&lt;/code&gt;, &lt;code&gt;clipboard&lt;/code&gt;, and &lt;code&gt;both&lt;/code&gt;
and no longer affects middle-click paste (see &lt;code&gt;middle-click-action&lt;/code&gt;).
&lt;code&gt;clipboard&lt;/code&gt; now copies only to the system clipboard, so use &lt;code&gt;both&lt;/code&gt; for the
previous behavior. The default on macOS is now &lt;code&gt;none&lt;/code&gt;. See the
&lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#breaking-changes"&gt;breaking changes&lt;/a&gt; for migration details. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12600"&gt;#12600 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new configuration &lt;code&gt;middle-click-action&lt;/code&gt; configures the behavior of
middle-clicking: &lt;code&gt;primary-paste&lt;/code&gt; (default) pastes from the selection
clipboard, &lt;code&gt;clipboard-paste&lt;/code&gt; pastes from the system clipboard, and
&lt;code&gt;ignore&lt;/code&gt; does nothing. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12478"&gt;#12478 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new binding action &lt;code&gt;move_tab_to_new_window&lt;/code&gt; moves the current tab into
a new window of its own. It is also available in the command palette.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/2630"&gt;#2630 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new CLI command &lt;code&gt;+explain-config&lt;/code&gt; prints the documentation for a
configuration option or binding action, e.g.
&lt;code&gt;ghostty +explain-config font-size&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11546"&gt;#11546 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;+explain-config&lt;/code&gt; and &lt;code&gt;+show-config&lt;/code&gt; CLI commands now page their
output through &lt;code&gt;$GHOSTTY_PAGER&lt;/code&gt; or &lt;code&gt;$PAGER&lt;/code&gt; (falling back to &lt;code&gt;less&lt;/code&gt;) when
run interactively. Paging can be disabled with &lt;code&gt;--no-pager&lt;/code&gt; or by setting
the pager to an empty value. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11940"&gt;#11940 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new configuration &lt;code&gt;drag-handle&lt;/code&gt; controls when the split drag handles
are shown: &lt;code&gt;auto&lt;/code&gt; (default), &lt;code&gt;always&lt;/code&gt;, or &lt;code&gt;never&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13706"&gt;#13706 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13709"&gt;#13709 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scrollback search now wraps around when navigating past the first or
last match. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11449"&gt;#11449 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new configuration &lt;code&gt;link-osc8&lt;/code&gt; (default &lt;code&gt;true&lt;/code&gt;) can be set to &lt;code&gt;false&lt;/code&gt; to
disable OSC 8 hyperlinks entirely. Disabled OSC 8 hyperlinks are not
highlighted, previewed, copied, or opened. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13634"&gt;#13634 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Processes running in Ghostty now receive a &lt;code&gt;GHOSTTY_SURFACE_ID&lt;/code&gt;
environment variable that uniquely identifies the terminal they are
running in. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12027"&gt;#12027 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The right-click context menu now has a "Close Split" item. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11173"&gt;#11173 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/11174"&gt;#11174 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Upgrade to Unicode 18. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14293"&gt;#14293 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I/O throughput is 25% to 55% higher on macOS by reading from the pty
concurrently with parsing previously read output. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13209"&gt;#13209 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VT processing is significantly faster across the board. Plain text is up
to ~6x faster, real-world output (measured against a large asciinema
dataset) is ~24% faster, grapheme-heavy output is ~3x faster, and DEC
special graphics (line drawing), repeated characters (&lt;code&gt;REP&lt;/code&gt;),
hyperlink-heavy output, and scroll regions are all faster. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13220"&gt;#13220 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13226"&gt;#13226 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13231"&gt;#13231 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13294"&gt;#13294 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13625"&gt;#13625 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13826"&gt;#13826 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14356"&gt;#14356 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Large OSC sequences, such as OSC 52 clipboard writes, are parsed ~30x
faster and small OSC sequences, such as title changes, ~6x faster.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14011"&gt;#14011 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13565"&gt;#13565 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Resizing with reflow is ~6x faster with large scrollback and 3x to 5x
faster with scrollback heavy in wide characters such as CJK or emoji.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13537"&gt;#13537 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13827"&gt;#13827 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Terminals use significantly less memory. A new terminal now uses ~16 KiB
of physical memory for its screen instead of 128 KiB on macOS, every
terminal page uses 30% less memory, and memory freed from scrollback
(such as by clearing it) is now returned to the operating system.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13240"&gt;#13240 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13245"&gt;#13245 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14130"&gt;#14130 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14137"&gt;#14137 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14138"&gt;#14138 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Kitty graphics are faster. Large image transfers are parsed in bulk using
SIMD, zlib-compressed images decompress ~17% faster, pixel format
conversion avoids an extra copy, and the per-frame cost of drawing images
is much lower, especially with Unicode placeholder images on screen or
long scrollback. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13270"&gt;#13270 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13281"&gt;#13281 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13987"&gt;#13987 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14422"&gt;#14422 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14780"&gt;#14780 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14789"&gt;#14789 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Formatting terminal contents is 1.5x to 8x faster, which speeds up
clipboard copy (plain, HTML, and VT), &lt;code&gt;write_screen_file&lt;/code&gt; and related
actions, and scrollback search. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13587"&gt;#13587 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The renderer holds the terminal lock 2.7x to 11x less time per frame,
and glyph and font lookups are faster. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13227"&gt;#13227 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14300"&gt;#14300 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14301"&gt;#14301 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14420"&gt;#14420 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14406"&gt;#14406 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13258"&gt;#13258 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command-palette-entry = clear&lt;/code&gt; removes all command palette entries,
including the default entries. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12682"&gt;#12682 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;window-padding-balance&lt;/code&gt; has a new value &lt;code&gt;equal&lt;/code&gt; that balances padding
equally on all four sides without capping the top padding. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11491"&gt;#11491 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;theme&lt;/code&gt; now expands &lt;code&gt;~&lt;/code&gt; to the home directory in theme file paths,
including in separate light and dark themes. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13840"&gt;#13840 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+list-themes&lt;/code&gt; now supports &lt;code&gt;g&lt;/code&gt; and &lt;code&gt;G&lt;/code&gt; to jump to the first and
last theme, and &lt;code&gt;ctrl+d&lt;/code&gt; and &lt;code&gt;ctrl+u&lt;/code&gt; to page down and up. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13681"&gt;#13681 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14607"&gt;#14607 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The terminal inspector can now copy terminal I/O events or export them
to a file. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13519"&gt;#13519 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bundled themes updated to &lt;a href="https://github.com/mbadolato/iTerm2-Color-Schemes/releases/tag/release-20261019-151001-86a776d"&gt;release-20261019-151001-86a776d&lt;/a&gt;.
This adds 356 new themes and renames or removes none. The colors of 10
existing themes changed upstream: Adwaita, Adwaita Dark, Atom One Light,
Catppuccin Frappe, Catppuccin Latte, Catppuccin Macchiato, Catppuccin
Mocha, Cursor Dark, Dark Modern, and Electron Highlighter.&lt;/li&gt;
&lt;li&gt;Fix configuration parsing silently ignoring all settings after a comment
or blank line that happened to end at an internal buffer boundary. This
typically only affected long configuration files. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13638"&gt;#13638 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix a performance degradation where, after a long uptime, the renderer
rebuilt its full terminal state on every frame. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13585"&gt;#13585 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix the automatically created configuration file being empty instead of
containing the configuration template. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13774"&gt;#13774 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+edit-config&lt;/code&gt; works when &lt;code&gt;$EDITOR&lt;/code&gt; or &lt;code&gt;$VISUAL&lt;/code&gt; contains arguments,
such as &lt;code&gt;zed --new&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11897"&gt;#11897 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adjust-cursor-height&lt;/code&gt; works again. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13225"&gt;#13225 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mouse selection improvements: dragging after a &lt;code&gt;ctrl&lt;/code&gt;/&lt;code&gt;cmd&lt;/code&gt; triple-click
output selection now extends the selection by command output, autoscroll
stops when the screen switches (e.g. to the alternate screen), a force
touch on macOS selects the word at the press location without starting a
drag, and releasing a drag no longer activates a link or prompt click.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12830"&gt;#12830 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Double-click word selection no longer continues across hard line breaks,
and double-clicking either half of a wide character (such as CJK) selects
the whole word. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14354"&gt;#14354 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14391"&gt;#14391 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wide characters at the edges of a selection are now consistently rendered
as selected and included when copying, including when the wide character
wraps onto a new internal page. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14632"&gt;#14632 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14651"&gt;#14651 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Triple-click line selection no longer pulls in neighboring prompt text
when clicking blank cells between OSC 133 prompt boundaries. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14553"&gt;#14553 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Link detection and double-click selection no longer merge prompt text
with the command text next to it when shell integration is active.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12435"&gt;#12435 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;File paths opened with &lt;code&gt;cmd&lt;/code&gt;/&lt;code&gt;ctrl&lt;/code&gt;-click no longer include trailing
spaces, which broke opening paths printed by some TUIs. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13505"&gt;#13505 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mouse releases are now reported to the program that received the mouse
press when clicking at a shell prompt with click-to-move enabled. This
fixes double-click selection in programs like fzf's &lt;code&gt;ctrl+r&lt;/code&gt; history
search. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14710"&gt;#14710 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shell redraws after a resize are no longer processed at the old terminal
size. This fixes one cause of duplicated or misplaced prompts after
resizing. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14706"&gt;#14706 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scrolling, such as clicking in the scrollbar, now works with very large
scrollback (millions of lines). &lt;a href="https://github.com/ghostty-org/ghostty/issues/13048"&gt;#13048 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Custom &lt;code&gt;command-palette-entry&lt;/code&gt; actions with string parameters, such as
&lt;code&gt;set_tab_title&lt;/code&gt;, no longer have their parameters escaped when run from
the command palette. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13609"&gt;#13609 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;HTML clipboard copies no longer include a superfluous trailing newline.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13543"&gt;#13543 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Copying as VT (&lt;code&gt;copy_to_clipboard:vt&lt;/code&gt;) and VT screen files now preserve
OSC 8 hyperlinks, empty gaps between text, and cells that only have
a background color, such as colored status bars. VT screen files also
keep trailing blank rows. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14711"&gt;#14711 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14725"&gt;#14725 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14766"&gt;#14766 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The mouse pointer now restores the shape set by the running program
(OSC 22) after releasing modifier keys instead of resetting to the
default. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14128"&gt;#14128 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Custom shaders no longer receive swapped selection foreground and
background color uniforms. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14460"&gt;#14460 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ghostty no longer floods the logs with "adjusting page capacity"
messages during output with many styles, graphemes, or hyperlinks.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14631"&gt;#14631 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix stale wrap and prompt state on rows reused after scrolling or
erasing, which could cause incorrect copy, search, selection, and reflow
results. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14010"&gt;#14010 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix stale rendering of the previous row after erasing or deleting a
wrapped wide character. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14054"&gt;#14054 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix a freeze when reloading the configuration while a program is flooding
the terminal with queries, such as color queries. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14833"&gt;#14833 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+list-themes&lt;/code&gt; no longer crashes on some keys when the search
matches no themes, and the keypad down key now moves one row instead of
21. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14612"&gt;#14612 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14605"&gt;#14605 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix crashes in scrollback search after clearing the scrollback, resizing,
or erasing history. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11957"&gt;#11957 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13274"&gt;#13274 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13282"&gt;#13282 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix crashes and viewport corruption when resizing with scrolled-back
history or with the cursor near the bottom of the screen. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12300"&gt;#12300 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12907"&gt;#12907 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12935"&gt;#12935 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix a use-after-free crash when clicking or selecting text during heavy
output. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12463"&gt;#12463 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix a possible crash when reflowing hyperlinks during a resize. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13524"&gt;#13524 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix possible crashes or memory corruption when scrolling or erasing rows
across a page boundary that needed more capacity. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13394"&gt;#13394 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13397"&gt;#13397 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix possible crashes and memory corruption found via fuzzing when
printing causes a page to grow, or after clearing the screen into
scrollback. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11261"&gt;#11261 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13997"&gt;#13997 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix many latent crashes and undefined behavior in selection, pins,
search, title and working directory updates, and resize error handling.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12894"&gt;#12894 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13275"&gt;#13275 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13278"&gt;#13278 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13367"&gt;#13367 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix a possible crash or corrupted input when many pty writes are queued,
such as during large pastes. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13659"&gt;#13659 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix an out-of-bounds access when IME preedit text with wide characters
is composed between existing wide characters, such as with Korean input.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12479"&gt;#12479 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix a crash when pressing or releasing mouse button 11. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14759"&gt;#14759 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix the &lt;code&gt;write_screen_file&lt;/code&gt;, &lt;code&gt;write_scrollback_file&lt;/code&gt;, and
&lt;code&gt;write_selection_file&lt;/code&gt; actions leaking two file descriptors on each use,
which could eventually prevent opening new terminals. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13644"&gt;#13644 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix memory and file descriptor leaks in terminal I/O, including for writes
in read-only mode and files read via the &lt;code&gt;input&lt;/code&gt; configuration.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13574"&gt;#13574 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13579"&gt;#13579 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13931"&gt;#13931 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;vt: Kitty graphics animation is now fully supported: frame transmission,
composition, animation control, and rendering. &lt;a href="https://github.com/ghostty-org/ghostty/issues/5255"&gt;#5255 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13943"&gt;#13943 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics relative placements (&lt;code&gt;P=&lt;/code&gt;, &lt;code&gt;Q=&lt;/code&gt;, &lt;code&gt;H=&lt;/code&gt;, &lt;code&gt;V=&lt;/code&gt;) are now
supported, allowing images to be positioned relative to other images.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13939"&gt;#13939 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Support the Kitty graphics transient image usage hint. Transient
images are evicted first when image storage is full. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13389"&gt;#13389 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: The Kitty clipboard protocol (OSC 5522) is now implemented on macOS
and GTK, including paste events (mode 5522). Reads and writes follow
&lt;code&gt;clipboard-read&lt;/code&gt; and &lt;code&gt;clipboard-write&lt;/code&gt;, and a new
&lt;code&gt;clipboard-write-limit-bytes&lt;/code&gt; configuration limits the size of a single
write. &lt;a href="https://github.com/ghostty-org/ghostty/issues/10549"&gt;#10549 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13962"&gt;#13962 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13993"&gt;#13993 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13995"&gt;#13995 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13998"&gt;#13998 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14002"&gt;#14002 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14061"&gt;#14061 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Support visibility reports (mode 2033 and &lt;code&gt;CSI ? 998 n&lt;/code&gt;), which tell
programs when the terminal is not visible, such as in a background tab
or on another workspace, so they can stop rendering. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13494"&gt;#13494 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Programs can resize the window with the xterm &lt;code&gt;CSI 8 ; rows ; cols t&lt;/code&gt;
sequence if the new &lt;code&gt;vt-window-resize-allowed&lt;/code&gt; configuration is enabled
(default off). The request is ignored in splits, windows with multiple
tabs, the quick terminal, and fullscreen, maximized, or tiled windows.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/1115"&gt;#1115 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14375"&gt;#14375 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Support OSC 133 &lt;code&gt;click_events=2&lt;/code&gt;, which reports prompt clicks with
row coordinates relative to the prompt. &lt;a href="https://github.com/ghostty-org/ghostty/issues/10865"&gt;#10865 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12953"&gt;#12953 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Support soft terminal reset (DECSTR, &lt;code&gt;CSI ! p&lt;/code&gt;), which resets
modes, margins, and text attributes without clearing the screen.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14538"&gt;#14538 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Support backarrow key mode (DECBKM, mode 67), which lets programs
choose whether backspace sends &lt;code&gt;DEL&lt;/code&gt; (&lt;code&gt;0x7f&lt;/code&gt;, the default) or &lt;code&gt;BS&lt;/code&gt;
(&lt;code&gt;0x08&lt;/code&gt;). &lt;a href="https://github.com/ghostty-org/ghostty/issues/12226"&gt;#12226 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Support the DECRQCRA and XTCHECKSUM screen checksum reports, which
are mostly used by terminal test suites. Because a program can use these
to read the screen contents, they are disabled unless the new
&lt;code&gt;vt-xt-checksum-report&lt;/code&gt; configuration is enabled. The new
&lt;code&gt;vt-xt-checksum-extension&lt;/code&gt; configuration controls how the checksum is
calculated. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14483"&gt;#14483 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Respond to &lt;code&gt;CSI 19 t&lt;/code&gt; (report screen size in characters) and to
DECXCPR (&lt;code&gt;CSI ? 6 n&lt;/code&gt;) extended cursor position requests. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14633"&gt;#14633 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14673"&gt;#14673 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: DECRQM now answers ANSI mode queries (&lt;code&gt;CSI Ps $ p&lt;/code&gt;), reports DECECM
and other unimplemented ANSI modes as permanently reset like xterm, and
no longer truncates mode numbers above 32767 in its reply. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12505"&gt;#12505 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14236"&gt;#14236 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14237"&gt;#14237 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14672"&gt;#14672 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Ghostty terminfo now advertises overline support (&lt;code&gt;Smol&lt;/code&gt;/&lt;code&gt;Rmol&lt;/code&gt;),
which lets tmux pass overlines through. DECRQSS SGR replies now include
overline and curly, double, dotted, and dashed underline styles.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13649"&gt;#13649 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13653"&gt;#13653 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13470"&gt;#13470 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: The terminfo &lt;code&gt;Se&lt;/code&gt; capability now resets the cursor to the configured
&lt;code&gt;cursor-style&lt;/code&gt; instead of a steady block. This fixes programs like Neovim
leaving a block cursor behind on exit. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12482"&gt;#12482 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: OSC payloads are now limited to 8 MiB, Kitty graphics payloads to
65 MiB, and each cell to 64 combining codepoints, so terminal output
can't easily exhaust memory. This also fixes a memory leak on invalid
Kitty graphics data. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12349"&gt;#12349 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13633"&gt;#13633 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Experimental support for the
&lt;a href="https://github.com/raphamorim/rio/pull/1542"&gt;Glyph Protocol&lt;/a&gt;
(APC &lt;code&gt;25a1&lt;/code&gt;), which lets programs register custom glyphs. Ghostty parses
and answers requests but doesn't render registered glyphs yet.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12352"&gt;#12352 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12930"&gt;#12930 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12937"&gt;#12937 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Parse the new program status protocol (OSC 7501), which lets programs
report whether they are idle, working, done, blocked, or failed. This is
the first terminal specification pioneered by the Ghostty project.
libghostty can parse it all, but the Ghostty GUI ignores it for now.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14560"&gt;#14560 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Parse (but do not implement) the Kitty desktop notification protocol
(OSC 99). &lt;a href="https://github.com/ghostty-org/ghostty/issues/10467"&gt;#10467 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Parse (but do not implement) the Kitty drag and drop protocol
(OSC 72). &lt;a href="https://github.com/ghostty-org/ghostty/issues/13029"&gt;#13029 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: More tmux control mode fixes, including crashes that running
&lt;code&gt;tmux -CC&lt;/code&gt; could trigger. tmux control mode is still not hooked up to
the GUI. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11395"&gt;#11395 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/11935"&gt;#11935 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14262"&gt;#14262 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14680"&gt;#14680 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Clearing the screen at a prompt (e.g. &lt;code&gt;ctrl+l&lt;/code&gt; in bash or zsh) now
moves prior output into scrollback even when the prompt is not on the
last row. Previously, the output was erased. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14660"&gt;#14660 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14668"&gt;#14668 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: transmitting an image with an existing ID now
replaces the image and removes its old placements, as the spec requires.
Interrupted or failed retransmissions no longer leave stale images on
screen. &lt;a href="https://github.com/ghostty-org/ghostty/issues/6711"&gt;#6711 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13723"&gt;#13723 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13893"&gt;#13893 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: images now move with the text when a program scrolls
with &lt;code&gt;CSI S&lt;/code&gt;, &lt;code&gt;CSI T&lt;/code&gt;, or scroll margins, and are clipped to the scroll
region. &lt;a href="https://github.com/ghostty-org/ghostty/issues/4323"&gt;#4323 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13935"&gt;#13935 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: automatically assigned image IDs no longer collide
with IDs chosen by the program. &lt;a href="https://github.com/ghostty-org/ghostty/issues/2197"&gt;#2197 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13934"&gt;#13934 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: delete commands now match the spec and Kitty. Point
deletes (&lt;code&gt;d=p&lt;/code&gt;, &lt;code&gt;d=c&lt;/code&gt;) only remove placements at that cell, &lt;code&gt;d=a&lt;/code&gt; only
removes placements on the visible screen, range deletes accept empty
ranges, and deleting a missing placement no longer frees the image.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13652"&gt;#13652 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13895"&gt;#13895 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13898"&gt;#13898 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13932"&gt;#13932 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: command validation and responses now match Kitty.
This fixes missing responses for invalid image data that could hang
clients, false positive query replies, lost IDs in chunked transfer
replies, file transfers with an exact &lt;code&gt;S&lt;/code&gt; size, and loads interrupted by
a non-chunk transmission. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13889"&gt;#13889 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13892"&gt;#13892 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13896"&gt;#13896 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13897"&gt;#13897 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13933"&gt;#13933 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14811"&gt;#14811 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: cropped source rectangles are no longer stretched,
and &lt;code&gt;X&lt;/code&gt;/&lt;code&gt;Y&lt;/code&gt; offsets are kept within the first cell. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13890"&gt;#13890 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13891"&gt;#13891 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty graphics: the cursor moves after tall images like Kitty does,
so consecutive images no longer overlap. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13887"&gt;#13887 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Full reset (RIS) no longer resets &lt;code&gt;image-storage-limit&lt;/code&gt; to the
default. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13951"&gt;#13951 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: OSC and APC sequences (such as Kitty graphics commands) canceled by
CAN or SUB, or aborted by another control character, are now discarded
instead of executed, matching xterm. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14453"&gt;#14453 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14812"&gt;#14812 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: With modifyOtherKeys level 2, control keys, keypad keys, and
&lt;code&gt;alt+escape&lt;/code&gt; now encode like xterm. F13 to F25, Help, and Menu now send
xterm's function key sequences in all legacy encoding modes. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14144"&gt;#14144 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14145"&gt;#14145 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Legacy alt-as-escape encoding now sends the full UTF-8 sequence for
non-ASCII keys. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14146"&gt;#14146 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Kitty keyboard protocol release events no longer repeat the typed
text for dead keys or level 5 keys on GTK, which caused duplicated
characters in programs like Neovim. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13861"&gt;#13861 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: &lt;code&gt;ctrl+alt+shift+backspace&lt;/code&gt; now sends &lt;code&gt;ESC BS&lt;/code&gt; in legacy key encoding,
matching xterm. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14508"&gt;#14508 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: UTF-8 mouse mode (1005) now encodes the button correctly, fixing
invalid reports for the back and forward mouse buttons. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14532"&gt;#14532 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Foreground, background, and cursor colors reset with OSC 110, 111,
or 112 now follow later configuration changes, such as a light/dark
theme switch. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13650"&gt;#13650 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Full reset (RIS) now restores palette colors changed with OSC 4.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14480"&gt;#14480 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: An empty OSC 22 now resets the mouse pointer shape to the default.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14495"&gt;#14495 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Long desktop notifications (OSC 9 and OSC 777) with multibyte UTF-8
text are no longer dropped or shown as invalid UTF-8 when truncated.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13795"&gt;#13795 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13811"&gt;#13811 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: DCS strings now carry UTF-8 data. Previously, some UTF-8 bytes were
dropped, ended the string early, or started a new control sequence.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14016"&gt;#14016 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: C0 controls &lt;code&gt;0x10&lt;/code&gt; to &lt;code&gt;0x1F&lt;/code&gt; are now executed instead of printed
as text, and UTF-8 encoded C1 controls are ignored, matching xterm.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14022"&gt;#14022 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14023"&gt;#14023 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Erasing a full line (&lt;code&gt;CSI 2 K&lt;/code&gt;) now clears its soft-wrap state, so
erased rows no longer join together when the window is resized. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13637"&gt;#13637 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: The cursor and saved cursor keep the correct position when a resize
reflows text, fixing an extra line wrap or overwritten text after
resizing. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12598"&gt;#12598 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14458"&gt;#14458 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14478"&gt;#14478 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Variation selectors (VS15/VS16) now apply to the preceding codepoint,
fixing the rendering of some ZWJ emoji such as the pirate flag. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12596"&gt;#12596 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Combining marks printed after a character in the last column now
attach to that character. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12581"&gt;#12581 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Characters above U+00FF, such as emoji, now print as-is instead of as
a blank while a non-UTF-8 character set such as DEC line drawing is
active. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14554"&gt;#14554 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Single shifts (SS2/SS3) now apply only to the next printed character.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14576"&gt;#14576 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Tab clear (TBC) fixes: &lt;code&gt;CSI 0 g&lt;/code&gt; no longer sets a tab stop where
there wasn't one, and &lt;code&gt;CSI g&lt;/code&gt; with no parameter clears the tab stop at
the cursor. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13900"&gt;#13900 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14644"&gt;#14644 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Printing with autowrap (DECAWM) disabled clears the pending wrap, so
re-enabling autowrap doesn't cause a spurious line wrap. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14652"&gt;#14652 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: With reverse wrap enabled, moving left after restoring a cursor with
a pending wrap no longer jumps the cursor. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14390"&gt;#14390 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Cursor movement respects margins and origin mode: CUB and backspace
stop at the left margin, and CHA, HPA, VPA, HPR, and VPR no longer apply
the margin offset twice in origin mode. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14761"&gt;#14761 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14762"&gt;#14762 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Fix a crash when VS15 narrows a wide character under the cursor.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13631"&gt;#13631 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Fix a crash or memory corruption after narrowing the terminal cuts a
wide character in half on the alternate screen or with wraparound
disabled. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14509"&gt;#14509 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Fix a crash when a grapheme cluster widens in the last column and
wraps inside or below a scroll region with grapheme clustering (mode
2027) enabled. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14552"&gt;#14552 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Fix a slow memory and performance leak in graphics-heavy sessions
where evicted Kitty images left their placements' tracked positions
behind. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13656"&gt;#13656 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vt: Fix a memory leak when an OSC color sequence contains more than two
requests. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13239"&gt;#13239 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;A new &lt;code&gt;ghostty +ssh&lt;/code&gt; CLI action wraps &lt;code&gt;ssh&lt;/code&gt; and sets up Ghostty on remote
hosts: it forwards Ghostty's environment and installs Ghostty's terminfo
on the first connection to each host, caching successful installs. It can
be used directly (&lt;code&gt;ghostty +ssh user@example.com&lt;/code&gt;) or as an alias
(&lt;code&gt;alias ssh='ghostty +ssh --'&lt;/code&gt;) without shell integration. The &lt;code&gt;ssh-env&lt;/code&gt;
and &lt;code&gt;ssh-terminfo&lt;/code&gt; shell integration features now use it for every
shell. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12582"&gt;#12582 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh-terminfo&lt;/code&gt; now always installs Ghostty's bundled terminfo on remote
hosts instead of keeping an existing, possibly outdated, &lt;code&gt;xterm-ghostty&lt;/code&gt;
entry, and reinstalls it when a newer Ghostty changes its terminfo.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13844"&gt;#13844 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ghostty +ssh-cache&lt;/code&gt; has been reworked with positional destinations, a
new &lt;code&gt;--prune&lt;/code&gt; option, consistent output and exit codes, and error
messages that name the cache file. See the
&lt;a href="https://ghostty.org/docs/install/release-notes/1-4-0#breaking-changes"&gt;breaking changes&lt;/a&gt; above. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12814"&gt;#12814 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13533"&gt;#13533 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh-terminfo&lt;/code&gt; now tells apart the same host on different ports, so
terminfo is installed on each of them. &lt;code&gt;ghostty +ssh-cache&lt;/code&gt; accepts
&lt;code&gt;host:port&lt;/code&gt; destinations. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14472"&gt;#14472 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh-env&lt;/code&gt; no longer overrides &lt;code&gt;SetEnv&lt;/code&gt; entries in your &lt;code&gt;~/.ssh/config&lt;/code&gt;.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/11518"&gt;#11518 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14854"&gt;#14854 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bash: Failed commands now report their real exit status on Bash 4.4+,
so command finished notifications no longer report every command as
successful. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14247"&gt;#14247 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14250"&gt;#14250 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;nu: Tab completion for &lt;code&gt;ssh&lt;/code&gt; and &lt;code&gt;sudo&lt;/code&gt; now works with external
completers such as carapace. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13310"&gt;#13310 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bash: The bundled bash-preexec, used only for Bash versions older than
4.4 such as macOS's &lt;code&gt;/bin/bash&lt;/code&gt;, has been updated to 0.7.0. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14120"&gt;#14120 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;zsh: Fix a stray &lt;code&gt;{&lt;/code&gt; in the prompt and broken prompt marking when &lt;code&gt;PS1&lt;/code&gt;
or &lt;code&gt;PS2&lt;/code&gt; ends with a bare &lt;code&gt;%&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11832"&gt;#11832 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bash: Fix "command not found" errors in subshells that inherit
&lt;code&gt;PROMPT_COMMAND&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11690"&gt;#11690 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bash: Fix a syntax error when an existing &lt;code&gt;PROMPT_COMMAND&lt;/code&gt; ends with a
newline. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11621"&gt;#11621 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bash: Fix extra blank lines at the prompt when using ble.sh. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11644"&gt;#11644 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bash: Fix the shell integration hook being added twice when it is
sourced again with an array &lt;code&gt;PROMPT_COMMAND&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14266"&gt;#14266 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;macOS: Support macOS 27. This fixes the layout and background color of
titlebar tabs, a thin border around the app icon, hidden titlebars
covering the top lines of the terminal with Reduce Transparency enabled,
and the Shortcuts "New Window" action opening two windows. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13001"&gt;#13001 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13390"&gt;#13390 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14107"&gt;#14107 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14411"&gt;#14411 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12999"&gt;#12999 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13069"&gt;#13069 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: When a terminal's process exits, a native bar now appears at the
bottom of the terminal instead of text being written into the terminal.
Commands that fail or exit faster than &lt;code&gt;abnormal-command-exit-runtime&lt;/code&gt;
are highlighted in red. &lt;a href="https://github.com/ghostty-org/ghostty/issues/7649"&gt;#7649 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12251"&gt;#12251 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Quitting, or closing a window, when multiple windows or tabs have
running processes now offers "Review Windows...", which steps through
each one so you can decide what to close. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12742"&gt;#12742 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14062"&gt;#14062 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The command palette now highlights matching text, matches
initials, searches action descriptions, and ranks results by where they
matched. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12264"&gt;#12264 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13610"&gt;#13610 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13624"&gt;#13624 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The search bar now remembers the last search and shares it with
other apps through the system find pasteboard, like Safari and
Terminal.app. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12516"&gt;#12516 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12712"&gt;#12712 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Screen readers such as VoiceOver are now notified when the
selection changes instead of reading a stale selection. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12902"&gt;#12902 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The AppleScript &lt;code&gt;terminal&lt;/code&gt; class and the Shortcuts terminal entity
now expose &lt;code&gt;pid&lt;/code&gt; (of the foreground process) and &lt;code&gt;tty&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11592"&gt;#11592 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/10756"&gt;#10756 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/11922"&gt;#11922 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: AppleScript tabs and terminals have a new read-write
&lt;code&gt;name override&lt;/code&gt; property to set or clear a custom title. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12048"&gt;#12048 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14733"&gt;#14733 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Middle-clicking a tab closes it with
&lt;code&gt;macos-titlebar-style = tabs&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11962"&gt;#11962 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/11963"&gt;#11963 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The version in the About window now links to the release notes
for that version. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11964"&gt;#11964 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Updates that are downloaded and installed automatically no longer
prompt you to restart. Checking for updates manually still offers to
restart. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13623"&gt;#13623 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;toggle_background_opacity&lt;/code&gt; now applies to every tab in the
window, and new windows inherit the current state. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11583"&gt;#11583 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;cmd+arrow_up&lt;/code&gt; and &lt;code&gt;cmd+arrow_down&lt;/code&gt; now run their configured
keybinds, which default to &lt;code&gt;jump_to_prompt&lt;/code&gt;. Ghostty 1.3 always scrolled
to the top or bottom of the scrollback instead, ignoring the
configuration. To scroll to the top or bottom, use &lt;code&gt;cmd+home&lt;/code&gt; and
&lt;code&gt;cmd+end&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12245"&gt;#12245 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: In the configuration errors window, Return reloads the
configuration and Escape ignores the errors. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12601"&gt;#12601 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Ghostty launches about 15% faster to a visible window and draws
its first frame about 27% sooner. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13722"&gt;#13722 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Terminals that aren't visible, such as background tabs, now
release their GPU resources and rebuild them when shown again. With 20
background tabs, GPU memory drops from about 385 MiB to 18 MiB. Metal
buffers also no longer over-allocate when they grow. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14017"&gt;#14017 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13490"&gt;#13490 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Lower idle CPU and energy use. The display link now pauses when
there is nothing to draw, and unfocused terminals that are animating
draw at most once per display refresh instead of once per write.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14035"&gt;#14035 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14068"&gt;#14068 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Update Sparkle to 2.9.6, which fixes several security advisories
in Sparkle, including CVE-2026-47121 and CVE-2026-47122. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14072"&gt;#14072 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14082"&gt;#14082 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Global keybinds no longer stop working after macOS disables
Ghostty's event tap. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12294"&gt;#12294 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12714"&gt;#12714 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix IME composition issues. Korean text being composed is now
committed instead of lost when pressing an arrow key, and control-key
IME shortcuts such as Japanese input's &lt;code&gt;ctrl+j&lt;/code&gt; no longer send control
characters to the terminal. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11461"&gt;#11461 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12447"&gt;#12447 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12518"&gt;#12518 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12547"&gt;#12547 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Text from input methods, dictation, and the emoji picker is now
sent as typed input instead of pasted text. Programs no longer treat
dictation as a paste, and switching input sources mid-composition sends
the pending text as keys, matching Terminal.app. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13195"&gt;#13195 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13222"&gt;#13222 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13817"&gt;#13817 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Unicode Hex Input can now enter characters outside the Basic
Multilingual Plane, such as emoji, typed as surrogate pairs. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13733"&gt;#13733 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13737"&gt;#13737 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;font-thicken&lt;/code&gt; now also applies to IME preedit text. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14230"&gt;#14230 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;option+backspace&lt;/code&gt; and other modified Backspace keys now report
their modifiers with the Kitty keyboard protocol instead of sending a
bare DEL. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13871"&gt;#13871 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Pasting and dropping text now prefer plain text over URLs, so a
path copied from apps like Transmit pastes as a path instead of an
&lt;code&gt;sftp://&lt;/code&gt; URL. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13152"&gt;#13152 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13170"&gt;#13170 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13212"&gt;#13212 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The search bar keeps focus when you click in it or on the
next/previous buttons, and the terminal's focus state is now correct
while search is open. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11872"&gt;#11872 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/11978"&gt;#11978 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The Find Next and Find Previous menu items and the
&lt;code&gt;navigate_search&lt;/code&gt; and &lt;code&gt;end_search&lt;/code&gt; keybinds now work correctly,
including while the search field is focused. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12070"&gt;#12070 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12492"&gt;#12492 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Pressing Enter in the search bar no longer blocks confirming an
IME candidate. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12781"&gt;#12781 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Clicking a command palette entry with the mouse now runs it
instead of closing the palette. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11665"&gt;#11665 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The command palette now gets focus and paste when opened from the
inline tab title editor. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12524"&gt;#12524 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Holding &lt;code&gt;cmd+t&lt;/code&gt; to create many tabs now leaves the newest tab
focused. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13725"&gt;#13725 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13985"&gt;#13985 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix an empty "ghost" tab or window that could appear when a tab
was closed right after it was opened. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12119"&gt;#12119 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Titlebar tabs no longer disappear after creating a tab from
"Show All Tabs". &lt;a href="https://github.com/ghostty-org/ghostty/issues/12949"&gt;#12949 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13017"&gt;#13017 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Double-clicking the window title now zooms the window with
&lt;code&gt;macos-titlebar-style = tabs&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12219"&gt;#12219 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Moving a tab with &lt;code&gt;macos-titlebar-style = tabs&lt;/code&gt; on macOS 26 no
longer briefly shows the neighboring tab. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14847"&gt;#14847 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The inline tab title editor stays in place while the window is
resized. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12220"&gt;#12220 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix tabs flashing when switching tabs after a program changed the
background color with OSC 11, and the window chrome keeping the old
color after a light/dark theme switch. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12825"&gt;#12825 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12828"&gt;#12828 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12822"&gt;#12822 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The &lt;code&gt;macos-glass-regular&lt;/code&gt; and &lt;code&gt;macos-glass-clear&lt;/code&gt; options for
&lt;code&gt;background-blur&lt;/code&gt; now layer the glass over the background color, and
focused windows are no longer less transparent than unfocused ones.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13914"&gt;#13914 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13928"&gt;#13928 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The native titlebar no longer cuts off the end of the title when
using a custom &lt;code&gt;window-title-font-family&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14135"&gt;#14135 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14217"&gt;#14217 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix terminals rendering at a stale size under heavy system load or
during rapid resizes from window managers. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12143"&gt;#12143 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Splits dragged into another tab or window now render immediately,
and the source window keeps keyboard focus. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12343"&gt;#12343 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12338"&gt;#12338 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The split zoom indicator no longer stays visible after the other
splits of a zoomed split are closed, such as with AppleScript. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14703"&gt;#14703 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The split divider now uses the standard row and column resize
pointers. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13433"&gt;#13433 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;window-save-state = never&lt;/code&gt; now also stops macOS from taking
window restoration snapshots, which could stall focus changes between
windows. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14506"&gt;#14506 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Window state saved by Ghostty 1.2 or later is now migrated, so
windows and tabs are restored after updating Ghostty. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12461"&gt;#12461 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Tabs created while the screen is locked now initialize correctly.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13639"&gt;#13639 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Quitting now asks for confirmation when windows with running
processes are minimized or the quick terminal is hidden. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13686"&gt;#13686 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: OSC 52 clipboard read confirmations no longer steal focus. If the
terminal is unfocused, Ghostty rings the bell and shows the prompt when
you return to it. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13744"&gt;#13744 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Splits in the quick terminal now also set
&lt;code&gt;GHOSTTY_QUICK_TERMINAL=1&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12895"&gt;#12895 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12896"&gt;#12896 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The quick terminal no longer reopens at a stale size after a
display is reconnected at a different resolution. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13250"&gt;#13250 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The "New Ghostty Tab Here" and "New Ghostty Window Here" services
now open the correct directory when given a plain-text path. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12727"&gt;#12727 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12731"&gt;#12731 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Working directories passed from Services, Shortcuts, and
AppleScript are now normalized, fixing Nushell and zsh &lt;code&gt;%1~&lt;/code&gt; prompts.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12614"&gt;#12614 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14051"&gt;#14051 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;ghostty -e&lt;/code&gt; no longer opens the command's file arguments as
extra terminals, e.g. &lt;code&gt;ghostty -e vim file.txt&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13748"&gt;#13748 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Opening a &lt;code&gt;.command&lt;/code&gt; file from Finder no longer corrupts
non-ASCII characters in its path. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13862"&gt;#13862 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The Shortcuts terminal entity now reports the correct kind,
title, working directory, and screenshot for new terminals. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13007"&gt;#13007 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The Shortcuts "New Terminal" action now works with commands that
have arguments and with a command field that was cleared. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12391"&gt;#12391 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12392"&gt;#12392 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: AppleScript &lt;code&gt;send key&lt;/code&gt; now works for character keys, not only
special keys like &lt;code&gt;enter&lt;/code&gt;, and respects &lt;code&gt;macos-option-as-alt&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13205"&gt;#13205 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Update pill fixes: update errors are now shown, "Install and
Relaunch" no longer asks for confirmation, and the cancel option is
hidden once an update can no longer be canceled. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13540"&gt;#13540 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13562"&gt;#13562 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13612"&gt;#13612 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The default app icon follows the system icon style again after
changing it in System Settings, and custom icons now apply to the app in
Finder. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12180"&gt;#12180 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12344"&gt;#12344 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The dock icon bell badge now appears when notification permission
was granted earlier without badge permission. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12133"&gt;#12133 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The Copy menu item is disabled when nothing is selected. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12521"&gt;#12521 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Menu items now show the correct shortcut for keybinds on physical
keys (e.g. &lt;code&gt;super+backquote&lt;/code&gt;), uppercase letters, forward delete, and
the &lt;code&gt;scroll_to_selection&lt;/code&gt; and &lt;code&gt;search_selection&lt;/code&gt; actions. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13888"&gt;#13888 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12039"&gt;#12039 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12011"&gt;#12011 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12281"&gt;#12281 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: The secure input indicator's popover arrow now points at the
icon. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12249"&gt;#12249 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a rare permanent freeze after waking from sleep or changing
displays. macOS did not mark the app as "Not Responding", so it could
only be killed. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14691"&gt;#14691 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a crash when closing a tab, most easily triggered with
&lt;code&gt;undo-timeout = 0&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13359"&gt;#13359 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13364"&gt;#13364 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a crash when opening a new tab from a native fullscreen
window. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13636"&gt;#13636 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a crash caused by a data race when reading cached terminal
contents. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13646"&gt;#13646 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a crash when OSC 52 clipboard confirmation prompts overlap.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13648"&gt;#13648 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix crashes when CoreText returns null, such as for fonts without
a display name or under severe memory pressure. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13642"&gt;#13642 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13679"&gt;#13679 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix closed windows leaking with transparent titlebars (the
default), which made Ghostty and WindowServer use more CPU and memory
over time. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13601"&gt;#13601 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a memory leak each time Ghostty reads terminal text, such as
for copy, Quick Look, or accessibility. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12020"&gt;#12020 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12025"&gt;#12025 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix an IOSurface memory leak when scripts rapidly create and close
terminals. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13640"&gt;#13640 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;macOS: Fix a Mach port leak, and a gradual slowdown, while global
keybinds wait for Accessibility permission. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13590"&gt;#13590 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;GTK: Splits can now be rearranged with drag and drop, matching macOS.
Drag a split by its handle and drop it onto another split, including
splits in other tabs and windows. &lt;a href="https://github.com/ghostty-org/ghostty/issues/10224"&gt;#10224 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/10423"&gt;#10423 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Ghostty now renders at the true fractional scale (e.g. 125% or
150%), so text and box-drawing characters are sharp instead of blurry
under fractional scaling. &lt;a href="https://github.com/ghostty-org/ghostty/issues/1938"&gt;#1938 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14269"&gt;#14269 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The renderer no longer uses &lt;code&gt;GtkGLArea&lt;/code&gt;. Ghostty now renders with
EGL entirely on the render thread and hands finished frames to GTK as
DMABUFs, so the main thread no longer does any OpenGL work. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14052"&gt;#14052 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14636"&gt;#14636 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Windows can now be renamed using the menu, command palette, or the
new &lt;code&gt;prompt_window_title&lt;/code&gt; and &lt;code&gt;set_window_title&lt;/code&gt; binding actions.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/10469"&gt;#10469 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/10999"&gt;#10999 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: A new &lt;code&gt;+new-tab&lt;/code&gt; CLI command opens a new tab in a running Ghostty
instance. When run from inside Ghostty, the tab opens in the same
window. It accepts the same &lt;code&gt;-e&lt;/code&gt;, &lt;code&gt;--working-directory&lt;/code&gt;, and &lt;code&gt;--title&lt;/code&gt;
flags as &lt;code&gt;+new-window&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11762"&gt;#11762 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: A new &lt;code&gt;+toggle-quick-terminal&lt;/code&gt; CLI command toggles the quick
terminal of a running Ghostty instance, useful for binding in window
managers without global shortcut support. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12661"&gt;#12661 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Global keybinds now use the &lt;code&gt;vicinae-hotkey-v1&lt;/code&gt; Wayland protocol
when the compositor supports it (e.g. Hyprland 0.56+), falling back to
the XDG desktop portal otherwise. Ghostty shows a desktop notification if
a global keybind can't be registered. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13464"&gt;#13464 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: &lt;code&gt;quick-terminal-screen&lt;/code&gt; is now supported on Wayland. The default,
&lt;code&gt;main&lt;/code&gt;, places the quick terminal on the compositor's primary output
(or the first monitor if the compositor doesn't report one). Set it to
&lt;code&gt;mouse&lt;/code&gt; to let the compositor choose, which was the previous behavior.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/11117"&gt;#11117 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: On Wayland, &lt;code&gt;background-blur&lt;/code&gt; now uses the compositor-agnostic
&lt;code&gt;ext-background-effect-v1&lt;/code&gt; protocol instead of KDE's blur protocol,
enabling blur on compositors such as Niri. The blur region also no longer
covers the window's client-side shadows. &lt;a href="https://github.com/ghostty-org/ghostty/issues/10721"&gt;#10721 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/10720"&gt;#10720 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/10727"&gt;#10727 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: On GTK 4.23.3 and newer, &lt;code&gt;background-blur&lt;/code&gt; uses GTK's built-in
background blur, which covers the window more accurately. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13581"&gt;#13581 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13586"&gt;#13586 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The &lt;code&gt;open_config&lt;/code&gt; binding action now accepts &lt;code&gt;new_window&lt;/code&gt; to
edit the configuration in &lt;code&gt;$VISUAL&lt;/code&gt; or &lt;code&gt;$EDITOR&lt;/code&gt; in a new Ghostty
window. The default, &lt;code&gt;os_open&lt;/code&gt;, keeps the previous behavior. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11905"&gt;#11905 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: A new configuration &lt;code&gt;gtk-horizontal-tab-scroll&lt;/code&gt; (default &lt;code&gt;true&lt;/code&gt;)
can be set to &lt;code&gt;false&lt;/code&gt; to stop two-finger horizontal scrolling from
switching tabs, passing the scroll to the terminal application instead.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12659"&gt;#12659 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: A new configuration &lt;code&gt;gtk-tabs-inverted&lt;/code&gt; moves the close button to
the start of each tab, in both the tab bar and the tab overview.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14657"&gt;#14657 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The default command palette entries are now translatable. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11641"&gt;#11641 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The embedded Noto emoji fonts were updated, so newer emoji and ZWJ
sequences such as the head-shaking faces render as one glyph instead of
overlapping neighboring cells. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14047"&gt;#14047 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: &lt;code&gt;ctrl+shift+page_up&lt;/code&gt; and &lt;code&gt;ctrl+shift+page_down&lt;/code&gt; now move the current
tab left and right (&lt;code&gt;move_tab&lt;/code&gt;), matching Firefox, GNOME Terminal, and
VS Code. &lt;code&gt;jump_to_prompt&lt;/code&gt; moved to &lt;code&gt;ctrl+shift+arrow_up&lt;/code&gt; and
&lt;code&gt;ctrl+shift+arrow_down&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/4998"&gt;#4998 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12458"&gt;#12458 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: URLs now open through the XDG desktop portal, falling back to
&lt;code&gt;xdg-open&lt;/code&gt; if the portal is unavailable. Ghostty passes an activation
token so the opened application, such as your browser, can come to the
front on compositors that require one. &lt;a href="https://github.com/ghostty-org/ghostty/issues/5991"&gt;#5991 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/11754"&gt;#11754 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14785"&gt;#14785 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14787"&gt;#14787 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Desktop notifications are now withdrawn when their terminal is
focused or closed, and repeated notifications with the same text
replace each other, matching macOS. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14108"&gt;#14108 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Tabs that aren't visible no longer render, saving CPU and GPU.
This matches macOS. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12760"&gt;#12760 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The Dolphin "Open Ghostty Here" action now opens a new window in
the running Ghostty instance instead of launching a separate one.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/11614"&gt;#11614 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix Ghostty sometimes failing to launch with systemd 262, which
refused to start the service because Ghostty reported readiness before
it could handle reload signals. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14398"&gt;#14398 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14399"&gt;#14399 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix deeply nested splits sometimes becoming invisible or losing
focus. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11193"&gt;#11193 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12698"&gt;#12698 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Resizing splits, especially with &lt;code&gt;resize_split&lt;/code&gt; keybinds, no
longer flickers. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13414"&gt;#13414 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: &lt;code&gt;resize_split&lt;/code&gt; on nested splits no longer causes large jumps in
size. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12699"&gt;#12699 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Splits can no longer be resized smaller than one cell, by dragging
the divider or with &lt;code&gt;resize_split&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14476"&gt;#14476 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: High-resolution scroll wheels no longer scroll much faster than
standard scroll wheels. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12483"&gt;#12483 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Disable unwanted kinetic scrolling on trackpads with GTK versions
older than 4.20.1. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11793"&gt;#11793 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Middle clicks are once again sent to terminal applications using
mouse reporting when &lt;code&gt;gtk-enable-primary-paste&lt;/code&gt; is disabled in
GSettings. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12940"&gt;#12940 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13108"&gt;#13108 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The quick terminal no longer breaks when toggled off manually
while &lt;code&gt;quick-terminal-autohide&lt;/code&gt; is enabled. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11679"&gt;#11679 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12471"&gt;#12471 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Opening the right-click context menu no longer hides the quick
terminal when &lt;code&gt;quick-terminal-autohide&lt;/code&gt; is enabled. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12843"&gt;#12843 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The resize overlay no longer keeps reappearing when the scrollbar
is visible and no longer blocks mouse input while shown. &lt;a href="https://github.com/ghostty-org/ghostty/issues/11970"&gt;#11970 &lt;/a&gt;
&lt;a href="https://github.com/ghostty-org/ghostty/issues/11972"&gt;#11972 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The maximum window size is now based on the monitor the window is
currently on, not the monitor it was opened on. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13171"&gt;#13171 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: &lt;code&gt;+new-window -e&lt;/code&gt; now works when &lt;code&gt;shell-integration&lt;/code&gt; is set to a
specific shell. &lt;code&gt;+new-window&lt;/code&gt; and &lt;code&gt;+new-tab&lt;/code&gt; also accept a new
&lt;code&gt;--shell-integration&lt;/code&gt; flag. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12378"&gt;#12378 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13741"&gt;#13741 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Keys remapped to modifiers with XKB (e.g. Delete remapped to
&lt;code&gt;ISO_Level3_Shift&lt;/code&gt;) no longer also send the original key. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13967"&gt;#13967 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: On Wayland, the IME candidate window now follows the cursor while
composing and no longer covers the line being edited. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14729"&gt;#14729 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Splits in a tab that was moved to another window now act on the
new window (e.g. &lt;code&gt;toggle_fullscreen&lt;/code&gt;). &lt;a href="https://github.com/ghostty-org/ghostty/issues/14474"&gt;#14474 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The mouse cursor keeps its text shape while selecting text.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14558"&gt;#14558 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: The command palette now uses the terminal colors when
&lt;code&gt;window-theme = ghostty&lt;/code&gt;. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14662"&gt;#14662 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Opening URLs no longer fails when the fallback opener (&lt;code&gt;xdg-open&lt;/code&gt;)
produces large output. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12797"&gt;#12797 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Clicking a desktop notification no longer focuses the wrong
terminal when the one that sent it has since been closed. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12028"&gt;#12028 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: A bell in the focused terminal no longer leaves the bell
indicator set. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13597"&gt;#13597 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix the window continuously redrawing in the background after an
indeterminate progress bar (OSC 9;4) was removed. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14704"&gt;#14704 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14738"&gt;#14738 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Log missing or invalid &lt;code&gt;gtk-xft-dpi&lt;/code&gt; values once instead of
repeatedly. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14410"&gt;#14410 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14085"&gt;#14085 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14434"&gt;#14434 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix a crash when closing tabs or splits on GTK 4.20 (GNOME 49).
&lt;a href="https://github.com/ghostty-org/ghostty/issues/12426"&gt;#12426 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix a crash with global keybinds or on configuration reload when
no D-Bus connection is available. &lt;a href="https://github.com/ghostty-org/ghostty/issues/13101"&gt;#13101 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix a possible crash when Fontconfig reports a font's language as a
plain string instead of a language set. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14853"&gt;#14853 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK: Fix a leak where every audio bell started a new GStreamer pipeline
and threads that were never cleaned up, slowly raising CPU usage.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/13647"&gt;#13647 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/12815"&gt;#12815 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/13657"&gt;#13657 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Snap: Link the system FreeType, Fontconfig, HarfBuzz, libpng, and zlib
instead of bundled copies, fixing frequent crashes caused by two copies
of the same library in one process. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14392"&gt;#14392 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14682"&gt;#14682 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Snap: The snap's own GIO modules and XDG data directories now take
priority over the host's. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12045"&gt;#12045 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Snap: Programs running inside Ghostty, such as &lt;code&gt;clear&lt;/code&gt;, now find the
&lt;code&gt;xterm-ghostty&lt;/code&gt; terminfo entry. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12662"&gt;#12662 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Flatpak: Commands started by Ghostty on the host are now terminated if
Ghostty crashes. &lt;a href="https://github.com/ghostty-org/ghostty/issues/12427"&gt;#12427 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ghostty 1.4 introduces full localization for the command palette and adds
support for &lt;strong&gt;4 new languages&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basque&lt;/li&gt;
&lt;li&gt;Belarusian&lt;/li&gt;
&lt;li&gt;Danish&lt;/li&gt;
&lt;li&gt;Serbian (Cyrillic and Latin scripts)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Localization is maintained by volunteer contributors. If you want to
help localize Ghostty in your language, please open a discussion on the
GitHub repo. Thank you to all the volunteers who contributed to Ghostty's
localization!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ghostty now requires Zig 0.17 to build. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14518"&gt;#14518 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14519"&gt;#14519 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK builds now require &lt;strong&gt;GTK 4.18&lt;/strong&gt; and &lt;strong&gt;libadwaita 1.7&lt;/strong&gt;, up from
GTK 4.14 and libadwaita 1.5. Builds against older headers fail at
compile time, and Ghostty exits at startup if older libraries are
loaded at runtime. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14330"&gt;#14330 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GTK builds now link the system EGL library (pkg-config &lt;code&gt;egl&lt;/code&gt;, usually
provided by libglvnd or Mesa) for the new renderer. At runtime, Ghostty
uses GTK's EGL display when it can, and otherwise needs an EGL driver
that supports the surfaceless platform. &lt;a href="https://github.com/ghostty-org/ghostty/issues/14052"&gt;#14052 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14636"&gt;#14636 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new &lt;code&gt;-Dinstalled-exe-path&lt;/code&gt; build option sets the absolute executable
path written into the desktop file, D-Bus services, and systemd user
service. Previously this path came from the install prefix. Without the
option, these files now name &lt;code&gt;ghostty&lt;/code&gt; alone, which systemd only finds in
&lt;code&gt;/usr/bin&lt;/code&gt; or &lt;code&gt;/usr/local/bin&lt;/code&gt;, so set it for any other prefix.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/14805"&gt;#14805 &lt;/a&gt; &lt;a href="https://github.com/ghostty-org/ghostty/issues/14806"&gt;#14806 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;When linking the system gtk4-layer-shell (&lt;code&gt;-fsys=gtk4-layer-shell&lt;/code&gt;),
version 1.0.4 or newer is now required. Ghostty no longer disables the
quick terminal on older versions, which can crash on some compositors.
&lt;a href="https://github.com/ghostty-org/ghostty/issues/11559"&gt;#11559 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As with 1.3, libghostty isn't directly part of the Ghostty 1.4 release.
But a large part of the 1.4 development cycle went into libghostty, so
here's an update.&lt;/p&gt;
&lt;p&gt;Over the past 6 months, the C API for libghostty-vt has grown from a
parser and a few encoders into a complete terminal emulator API, adopted
by dozens of free and commercial terminal emulators used by millions of
people. It's hard to quantify exactly, but the number of people using a
libghostty-based terminal is confidently several times the number of
people using the Ghostty GUI.&lt;/p&gt;
&lt;p&gt;libghostty-vt now builds for macOS, Linux, Windows (MSVC and GNU), FreeBSD,
Android, iOS, and WebAssembly, and CI continuously verifies every one of
these targets. The goal is for libghostty-vt to be generally usable everywhere,
within reason, so if you want more target support, let us know!&lt;/p&gt;
&lt;p&gt;It's also easier to integrate libghostty-vt into existing build systems.
There's CMake support, Nix packaging, an xcframework, and a source
tarball, in addition to the existing pkg-config file. &lt;strong&gt;libghostty-vt no
longer needs libc++, and it can build freestanding.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The API is still marked as a work in progress and broke compatibility
several times during this cycle, so expect more breaking changes before
a tagged release. The &lt;a href="https://libghostty.tip.ghostty.org/index.html"&gt;API documentation&lt;/a&gt;
and the &lt;a href="https://github.com/ghostty-org/ghostty/tree/main/example"&gt;Zig, C, C++, Swift, and WebAssembly examples&lt;/a&gt;
(now over 30) are kept up to date with &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We're going to do a final pass over the C API, break ABI one more time,
and then likely tag a libghostty 1.0 release very soon.&lt;/p&gt;
&lt;p&gt;Ghostty is a &lt;a href="https://ghostty.org/docs/sponsor"&gt;non-profit project&lt;/a&gt;, fiscally sponsored
by &lt;a href="https://hackclub.com"&gt;Hack Club&lt;/a&gt;.
All of our finances are &lt;a href="https://hcb.hackclub.com/ghostty"&gt;public on HCB&lt;/a&gt;,
so you can see exactly where every dollar goes.&lt;/p&gt;
&lt;p&gt;During the 1.4 cycle, we paid &lt;strong&gt;$41,820&lt;/strong&gt; to contributors under contract and
spent about &lt;strong&gt;$1,260&lt;/strong&gt; on infrastructure such as website hosting.&lt;/p&gt;
&lt;p&gt;I'm happy to share that we've now signed our first two &lt;strong&gt;12-month contracts&lt;/strong&gt;,
which give contributors stable, long-term paid work on Ghostty and help
ensure the ongoing stability and sustainability of the project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/trag1c"&gt;@trag1c&lt;/a&gt; is Ghostty's head of operations.
He manages the community on GitHub and Discord, coordinates our
volunteer translators, and maintains various other important project
systems.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vancluever"&gt;@vancluever&lt;/a&gt; works on various Ghostty
subsystems. In this cycle, he led the upgrade to Zig 0.16, moved the
build off Zig's deprecated &lt;code&gt;@cImport&lt;/code&gt;, updated the bundled Fontconfig,
and more. He's also the author of
&lt;a href="https://github.com/vancluever/z2d"&gt;z2d&lt;/a&gt;, the 2D graphics library Ghostty
uses to draw box-drawing characters and other sprite glyphs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you'd like to support Ghostty, please visit our &lt;a href="https://ghostty.org/docs/sponsor"&gt;sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The primary focus of the roadmap continues to be libghostty functionality,
stability, and portability. During the last release cycle, I said I aimed to
tag a libghostty release. We haven't done that yet, but I'm confident we will
do so before Ghostty 1.5.&lt;/p&gt;
&lt;p&gt;libghostty is a project that continues to be the tide that lifts all boats.
libghostty improvements tie directly to Ghostty GUI improvements as well as
dozens of other large projects in the ecosystem. As more large projects adopt
libghostty, libghostty tends to get more testing and attention, and this
creates a cycle that yields the most gain for terminal emulators everywhere.&lt;/p&gt;
&lt;p&gt;macOS and GTK builds of Ghostty have talented, capable maintainer teams that
are continuing to improve them, so they're not neglected by any means!
As a project, we've decided to drop any roadmap for Windows support in the
Ghostty GUI. libghostty fully supports Windows (and we test it in CI), and the
official stance now is that downstream projects should use that.&lt;/p&gt;
&lt;p&gt;Our release cycle remains 6 months. This release was delayed by one month,
but Ghostty 1.5 is planned for March 2027. libghostty will have a separate
release cycle.&lt;/p&gt;&lt;/div&gt;</ns0:encoded></item></channel></rss>