Ghostty 1.4.0 釋出:完整 Kitty 協定支援、記憶體壓縮與 I/O 效能提升
Ghostty 1.4.0
Ghostty 1.4.0 釋出,全面支援 Kitty 協定、記憶體壓縮與 I/O 效能提升,為開發者帶來更快、更穩定的終端體驗。
- 100% Kitty 協定支援:動畫、相對定位、完整相容,成為首個非 Kitty 端實作。
Ghostty 1.4.0 透過 100% Kitty 協定支援、記憶體壓縮與 I/O 速率提升,為開發者帶來更快、更穩定的終端體驗。
譯文尚未完整,完整內容請切換至原文。
Ghostty 1.4.0 是一個重大版本,包含了顯著的效能與記憶體最佳化、完整 100% 的 Kitty 圖形實作(含動畫與相對定位,成為首個非 Kitty 終端實作此功能)、SSH 整合改進,以及在所有平臺上百項以上的改進與修復。
本次發布包含 7 個月的工作,來自 172 位貢獻者 的 2,889 次提交。感謝所有貢獻者、維護者、社群版主、翻譯者、套件包裝者與使用者,因為他們的協助才使這個版本得以完成。
這些釋出說明是由人類 Ghostty 維護者細心且用心手工編寫,包含完整的更新日誌。撰寫共耗時 16+ 小時,請多多享用。🥰
- GHSA-4hwh-wx3w-3fqg。 貼上保護未將回車視為換行符號,導致在不支援括號貼上功能的程式中,貼上操作可能直接執行指令而無需確認。此漏洞需使用者進行複製-貼上操作才能觸發。
- GHSA-mhff-mv4q-fp63。 惡意 Kitty 圖形指令可能導致 Ghostty 崩潰或卡頓、強制大量記憶體分配,或在有限情況下讀取或刪除允許臨時目錄以外的檔案。此漏洞僅需顯示惡意輸出即可。
- GHSA-hcr9-7hcr-mjm8。 惡意終端輸出可透過 tmux 控制模式使 Ghostty 崩潰並關閉所有視窗。即使未安裝 tmux,亦會受影響。此漏洞影響 Ghostty 1.3.0 與 1.3.1。
- GHSA-hp9c-qp4q-cpw3。 同上所述的影響,透過 tmux 控制模式佈局中大小為零或過大分割槽。此漏洞影響 Ghostty 1.3.0 與 1.3.1。
- GHSA-w9q4-5jvv-mcv4。
將畫面清除至滾動回溯時,若刪除包含樣式或超連結遊標的滾動回溯頁面,可能會破壞記憶體。此漏洞僅需顯示惡意輸出,且僅在小型
scrollback-limit(如0)時發生。預設情況下未知受影響。 - GHSA-2r63-vmw6-3m3c。
經過偽造的目錄名稱可使 zsh shell 整合功能傳送任意轉義序列,例如靜默地以 OSC 52 取代剪貼簿。bash 的影響較為有限。此漏洞僅需從不受信任的內容(例如已克隆的倉庫)中進入目錄(
cd)。 - macOS: GHSA-cw69-wm67-5pv8。 Cmd‑點選經過偽造的 OSC 8 超連結可能開啟不安全的本機檔案或自訂 URL 協定,進而執行任意指令。Ghostly 現已阻擋不安全目標並確認自訂 URL 協定。此漏洞需使用者執行 Cmd‑點選才能觸發。
- macOS: GHSA-mfw9-xcr3-7gfp。
同上問題,針對由
link設定(含預設 URL 匹配器)偵測到的連結。此漏洞需使用者執行 Cmd‑點選才能觸發。 - macOS: GHSA-v8cw-fg4j-jcc4。 拖曳文字時跳過貼上保護,影響同上。此漏洞需使用者進行拖曳操作才能觸發。
- macOS: GHSA-mxqx-236q-wrv7。 開啟名稱包含控制字元的檔案時,可能執行與確認對話方塊所示不同的指令。此漏洞需系統中有經過偽造的檔案並確認對話方塊。
備註:我已在數週前為上述安全通報申請 CVE,但 GitHub 尚未分配。若/若將來分配,我將以正確的 CVE 號碼更新上述內容。
PRs: #12999 #13069 #13393 #14413 #14414
Ghostty 1.4 支援 macOS 27(Golden Gate)。大部分工作為 相容性修正:
- 標題列中的分頁(
macos-titlebar-style = tabs)再次正確排列。 - 原生分頁欄不再以實心灰色條形顯示於您的 佈景主題上方。它現在允許新的玻璃風格與您的終端 背景融合。
macos-titlebar-style = hidden在開啟 Reduce Transparency 時不再覆蓋終端的 上方行。- 應用程式圖示不再有細邊框。
- 快捷鍵「新視窗」動作在 Ghostty 沒有任何視窗時不再開啟兩個視窗。
Ghostty 1.4 仍完全相容於早期 macOS 版本,從 macOS 13(Ventura)開始。請參閱 系統需求 以取得更多資訊。
Ghostty 1.3.1 可於 macOS 27 上運作,但仍有上述列出的 視覺問題,例如灰色分頁欄。
PRs: #13943 #13939 #13935 #13934 #13893 #13933 #13389 #13270 #13281
Ghostty 現已支援 Kitty 圖形 動畫 以及 相對位置。 這些是 Ghostty 之前未支援的 Kitty 圖形協定最後主要功能。
使用 Kitty 協定顯示動畫影像的程式,例如用 kitten icat 顯示的動畫 GIF,現在在 Ghostty 中會播放動畫,而非僅顯示單一靜態畫面。畫格傳輸、合成與播放控制皆已支援,且動畫在終端不可見時會暫停。相對位置允許程式將一張影像定位於另一張影像的位置,子影像會隨父影像一起移動。
我們亦對規格與 Kitty 本身進行完整相容性測試,修正數十項行為差異。例如,影像現在會隨著滾動區內文字一起滾動(#4323 ),重新傳送影像 ID 會取代舊影像(#6711 ),而無效影像資料現在會得到錯誤回應,而非靜默,避免客戶端掛起。完整清單請參考 終端功能 區段。
Kitty 圖形亦更快。影像載荷現在以 SIMD 批次解析,而非逐位元組,於我們的基準測試(64 MiB 影像資料,x86_64 Linux)中,使大型影像傳輸解析速度提升約 16 倍(約 16 倍更快),且每幀繪製影像的成本大幅降低。
我們的 Kitty 圖形實作現在涵蓋 100% 已發布的 規格,讓 Ghostly(以及 libghostty)成為第一個在 Kitty 之外 實現此功能的終端。
PRs: #13264 #13473 #13240 #13245 #14130 #14137 #14138 #14017
Ghostly 現已透明壓縮不見得可見的滾動記錄, 將這些頁面使用的實體記憶體降低至 70% 至 90%,適用於典型 文字重的歷史紀錄。壓縮僅在終端閒置時執行,頁面在您滾回或搜尋時按需解壓, 因此不會對 I/O 吞吐量產生可測量影響。
得益於壓縮,每個終端的預設滾動記錄上限已從 10 MB 提升至 50 MB。在支援壓縮的平臺上,完整滾動記錄仍通常 使用較少實體記憶體,較舊的 10 MB 上限。
壓縮降低的是 常駐(實體)記憶體,而非 虛擬 記憶體, 因此測量時請關注常駐記憶體。它目前可於 macOS 與 64 位 Linux 上使用。
在捲動回溯之外,記憶體使用量在許多地方都更低:
- 新的空白終端機現在在 macOS 上使用約 16 KiB 的終端機頁面記憶體,低於 Ghostty 1.3.1 的 128 KiB。
- 在 macOS 與 Linux 上,清除或修剪捲動回溯釋放的記憶體現在會回傳給作業系統,而不是等到終端機關閉才釋放。
- 隱藏分頁會釋放其 GPU 資源。在 macOS 上,當有一個顯示分頁與 20 個隱藏分頁時,GPU 記憶體從約 385 MiB 降至 18 MiB。當分頁再次顯示時重建它們的時間不到 1 毫秒。
PRs:#13209 #13220 #13226 #13227 #13537 #13827 #13587 #14011 #13722 #14035 #12760
Ghostty 1.4 在各方面都有效能提升,較之前版本帶來顯著的優勢。
最大的成就來自一個驚人的發現:在 macOS 上,核心會將每一次從 pty 讀取的資料限制在約 1 KiB,無論讀取緩衝區多大。之前,Ghostty 會即時處理每一次讀取,導致每千位元組都需支付一次讀取開銷,並且寫入輸出的程式會被阻塞,直到我們解析完畢。現在 Ghostty 在一個執行緒上排空 pty,另一個執行緒進行解析,將整體 I/O 吞吐量提升了 25% 至 55%,在 macOS(M4 Max,純文字與 Unicode 文字)上相較 Ghostty 1.3.x。
VT 處理本身也更快。在解析器基準測試中,純 ASCII 文字的速度從 128 MB/s 提升至 725 MB/s(5.7 倍),CJK 文字提升了 3.4 倍,且來自 asciinema 的 2.6 GB 真實終端機錄製資料集處理速度快約 25%。綜合來說,這些變更使得在 macOS 上處理 150 MB 文字檔案的時間從 1.5 秒縮短至 566 毫秒,cat-ing。
其他顯著改進:
- 調整大小: 將一個具有大量滾動回溯的終端重新調整大小大約快 6 倍(120x80,滾動回溯 10,000 行),以及在歷史記錄充滿 CJK 文本或表情符號時快 3 倍至 5 倍。
- 渲染: 渲染器每幀持有終端鎖的時間減少 2.7x to 11x,為 I/O 執行緒在高輸出時留出更多時間。
- 複製與搜尋: 將終端內容格式化為純文字、HTML 或 VT,支援剪貼簿複製、
write_screen_file,以及滾動回溯搜尋,速度提升 1.5 倍至 8 倍。 - 啟動(macOS): 從啟動到可見視窗大約快 15%,到第一幀渲染快 27%。
- 閒置能耗: 在 macOS 上,渲染器的顯示連結在沒有畫面要繪製時會休眠。在 GTK 上,隱藏的分頁停止渲染,與 macOS 相匹配。
- 大型 OSC 序列: OSC 52 剪貼簿負載解析速度大約快 30 倍,甚至像標題變更這樣的短序列也快 6 倍。
GTK 應用程式擁有新的渲染管線。它不再使用 GtkGLArea。相反地,渲染器在自己的執行緒上使用 EGL 繪製,將每一幀輸出為 DMABUF,並將其交給 GTK 顯示。渲染現在採用三重緩衝,應能大幅減少撕裂,且不再在主執行緒上執行 OpenGL 呼叫,讓我們能移除多項迴避措施。
最明顯的結果是分數縮放下的文字變得清晰。文字與框線字元在 125% 或 150% 等分數顯示縮放時不再模糊(#1938 )。我們曾經修復過此問題,但在上游 GTK 更改後又出現。Ghostty 現在以視窗的真實分數縮放渲染,因此每個渲染畫素都對應畫面上的一個畫素。
新的渲染表面需要系統 EGL 函式庫(見Changes for Package Maintainers)。在無法匯出 DMABUF 的 GPU 驅動程式中,Ghostty 會退回至透過 CPU 複製畫面,雖較慢但可行。
PRs: #13962 #13993 #13995 #13998 #14002 #14061
Ghostty 現已在 macOS 與 GTK 上實作Kitty clipboard protocol(OSC 5522)。Ghostty 1.3 能解析此協定,但未實作。
OSC 52 只能讀寫純文字。Kitty clipboard protocol 允許在終端機執行的程式讀寫任何型別的剪貼簿資料,例如影像或 HTML,並可在剪貼簿中的多種格式中選擇。程式亦可啟用貼上事件(模式 5522),告知程式貼上的資料包含哪些格式,讓其讀取所需格式。這就是終端機程式能接受貼上影像的方式,舉例來說。
剪貼簿存取遵循既有的 clipboard-read 與 clipboard-write 設定。預設情況下,讀取會提示授權,寫入則允許。授權提示會顯示剪貼簿內容的預覽,包括影像。傳送密碼的程式可將您的回覆記住,直至該終端機會話結束。新增的 clipboard-write-limit-bytes 設定限制單次寫入的大小(預設 64 MiB)。超過上限的寫入將失敗,且不改變剪貼簿。
現在可在 GTK 上透過拖曳重新排列分割,與 Ghostty 1.3 在 macOS 上推出的功能相同。當分頁擁有兩個或以上分割時,每個分割會在上方顯示拖曳把手。抓住把手並將分割拖到任何其他分割,包含其他分頁或視窗中的分割。覆蓋層會顯示它將落在目標分割的哪一側。終端機內容、工作目錄與執行中的程式均會隨之移動。
新增的 drag-handle 設定控制在 macOS 與 GTK 上何時顯示拖曳把手:auto(預設)、always 或 never。若設定為 never,則無法使用滑鼠重新排列分割。隱藏把手是使用者常見的需求,因為他們覺得把手佔用空間。
在 GTK 上,分割只能拖放到其他分割。將分割拖出以建立新分頁或視窗僅支援 macOS。
PRs: #14454 #13494 #14483 #14538 #14673 #14375 #14144
Ghostty 1.4 為核心終端機模擬帶來數十項改進。我們現在在 CI 中對 Ghostty 的終端機核心執行 Thomas Dickey 的終端機相容性測試套件 esctest。此外,我們修正了許多與 xterm 的差異,包括遊標在邊距內的移動、標籤停止、字元集、模式回報等。完整的相關更改可在terminal capabilities章節查閱。
Ghostty 也支援幾個新序列,包括軟終端重設 (DECSTR)、擴充套件遊標位置回報 (DECXCPR)、回箭鍵模式 (DECBKM),以及以字元為單位的螢幕尺寸回報 (CSI 19 t)。程式現在也可以透過 visibility reports (mode 2033) 查詢終端是否可見,進而在隱藏時停止渲染。
鍵盤編碼也更貼近 xterm,修正了 modifyOtherKeys mode 2 以及非 ASCII 鍵的舊版 Alt-as-Escape 編碼。
兩個新序列預設被停用,因為它們可能被不受信任的程式濫用,包括在遠端機器上執行的程式:
# 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
PRs: #12582 #12814 #13533 #13844 #14472 #14854
Ghostty 1.2 先前引入了 SSH shell integration features,作為一項正在進行的工作。在 Ghostty 1.4 中,它們由新的 ghostty +ssh CLI 動作支援:一個即插即用的 ssh 包裝器,先為 Ghostty 準備遠端會話,然後以未改變的引數執行真正的 ssh。
ghostty +ssh user@example.com
# Or alias it so every ssh invocation goes through it
alias ssh='ghostty +ssh --'
連線前,+ssh 會在遠端主機安裝 Ghostty 的 terminfo,以便使用正確的 xterm-ghostty TERM 值,並轉發 COLORTERM、TERM_PROGRAM 和 TERM_PROGRAM_VERSION。若 terminfo 安裝失敗(例如遠端缺少 tic),則回退至 TERM=xterm-256color。旗標如 --terminfo=false、--forward-env=false、--verbose 控制每一步。
ssh-env 與 ssh-terminfo shell integration 功能(仍需選擇)現在也會呼叫 +ssh。之前,每個 shell integration 都包含自己的一份此邏輯,佔我們 shell integration 指令碼的大約三分之一。現在 bash、zsh、fish、elvish 與 Nushell 行為相同,您也可以透過直接呼叫 ghostty +ssh 在指令碼或其他地方取得相同效果。
terminfo 安裝本身也更可靠。Ghostty 現在始終安裝自身捆綁的 terminfo,而非接受遠端已存在的任何 xterm-ghostty 條目,並在 Ghostly 更新改變 terminfo 時自動重新安裝。它也不再需要本機的 infocmp 或 Ghostty 的 terminfo。安裝會按主機 和 連線埠快取,兩臺位於同一地址後的機器不再共用快取項。且 ssh-env 不再默默覆蓋您 ~/.ssh/config 中的 SetEnv 條目(#11518 )。
管理此快取的 +ssh-cache 指令現在接受位置引數 (ghostty +ssh-cache user@example.com) 並新增了 --prune=30d 旗標。若您對 +ssh-cache 進行指令碼化,請參閱 breaking changes。
macOS: Ghostly 1.4 的最低要求 macOS 版本仍為 macOS 13 Ventura。Ghostly 現已支援 macOS 27。
GTK: Ghostly 1.4 需要 GTK 4.18 與 libadwaita 1.7,較 Ghostly 1.3 的 GTK 4.14 與 libadwaita 1.5 有提升。這與我們的 GTK/Adwaita 版本政策 相符。值得注意的是,Ubuntu 24.04 LTS 不符合此需求。使用舊版 GTK 或 Adwaita 的系統可透過安裝較舊版本 Ghostly 或 Flatpak 套件來迴避此限制。#14330
OpenGL (GTK): 最低要求的 OpenGL 版本仍為 4.3,但 Ghostly 現在透過 EGL 而非 GTK 的 OpenGL widget 進行渲染。對大多數使用者來說這應該是透明的;若 Ghostly 因 EGL 錯誤無法啟動,請確認您的 GPU 驅動程式提供可用的 EGL 實作。
我們之前宣佈 Ghostty 1.4 需要 macOS 14。 本次發布並沒有任何強迫我們改變的原因,所以我們保留了 macOS 13 的支援。我們仍計畫在未來的版本中移除 macOS 13。 Apple 在 2025 年秋季停止對 macOS 13 的安全支援,因此我們 建議不論如何都升級。
以下行為在 1.4.0 中已更改:
copy-on-select已重新設計,現在接受none、primary、clipboard或both。clipboard的含義已更改:它 之前會同時複製到選擇剪貼簿和系統剪貼簿,現在僅複製到系統剪貼簿。若您設定copy-on-select = clipboard並想要舊行為,請改為both。 #12600 #12604- macOS:
copy-on-select現在預設為none(之前為true),因此 選取文字不再複製到任何位置,選擇的中鍵貼上也不再預設工作。若要恢復 1.3 的行為,請設定copy-on-select = primary。請注意,明確的copy-on-select = true在 macOS 上現在會將選擇複製到系統剪貼簿,與 1.3 不同。 #12600 #12604 - macOS:
cmd+arrow_up和cmd+arrow_down現在再次執行jump_to_prompt, 與 Terminal.app 和 Ghostty 1.2 相同。在 1.3 中,這些鍵被硬編碼為捲動到頂部和底部,且無法重新繫結。若要保留 1.3 的行為,請設定keybind = cmd+arrow_up=scroll_to_top和keybind = cmd+arrow_down=scroll_to_bottom。 #12245 - GTK:預設的
ctrl+shift+page_up和ctrl+shift+page_down快捷鍵 現在將目前分頁向左和向右移動(move_tab),與 Firefox、 GNOME Terminal 以及 VS Code 相符。jump_to_prompt被移至ctrl+shift+arrow_up和ctrl+shift+arrow_down,因此在終端機中執行的程式不再收到這些鍵。若您使用的程式 需要它們,請使用keybind = ctrl+shift+arrow_up=unbind和keybind = ctrl+shift+arrow_down=unbind解除繫結。 #4998 #12458
以下清單包含目前仍透過相容層保持相容的棄用專案,但若忽略,未來發布可能會失效:
scrollback-limit已重新命名為scrollback-limit-bytes,以為新的scrollback-limit-lines留出空間。 #13473copy-on-select = true在 Linux 和 FreeBSD 上被copy-on-select = primary取代,或在 macOS 上被copy-on-select = clipboard取代。copy-on-select = false被copy-on-select = none取代。 #12600 #12604
尚未設定移除這些棄用專案的具體時間表,但我們建議儘早適應新的設定,以避免未來可能的中斷。
- 滾動回溯歷史現在在終端機閒置時透明壓縮,對於典型文字,壓縮後的滾動回溯實體記憶體使用量可減少 70% 至 90%。壓縮功能在 macOS 和 64 位 Linux 上可用,並可透過新的
scrollback-compression設定停用。由於此功能,預設滾動回溯上限已從 10 MB 提升至 50 MB,平均而言仍比之前完整回溯使用更少記憶體。 #13264 - 新增設定
scrollback-limit-lines以行數限制滾動回溯,而非以位元組。現有的scrollback-limit設定 已重新命名為scrollback-limit-bytes(舊名稱仍可使用)。若同時設定,先達到的限制將 適用,兩者皆接受unlimited。 #13473 copy-on-select現在接受none、primary、clipboard和both,並且不再影響中鍵貼上(見middle-click-action)。clipboard現在僅複製到系統剪貼簿,若想使用舊行為,請使用both。 macOS 上的預設現在為none。請參閱 重大變更 以取得遷移細節。 #12600- 新增設定
middle-click-action用於設定中鍵點選的行為:primary-paste(預設)從選擇剪貼簿貼上,clipboard-paste從系統剪貼簿貼上,ignore不執行任何動作。 #12478 - 一個新的繫結動作
move_tab_to_new_window將目前分頁移至 一個獨立的新視窗。此功能亦可在指令面板中使用。 #2630 - 新增一個 CLI 命令
+explain-config,可列印設定選項或繫結動作的說明檔案,例如ghostty +explain-config font-size。 #11546 +explain-config與+show-configCLI 命令現在在互動執行時,會透過$GHOSTTY_PAGER或$PAGER分頁輸出(若無則回退至less)。可使用--no-pager或將分頁器設定為空值來停用分頁。 #11940- 新增一個設定
drag-handle,用於控制分割拖曳控制代碼顯示的時機:auto(預設)、always或never。 #13706 #13709 - 滾動回溯搜尋現在在跳過第一筆或最後一筆比對時會自動回環。 #11449
- 新增一個設定
link-osc8(預設為true),可設定為false以完全停用 OSC 8 超連結。被停用的 OSC 8 超連結不會被高亮、預覽、複製或開啟。 #13634 - 在 Ghostty 執行的程式現在會收到一個
GHOSTTY_SURFACE_ID環境變數,該變數能唯一識別其所在的終端機。 #12027 - 滑鼠右鍵功能表現在包含「關閉分割」專案。 #11173 #11174
- 升級至 Unicode 18。 #14293
- 在 macOS 上,透過同時從 pty 讀取資料並解析先前讀取的輸出,I/O 吞吐量提升 25% 至 55%。 #13209
- VT 處理在各方面均顯著加速。純文書處理快至約 6 倍,實際輸出(以大型 asciinema 資料集測試)快約 24%,重複字形輸出快約 3 倍,DEC 特殊圖形(線條繪製)、重複字元(
REP)、超連結密集輸出以及捲動區域均更快。 #13220 #13226 #13231 #13294 #13625 #13826 #14356 - 大型 OSC 序列(例如 OSC 52 剪貼簿寫入)解析速度提升約 30 倍,小型 OSC 序列(例如標題變更)則提升約 6 倍。 #14011 #13565
- 重新排版時的調整尺寸在大滾動回溯情況下快約 6 倍,在寬字元(如 CJK 或 emoji)佔比高的滾動回溯中快 3 倍至 5 倍。 #13537 #13827
- 終端機使用的記憶體顯著減少。新的終端機在 macOS 上,畫面只佔約 16 KiB 的實體記憶體,取代之前的 128 KiB;每個終端機頁面使用的記憶體減少 30%;並且從滾動回溯釋出的記憶體(例如清除後)現在會回收給作業系統。 #13240 #13245 #14130 #14137 #14138
- Kitty 圖形處理更快。大型影像傳輸以 SIMD 批次解析,zlib 壓縮影像解壓速度提升約 17%,畫素格式轉換避免額外複製,且每幀繪製影像的成本大幅降低,尤其在畫面上或長滾動回溯中使用 Unicode 佔位影像時。 #13270 #13281 #13987 #14422 #14780 #14789
- 格式化終端機內容的速度提升 1.5 倍至 8 倍,進而加速剪貼簿複製(純文字、HTML 與 VT)、
write_screen_file及相關動作,並提升滾動回溯搜尋。 #13587 - 渲染器在每幀中持有終端機鎖的時間縮短 2.7 倍至 11 倍,字形與字型查詢亦更快。 #13227 #14300 #14301 #14420 #14406 #13258
command-palette-entry = clear移除所有命令面板專案, 包含預設專案。 #12682window-padding-balance擁有一個新值equal,能在四面均勻調整內距, 不會限制上方內距。 #11491theme現在會將~擴充套件至主目錄, 在主題檔案路徑中,包括分別的淺色與深色主題。 #13840+list-themes現在支援g與G以跳至第一與 最後一個主題,並且ctrl+d與ctrl+u以翻頁向下與向上。 #13681 #14607- 終端機檢查器現在可以複製終端機 I/O 事件或將其 匯出至檔案。 #13519
- 捆綁的主題已更新至 release-20261019-151001-86a776d。 此更新新增 356 個新主題,並未重新命名或移除任何主題。10 個 現有主題的顏色已於上游變更:Adwaita、Adwaita Dark、Atom One Light、 Catppuccin Frappe、Catppuccin Latte、Catppuccin Macchiato、Catppuccin Mocha、Cursor Dark、Dark Modern 與 Electron Highlighter。
- 修正設定檔解析時,若註解或空白行恰好結束於內部緩衝區邊界, 將會靜默忽略後續所有設定的問題。這通常僅影響長設定檔。 #13638
- 修正一個效能下降問題,當長時間執行後,渲染器會在每一幀 重新建立完整終端機狀態。 #13585
- 修正自動建立的設定檔為空,而非包含設定範本的問題。 #13774
+edit-config在$EDITOR或$VISUAL含有引數時也能正常運作, 例如zed --new。 #11897adjust-cursor-height再次正常運作。 #13225- 滑鼠選取改進:在
ctrl/cmd三擊輸出選取後拖曳, 現在會延伸選取至命令輸出;自動捲動在畫面切換時停止(例如切換至 備用畫面);在 macOS 上強制觸控可選取按下位置的單字,而不會開始拖曳; 釋放拖曳後不再啟動連結或提示點選。 #12830 - 雙擊字詞選取不再跨越硬行斷行, 且雙擊寬字元(如 CJK)的任一半段會選取整個字詞。 #14354 #14391
- 選取區域邊緣的寬字元現在始終以選取狀態呈現,並在複製時包含, 即使該寬字元換頁至新內部頁面。 #14632 #14651
- 三擊行選取不再在 OSC 133 提示符邊界之間點選空白儲存格時 拉入相鄰的提示文字。 #14553
- 連結偵測與雙擊選取在啟用 shell 整合時, 不再將提示文字與相鄰的命令文字合併。 #12435
- 使用
cmd/ctrl點選開啟的檔案路徑不再包含尾隨空格, 這會破壞某些 TUI 列印的路徑開啟。 #13505 - 滑鼠釋放現在會回報給在啟用點選移動時,點選 shell 提示符的程式。
此修正了像 fzf 的
ctrl+r歷史搜尋等程式的雙擊選取問題。 #14710 - 在調整大小後重新繪製的 shell 不再以舊終端機尺寸處理。 這修正了調整大小後重複或位置錯誤提示符的一個原因。 #14706
- 捲動,例如點選捲軸,現在可在極大滾回(數百萬行)下正常運作。 #13048
- 自訂
command-palette-entry動作使用字串引數,例如set_tab_title,在從命令面板執行時不再將其引數轉義。 #13609 - HTML 剪貼簿複製不再包含多餘的結尾換行。#13543
- 以 VT (
copy_to_clipboard:vt) 和 VT 畫面檔案複製時,現在會保留 OSC 8 超連結、文字間的空白區域,以及僅有背景色的儲存格, 例如彩色狀態列。VT 畫面檔案也會保留結尾空白列。#14711 #14725 #14766 - 滑鼠指標現在在釋放修飾鍵後會恢復執行程式設定的形狀 (OSC 22),而不是重設為預設。#14128
- 自訂著色器不再收到前景與背景顏色混淆的 uniform。#14460
- Ghostty 在輸出包含多種樣式、字形或超連結時,已不再大量寫入「調整頁面容量」訊息。#14631
- 修正在捲動或刪除後重複使用的列中,舊的換行與提示狀態可能導致複製、搜尋、選取及重新排版錯誤。#14010
- 修正刪除或擦除換行寬字元後,前一列仍呈現舊畫面的問題。#14054
- 修正在重新載入設定時,程式向終端機傳送大量查詢(如顏色查詢)造成凍結。#14833
+list-themes在搜尋不匹配任何主題時不再因部分鍵盤鍵崩潰,數字鍵盤下鍵現在一次移動一列,而非 21 列。#14612 #14605- 修正清除捲軸記錄、調整大小或刪除歷史後,捲軸回溯搜尋崩潰。#11957 #13274 #13282
- 修正在帶有捲回歷史或遊標接近畫面底部時調整大小導致崩潰及視窗破壞。#12300 #12907 #12935
- 修正在大量輸出時點選或選取文字造成的 use-after-free 崩潰。#12463
- 修正在調整大小時重新排版超連結可能導致的崩潰。#13524
- 修正在跨頁邊界捲動或擦除列、需要更多容量時可能發生的崩潰或記憶體損壞。#13394 #13397
- 修正透過模糊測試發現的可能崩潰與記憶體損壞,當列印使頁面擴張或清除畫面進入捲軸回溯時。#11261 #13997
- 修正選取、置頂、搜尋、標題與工作目錄更新,以及重新調整大小時的錯誤處理中多個潛在崩潰與未定義行為。 #12894 #13275 #13278 #13367
- 修正大量 pty 寫入排隊(如大幅貼上)時可能導致的崩潰或輸入損毀。#13659
- 修正輸入法預編輯文字含寬字元時,在現有寬字元之間組合造成的越界存取。#12479
- 修正按下或釋放滑鼠按鍵 11 時的崩潰。#14759
- 修正
write_screen_file、write_scrollback_file與write_selection_file動作在每次使用時洩漏兩個檔案描述符,可能最終阻止開啟新終端機。#13644 - 修正終端機輸入/輸出中的記憶體與檔案描述符洩漏,包括讀取模式下寫入與透過
input設定讀取檔案。#13574 #13579 #13931
- vt: Kitty 圖形動畫現在已完全支援:幀傳輸、合成、動畫控制與渲染。#5255 #13943
- vt: Kitty 圖形相對定位(
P=、Q=、H=、V=)現在已支援,允許圖片相對於其他圖片定位。#13939 - vt: 支援 Kitty 圖形暫存影像使用提示。暫存影像在影像儲存空間滿時會先被驅逐。#13389
- vt: Kitty 剪貼簿協定(OSC 5522)現在已在 macOS 和 GTK 上實作,包括貼上事件(模式 5522)。讀寫遵循
clipboard-read與clipboard-write,並新增clipboard-write-limit-bytes設定限制單次寫入大小。#10549 #13962 #13993 #13995 #13998 #14002 #14061 - vt: 支援可見性報告(模式 2033 與
CSI ? 998 n),告知程式終端機何時不可見,例如在背景分頁或另一工作區,讓它們停止渲染。#13494 - vt: 程式可以使用 xterm
CSI 8 ; rows ; cols t序列調整視窗大小,若啟用新的vt-window-resize-allowed設定(預設關閉)。此請求在分割、帶多個分頁的視窗、快速終端、全螢幕、最大化或平鋪視窗時會被忽略。#1115 #14375 - vt: 支援 OSC 133
click_events=2,報告相對於提示符的行座標點選。#10865 #12953 - vt: 支援軟終端重置(DECSTR,
CSI ! p),重置模式、邊距與文字屬性,且不清除螢幕。#14538 - vt: 支援退格鍵模式(DECBKM, 模式 67),允許程式選擇退格鍵是否傳送
DEL(0x7f,預設)或BS(0x08)。#12226 - vt: 支援 DECRQCRA 與 XTCHECKSUM 畫面校驗和報告,主要被終端機測試套件使用。由於程式可利用這些讀取畫面內容,除非啟用新的
vt-xt-checksum-report設定,否則會被停用。新的vt-xt-checksum-extension設定控制校驗和的計算方式。#14483 - vt: 回應
CSI 19 t(報告畫面字元尺寸)以及 DECXCPR (CSI ? 6 n) 擴充遊標位置請求。#14633 #14673 - vt: DECRQM 現在回應 ANSI 模式查詢(
CSI Ps $ p),將 DECECM 與其他未實作的 ANSI 模式報告為永久重置,且不再在回覆中截斷超過 32767 的模式號。#12505 #14236 #14237 #14672 - vt: Ghostty terminfo 現已宣告上劃線支援(
Smol/Rmol),允許 tmux 傳遞上劃線。DECRQSS SGR 回覆現在包含上劃線以及彎曲、雙線、點線與破折線下劃線樣式。#13649 #13653 #13470 - vt: terminfo
Se能力現在將遊標重置為設定的cursor-style而非持續方塊。此舉修正像 Neovim 之類程式在退出時留下方塊遊標的問題。#12482 - vt: OSC 負載現限制為 8 MiB,Kitty 圖形負載限制為 65 MiB,每格限制 64 個組合碼點,避免終端機輸出輕易耗盡記憶體。此舉亦修正無效 Kitty 圖形資料造成的記憶體洩漏。#12349 #13633
- vt: 實驗性支援 Glyph Protocol (APC
25a1),允許程式註冊自訂字形。Ghostty 會解析並回應請求,但尚未呈現已註冊的字形。 #12352 #12930 #12937 - vt: 解析新的程式狀態協定 (OSC 7501),允許程式報告其是否閒置、工作中、完成、被阻塞或失敗。這是 Ghostly 專案開創的第一個終端規格。libghostty 能夠完整解析,但 Ghostly GUI 目前仍忽略此功能。 #14560
- vt: 解析(但不實作)Kitty 桌面通知協定 (OSC 99)。 #10467
- vt: 解析(但不實作)Kitty 拖放協定 (OSC 72)。 #13029
- vt: 更多 tmux 控制模式修正,包括執行
tmux -CC時可能觸發的崩潰。tmux 控制模式仍未連結至 GUI。 #11395 #11935 #14262 #14680 - vt: 在提示符下清除螢幕(例如 bash 或 zsh 中的
ctrl+l)現在會將先前輸出移至捲軸回溯,即使提示符不在最後一行。以前,輸出會被擦除。 #14660 #14668 - vt: Kitty 圖形:使用現有 ID 傳送影像時,現在會替換該影像並移除其舊位置,符合規範。中斷或失敗的重傳不再留存過期影像於螢幕。 #6711 #13723 #13893
- vt: Kitty 圖形:影像現在會隨程式使用
CSI S、CSI T或捲動邊距捲動時移動,並被裁剪至捲動區域。 #4323 #13935 - vt: Kitty 圖形:自動分配的影像 ID 不再與程式選擇的 ID 衝突。 #2197 #13934
- vt: Kitty 圖形:刪除指令現在符合規範及 Kitty。點選刪除(
d=p、d=c)僅移除該格的佈置,d=a只移除可見螢幕上的佈置,範圍刪除接受空範圍,刪除不存在的佈置不再釋放影像。 #13652 #13895 #13898 #13932 - vt: Kitty 圖形:指令驗證與回應現在符合 Kitty。此修正缺失對無效影像資料的回應,避免客戶端掛起、誤正查詢回覆、分塊傳輸回覆中遺失 ID、精確
S大小的檔案傳輸,以及因非分塊傳輸中斷的載入。 #13889 #13892 #13896 #13897 #13933 #14811 - vt: Kitty 圖形:裁切來源矩形不再被拉伸,
X/Y偏移保持在第一格內。 #13890 #13891 - vt: Kitty 圖形:遊標在高影像後移動,與 Kitty 相同,故連續影像不再重疊。 #13887
- vt: 全重置(RIS)不再將
image-storage-limit重設為預設值。 #13951 - vt: OSC 與 APC 序列(例如 Kitty 圖形指令)被 CAN 或 SUB 取消,或被其他控制字元中斷時,現在會被丟棄而非執行,符合 xterm。 #14453 #14812
- vt: 使用 modifyOtherKeys 等級 2 時,控制鍵、數字鍵盤鍵以及
alt+escape現在以 xterm 編碼。F13 至 F25、Help 與 Menu 現在在所有舊版編碼模式下傳送 xterm 的功能鍵序列。 #14144 #14145 - vt: Legacy alt-as-escape 編碼現在會為非 ASCII 鍵傳送完整的 UTF-8 序列。 #14146
- vt: Kitty 鍵盤協定釋放事件不再重複輸入的文字 對於 GTK 上的 dead key 或 level 5 鍵,這曾造成 在像 Neovim 這類程式中重複字元。#13861
- vt:
ctrl+alt+shift+backspace現在在 legacy key 編碼中傳送ESC BS, 符合 xterm。#14508 - vt: UTF-8 滑鼠模式 (1005) 現在正確編碼按鈕,修正 後退與前進滑鼠按鈕的無效報告。#14532
- vt: 使用 OSC 110、111 或 112 重設前景、背景和遊標顏色時,現在會跟隨後續的設定變更,例如 淺色/深色主題切換。#13650
- vt: 完全重設 (RIS) 現在會恢復使用 OSC 4 更改的調色盤顏色。 #14480
- vt: 空的 OSC 22 現在會將滑鼠指標形狀重設為預設。 #14495
- vt: 長桌面通知 (OSC 9 與 OSC 777) 內含多位元 UTF-8 文本時, 不再在截斷時丟棄或顯示為無效 UTF-8。#13795 #13811
- vt: DCS 字串現在攜帶 UTF-8 資料。以前,某些 UTF-8 位元會被 丟棄、提前結束字串或啟動新的控制序列。#14016
- vt: C0 控制碼
0x10到0x1F現在會被執行而非作為文字列印, 而 UTF-8 編碼的 C1 控制碼則被忽略,與 xterm 相符。#14022 #14023 - vt: 刪除整行 (
CSI 2 K) 現在會清除其軟換行狀態, 因此在視窗調整大小時,已刪除的列不再互相連線。#13637 - vt: 在調整大小時重新排版文字,遊標與儲存遊標會保留正確位置, 修正重新調整後產生的額外換行或覆寫文字。#12598 #14458 #14478
- vt: 變體選擇符 (VS15/VS16) 現在適用於前一個碼點, 修正某些 ZWJ 表情符號(例如海盜旗)的呈現。#12596
- vt: 在最後一欄印出的組合符號現在會附加到該字元。#12581
- vt: U+00FF 以上的字元(例如表情符號)現在會原樣列印, 而非在使用非 UTF-8 字元集(如 DEC 線條繪製)時顯示為空白。#14554
- vt: 單一移位 (SS2/SS3) 現在隻影響下一個列印字元。#14576
- vt: 標籤清除 (TBC) 修正:
CSI 0 g不再在沒有標籤停靠點的地方 設定停靠點,且CSI g在沒有引數時會清除遊標所在處的 標籤停靠點。#13900 #14644 - vt: 在關閉自動換行 (DECAWM) 時列印會清除待處理的換行, 因此重新啟用自動換行不會造成多餘的換行。#14652
- vt: 啟用反向換行時,恢復帶有待處理換行的遊標後向左移動 不再使遊標跳躍。#14390
- vt: 遊標移動會遵守邊界與原點模式:CUB 與退格鍵會停在左 邊界,且 CHA、HPA、VPA、HPR 與 VPR 在原點模式下不再 重複套用邊界偏移。#14761 #14762
- vt: 修正 VS15 在遊標下方縮短寬字元時造成的崩潰。#13631
- 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. #14509
- 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. #14552
- vt: Fix a slow memory and performance leak in graphics-heavy sessions where evicted Kitty images left their placements' tracked positions behind. #13656
- vt: Fix a memory leak when an OSC color sequence contains more than two requests. #13239
- A new
ghostty +sshCLI action wrapssshand 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 (ghostty +ssh user@example.com) or as an alias (alias ssh='ghostty +ssh --') without shell integration. Thessh-envandssh-terminfoshell integration features now use it for every shell. #12582 ssh-terminfonow always installs Ghostty's bundled terminfo on remote hosts instead of keeping an existing, possibly outdated,xterm-ghosttyentry, and reinstalls it when a newer Ghostty changes its terminfo. #13844ghostty +ssh-cachehas been reworked with positional destinations, a new--pruneoption, consistent output and exit codes, and error messages that name the cache file. See the breaking changes above. #12814 #13533ssh-terminfonow tells apart the same host on different ports, so terminfo is installed on each of them.ghostty +ssh-cacheacceptshost:portdestinations. #14472ssh-envno longer overridesSetEnventries in your~/.ssh/config. #11518 #14854- bash: Failed commands now report their real exit status on Bash 4.4+, so command finished notifications no longer report every command as successful. #14247 #14250
- nu: Tab completion for
sshandsudonow works with external completers such as carapace. #13310 - bash: The bundled bash-preexec, used only for Bash versions older than
4.4 such as macOS's
/bin/bash, has been updated to 0.7.0. #14120 - zsh: Fix a stray
{in the prompt and broken prompt marking whenPS1orPS2ends with a bare%. #11832 - bash: Fix "command not found" errors in subshells that inherit
PROMPT_COMMAND. #11690 - bash: Fix a syntax error when an existing
PROMPT_COMMANDends with a newline. #11621 - bash: Fix extra blank lines at the prompt when using ble.sh. #11644
- bash: Fix the shell integration hook being added twice when it is
sourced again with an array
PROMPT_COMMAND. #14266
- 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. #13001 #13390 #14107 #14411 #12999 #13069
- 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
abnormal-command-exit-runtimeare highlighted in red. #7649 #12251 - 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. #12742 #14062
- macOS: The command palette now highlights matching text, matches initials, searches action descriptions, and ranks results by where they matched. #12264 #13610 #13624
- 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. #12516 #12712
- macOS: Screen readers such as VoiceOver are now notified when the selection changes instead of reading a stale selection. #12902
- macOS: The AppleScript
terminalclass and the Shortcuts terminal entity now exposepid(of the foreground process) andtty. #11592 #10756 #11922 - macOS: AppleScript tabs and terminals have a new read-write
name overrideproperty to set or clear a custom title. #12048 #14733 - macOS: Middle-clicking a tab closes it with
macos-titlebar-style = tabs. #11962 #11963 - macOS: The version in the About window now links to the release notes for that version. #11964
- macOS: Updates that are downloaded and installed automatically no longer prompt you to restart. Checking for updates manually still offers to restart. #13623
- macOS:
toggle_background_opacitynow applies to every tab in the window, and new windows inherit the current state. #11583 - macOS:
cmd+arrow_upandcmd+arrow_downnow run their configured keybinds, which default tojump_to_prompt. Ghostty 1.3 always scrolled to the top or bottom of the scrollback instead, ignoring the configuration. To scroll to the top or bottom, usecmd+homeandcmd+end. #12245 - macOS: In the configuration errors window, Return reloads the configuration and Escape ignores the errors. #12601
- macOS: Ghostty launches about 15% faster to a visible window and draws its first frame about 27% sooner. #13722
- 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. #14017 #13490
- 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. #14035 #14068
- macOS: Update Sparkle to 2.9.6, which fixes several security advisories in Sparkle, including CVE-2026-47121 and CVE-2026-47122. #14072 #14082
- macOS: Global keybinds no longer stop working after macOS disables Ghostty's event tap. #12294 #12714
- 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
ctrl+jno longer send control characters to the terminal. #11461 #12447 #12518 #12547 - 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. #13195 #13222 #13817
- macOS: Unicode Hex Input can now enter characters outside the Basic Multilingual Plane, such as emoji, typed as surrogate pairs. #13733 #13737
- macOS:
font-thickennow also applies to IME preedit text. #14230 - macOS:
option+backspaceand other modified Backspace keys now report their modifiers with the Kitty keyboard protocol instead of sending a bare DEL. #13871 - 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
sftp://URL. #13152 #13170 #13212 - 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. #11872 #11978
- macOS: The Find Next and Find Previous menu items and the
navigate_searchandend_searchkeybinds now work correctly, including while the search field is focused. #12070 #12492 - macOS: Pressing Enter in the search bar no longer blocks confirming an IME candidate. #12781
- macOS: Clicking a command palette entry with the mouse now runs it instead of closing the palette. #11665
- macOS: The command palette now gets focus and paste when opened from the inline tab title editor. #12524
- macOS: Holding
cmd+tto create many tabs now leaves the newest tab focused. #13725 #13985 - macOS: Fix an empty "ghost" tab or window that could appear when a tab was closed right after it was opened. #12119
- macOS: Titlebar tabs no longer disappear after creating a tab from "Show All Tabs". #12949 #13017
- macOS: Double-clicking the window title now zooms the window with
macos-titlebar-style = tabs. #12219 - macOS: Moving a tab with
macos-titlebar-style = tabson macOS 26 no longer briefly shows the neighboring tab. #14847 - macOS: The inline tab title editor stays in place while the window is resized. #12220
- 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. #12825 #12828 #12822
- macOS: The
macos-glass-regularandmacos-glass-clearoptions forbackground-blurnow layer the glass over the background color, and focused windows are no longer less transparent than unfocused ones. #13914 #13928 - macOS: The native titlebar no longer cuts off the end of the title when
using a custom
window-title-font-family. #14135 #14217 - macOS: Fix terminals rendering at a stale size under heavy system load or during rapid resizes from window managers. #12143
- macOS: Splits dragged into another tab or window now render immediately, and the source window keeps keyboard focus. #12343 #12338
- macOS: The split zoom indicator no longer stays visible after the other splits of a zoomed split are closed, such as with AppleScript. #14703
- macOS: The split divider now uses the standard row and column resize pointers. #13433
- macOS:
window-save-state = nevernow also stops macOS from taking window restoration snapshots, which could stall focus changes between windows. #14506 - macOS: Window state saved by Ghostty 1.2 or later is now migrated, so windows and tabs are restored after updating Ghostty. #12461
- macOS: Tabs created while the screen is locked now initialize correctly. #13639
- macOS: Quitting now asks for confirmation when windows with running processes are minimized or the quick terminal is hidden. #13686
- 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. #13744
- macOS: Splits in the quick terminal now also set
GHOSTTY_QUICK_TERMINAL=1. #12895 #12896 - macOS: The quick terminal no longer reopens at a stale size after a display is reconnected at a different resolution. #13250
- macOS: The "New Ghostty Tab Here" and "New Ghostty Window Here" services now open the correct directory when given a plain-text path. #12727 #12731
- macOS: Working directories passed from Services, Shortcuts, and
AppleScript are now normalized, fixing Nushell and zsh
%1~prompts. #12614 #14051 - macOS:
ghostty -eno longer opens the command's file arguments as extra terminals, e.g.ghostty -e vim file.txt. #13748 - macOS: Opening a
.commandfile from Finder no longer corrupts non-ASCII characters in its path. #13862 - macOS: The Shortcuts terminal entity now reports the correct kind, title, working directory, and screenshot for new terminals. #13007
- macOS: The Shortcuts "New Terminal" action now works with commands that have arguments and with a command field that was cleared. #12391 #12392
- macOS: AppleScript
send keynow works for character keys, not only special keys likeenter, and respectsmacos-option-as-alt. #13205 - 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. #13540 #13562 #13612
- 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. #12180 #12344
- macOS: The dock icon bell badge now appears when notification permission was granted earlier without badge permission. #12133
- macOS: The Copy menu item is disabled when nothing is selected. #12521
- macOS: Menu items now show the correct shortcut for keybinds on physical
keys (e.g.
super+backquote), uppercase letters, forward delete, and thescroll_to_selectionandsearch_selectionactions. #13888 #12039 #12011 #12281 - macOS: The secure input indicator's popover arrow now points at the icon. #12249
- 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. #14691
- macOS: Fix a crash when closing a tab, most easily triggered with
undo-timeout = 0. #13359 #13364 - macOS: Fix a crash when opening a new tab from a native fullscreen window. #13636
- macOS: Fix a crash caused by a data race when reading cached terminal contents. #13646
- macOS: Fix a crash when OSC 52 clipboard confirmation prompts overlap. #13648
- macOS: Fix crashes when CoreText returns null, such as for fonts without a display name or under severe memory pressure. #13642 #13679
- macOS: Fix closed windows leaking with transparent titlebars (the default), which made Ghostty and WindowServer use more CPU and memory over time. #13601
- macOS: Fix a memory leak each time Ghostty reads terminal text, such as for copy, Quick Look, or accessibility. #12020 #12025
- macOS: Fix an IOSurface memory leak when scripts rapidly create and close terminals. #13640
- macOS: Fix a Mach port leak, and a gradual slowdown, while global keybinds wait for Accessibility permission. #13590
- 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. #10224 #10423
- 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. #1938 #14269
- GTK: The renderer no longer uses
GtkGLArea. 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. #14052 #14636 - GTK: Windows can now be renamed using the menu, command palette, or the
new
prompt_window_titleandset_window_titlebinding actions. #10469 #10999 - GTK: A new
+new-tabCLI 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-e,--working-directory, and--titleflags as+new-window. #11762 - GTK: A new
+toggle-quick-terminalCLI command toggles the quick terminal of a running Ghostty instance, useful for binding in window managers without global shortcut support. #12661 - GTK: Global keybinds now use the
vicinae-hotkey-v1Wayland 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. #13464 - GTK:
quick-terminal-screenis now supported on Wayland. The default,main, places the quick terminal on the compositor's primary output (or the first monitor if the compositor doesn't report one). Set it tomouseto let the compositor choose, which was the previous behavior. #11117 - GTK: On Wayland,
background-blurnow uses the compositor-agnosticext-background-effect-v1protocol 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. #10721 #10720 #10727 - GTK: On GTK 4.23.3 and newer,
background-bluruses GTK's built-in background blur, which covers the window more accurately. #13581 #13586 - GTK: The
open_configbinding action now acceptsnew_windowto edit the configuration in$VISUALor$EDITORin a new Ghostty window. The default,os_open, keeps the previous behavior. #11905 - GTK: A new configuration
gtk-horizontal-tab-scroll(defaulttrue) can be set tofalseto stop two-finger horizontal scrolling from switching tabs, passing the scroll to the terminal application instead. #12659 - GTK: A new configuration
gtk-tabs-invertedmoves the close button to the start of each tab, in both the tab bar and the tab overview. #14657 - GTK: The default command palette entries are now translatable. #11641
- 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. #14047
- GTK:
ctrl+shift+page_upandctrl+shift+page_downnow move the current tab left and right (move_tab), matching Firefox, GNOME Terminal, and VS Code.jump_to_promptmoved toctrl+shift+arrow_upandctrl+shift+arrow_down. #4998 #12458 - GTK: URLs now open through the XDG desktop portal, falling back to
xdg-openif 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. #5991 #11754 #14785 #14787 - 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. #14108
- GTK: Tabs that aren't visible no longer render, saving CPU and GPU. This matches macOS. #12760
- GTK: The Dolphin "Open Ghostty Here" action now opens a new window in the running Ghostty instance instead of launching a separate one. #11614
- 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. #14398 #14399
- GTK: Fix deeply nested splits sometimes becoming invisible or losing focus. #11193 #12698
- GTK: Resizing splits, especially with
resize_splitkeybinds, no longer flickers. #13414 - GTK:
resize_spliton nested splits no longer causes large jumps in size. #12699 - GTK: Splits can no longer be resized smaller than one cell, by dragging
the divider or with
resize_split. #14476 - GTK: High-resolution scroll wheels no longer scroll much faster than standard scroll wheels. #12483
- GTK: Disable unwanted kinetic scrolling on trackpads with GTK versions older than 4.20.1. #11793
- GTK: Middle clicks are once again sent to terminal applications using
mouse reporting when
gtk-enable-primary-pasteis disabled in GSettings. #12940 #13108 - GTK: The quick terminal no longer breaks when toggled off manually
while
quick-terminal-autohideis enabled. #11679 #12471 - GTK: Opening the right-click context menu no longer hides the quick
terminal when
quick-terminal-autohideis enabled. #12843 - GTK: The resize overlay no longer keeps reappearing when the scrollbar is visible and no longer blocks mouse input while shown. #11970 #11972
- GTK: The maximum window size is now based on the monitor the window is currently on, not the monitor it was opened on. #13171
- GTK:
+new-window -enow works whenshell-integrationis set to a specific shell.+new-windowand+new-tabalso accept a new--shell-integrationflag. #12378 #13741 - GTK: Keys remapped to modifiers with XKB (e.g. Delete remapped to
ISO_Level3_Shift) no longer also send the original key. #13967 - GTK: On Wayland, the IME candidate window now follows the cursor while composing and no longer covers the line being edited. #14729
- GTK: Splits in a tab that was moved to another window now act on the
new window (e.g.
toggle_fullscreen). #14474 - GTK: The mouse cursor keeps its text shape while selecting text. #14558
- GTK: The command palette now uses the terminal colors when
window-theme = ghostty. #14662 - GTK: Opening URLs no longer fails when the fallback opener (
xdg-open) produces large output. #12797 - GTK: Clicking a desktop notification no longer focuses the wrong terminal when the one that sent it has since been closed. #12028
- GTK: A bell in the focused terminal no longer leaves the bell indicator set. #13597
- GTK: Fix the window continuously redrawing in the background after an indeterminate progress bar (OSC 9;4) was removed. #14704 #14738
- GTK: Log missing or invalid
gtk-xft-dpivalues once instead of repeatedly. #14410 #14085 #14434 - GTK: Fix a crash when closing tabs or splits on GTK 4.20 (GNOME 49). #12426
- GTK: Fix a crash with global keybinds or on configuration reload when no D-Bus connection is available. #13101
- GTK: Fix a possible crash when Fontconfig reports a font's language as a plain string instead of a language set. #14853
- GTK: Fix a leak where every audio bell started a new GStreamer pipeline and threads that were never cleaned up, slowly raising CPU usage. #13647 #12815 #13657
- 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. #14392 #14682
- Snap: The snap's own GIO modules and XDG data directories now take priority over the host's. #12045
- Snap: Programs running inside Ghostty, such as
clear, now find thexterm-ghosttyterminfo entry. #12662 - Flatpak: Commands started by Ghostty on the host are now terminated if Ghostty crashes. #12427
Ghostty 1.4 introduces full localization for the command palette and adds support for 4 new languages:
- Basque
- Belarusian
- Danish
- Serbian (Cyrillic and Latin scripts)
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!
- Ghostty now requires Zig 0.17 to build. #14518 #14519
- GTK builds now require GTK 4.18 and libadwaita 1.7, 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. #14330
- GTK builds now link the system EGL library (pkg-config
egl, 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. #14052 #14636 - A new
-Dinstalled-exe-pathbuild 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 nameghosttyalone, which systemd only finds in/usr/binor/usr/local/bin, so set it for any other prefix. #14805 #14806 - When linking the system gtk4-layer-shell (
-fsys=gtk4-layer-shell), 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. #11559
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.
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.
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!
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. libghostty-vt no longer needs libc++, and it can build freestanding.
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 API documentation
and the Zig, C, C++, Swift, and WebAssembly examples
(now over 30) are kept up to date with main.
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.
Ghostty is a non-profit project, fiscally sponsored by Hack Club. All of our finances are public on HCB, so you can see exactly where every dollar goes.
During the 1.4 cycle, we paid $41,820 to contributors under contract and spent about $1,260 on infrastructure such as website hosting.
I'm happy to share that we've now signed our first two 12-month contracts, which give contributors stable, long-term paid work on Ghostty and help ensure the ongoing stability and sustainability of the project:
- @trag1c 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.
- @vancluever works on various Ghostty
subsystems. In this cycle, he led the upgrade to Zig 0.16, moved the
build off Zig's deprecated
@cImport, updated the bundled Fontconfig, and more. He's also the author of z2d, the 2D graphics library Ghostty uses to draw box-drawing characters and other sprite glyphs.
If you'd like to support Ghostty, please visit our sponsorship page.
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.
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.
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.
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.