Ghostty är en snabb, funktionsrik och plattformsoberoende terminalemulator som använder plattformsinbyggt UI och GPU-acceleration.
Keybindings
Ghostty stöder flexibla, anpassade tangentbindningar genom konfigurationsalternativet för tangentbindning – genvägar och tangentbordskombinationer.
Färgtema
Ghostty kommer med med hundratals inbyggda teman, stöder olika teman för ljust och mörkt läge och mer.
Konfiguration
Ghostty stöder hundratals konfigurationsalternativ för att få programmet att se ut och fungera sig precis som du vill.
Terminal API (VT)
What’s new in version 1.3.0
- Scrollback search is now available to search through terminal scrollback. This is triggered with cmd+f on macOS and ctrl+shift+f on GTK and comes with a number of new bindable actions. #189
- Native scrollbars are now available to navigate scrollback. These can be controlled with the new scrollbar configuration. #111
- Inherit working directory configuration can now be specified differently for windows vs. tabs vs. splits. #1392
- Keybinds now support chaining multiple actions in sequence using the chain key, allowing a single keybind to trigger multiple actions (e.g., toggling fullscreen and window decorations together). #9961
- Keybinds now support key tables: named sets of keybindings that can be activated and deactivated, enabling modal keybinding workflows. Tables support one-shot mode, catch-all fallthrough, stacking, and compose with key sequences and chained actions. #9963
- New catch_all special key for keybindings that matches any key not explicitly bound. Supports modifiers (ctrl+catch_all=…) and trigger sequences (ctrl+a>catch_all=…). #9977
- Data copied to clipboard now supports rich text and can be configured with copy_to_clipboard binding action parameters. #9396
- Window and tab titles can now be set separately from split titles using the menu, command palette, or new keybind actions. #9879
- Session search in the command palette lets you jump to any running terminal by searching its title or working directory, with tab color indicators (macOS). #9945
- Support Kitty’s click_events extension which lets clicking the prompt in supported shells move the cursor, such as Fish v4+ and Nushell 0.111+. #10536
- Support OSC133 cl=line so bash and zsh get clickable prompts with the above. #10542
- The Ghostty configuration can now have the .ghostty extension. #8689
- Ghostty can now show notifications when a command finishes using the notify-on-command-finish configuration. This can be set to trigger under various conditions such as slow commands, unfocused windows, etc. #8991
- A surface can now be marked ”readonly” and it will no longer send any input events to the pty and will always warn before closing. This can be triggered by a new keyboard binding, command palette, etc. #8432
- A new configuration key-remap can be used to remap keys from one to another within the scope of Ghostty. Example: key-remap = ctrl=super. #5160
- A new configuration clipboard-codepoint-map takes a mapping to replace some codepoints when copying to the clipboard (writing the clipboard, specifically). This would allow copying things like symbols for computing, branch drawing, etc. #8383
- A new configuration selection-word-chars can be used to configure the characters that determine word boundaries for double-click selection. #9335
- A new configuration mouse-reporting = false can be used to disable all TUI mouse reporting features. #8430
- A new configuration value scroll-to-bottom = output that automatically scrolls the window to the bottom on any output (default off). #9938
- A new configuration option split-preserve-zoom that starts with a single option navigation (default false). When navigation is set, zoomed splits will remain zoomed when split navigation (goto_split) is done. #8458 #9089
- A new binding action goto_window:next and goto_window:previous to deterministically navigate through windows. #8387
- A new binding action toggle_mouse_reporting toggles mouse reporting to the TUI. #9282
- A new end_key_sequence binding action to explicitly end an active key sequence, flushing prior keys to the terminal without encoding the triggering key (e.g. ctrl+w>escape=end_key_sequence). #10098
- The close_tab binding action takes a new parameter right which closes all tabs to the right. #9783
- resize_split and toggle_split_zoom actions now return false when there is only a single pane, allowing performable: keybinds to pass the key through to the terminal application. #10376
- The quick terminal now sets the GHOSTTY_QUICK_TERMINAL environment variable which can be used in any way, such as for custom shell prompts. #9673
- The cursor shell integration feature now respects cursor-style-blink, using a steady bar when blinking is disabled instead of always using a blinking bar. #10643
- Right clicking a URL will now highlight the full URL. #9298
- Upgrade to Unicode 17. #8757
- The +list-themes command now has a keybind to write a configuration file. #8930
- Commands started with -e now set the terminal title to argv[0]. #9121
- Custom shaders have many new uniforms such as cursor shape, position, previous position, time since change, color scheme, etc. to support more advanced shaders. #9416 #9417
- OSC7 URI parsing now handles more edge cases such as MAC addresses better. #9193
- Unsafe control characters in pasted text are now replaced with spaces to prevent malicious pastes from tricking users into executing unexpected commands, matching xterm’s behavior. #10746
- IME preedit text is now rendered with underlines instead of inverted colors for better readability and consistency across programs. #10368
- Improved font rendering on some low-DPI monitors. #9432
- For font metrics, round cell height from line height instead of ceiling. This change should give more consistent results between high and low DPI displays. #9648
- Decouple balanced top and left window paddings to avoid diagonal resize window jitter. #9518
- Update many default keybindings to work with other keyboard layouts. This should not affect standard US layouts. #9469
- Ignore Unicode byte-order-mark (BOM) characters in the configuration file. #9490
- Keypad variation sequences respect Unicode VS16. #9502
- VS15/16 check now considers emoji bases properly. #9679
- Grapheme break algorithm updated to match Unicode spec exactly. #9680
- Fix rendering of wide grapheme clusters in scripts like Devanagari where multiple non-zero-width code points combine into a single cluster that should occupy two cells. #10465
- Fix possible crash due to data race condition looking up hyperlinks. #9813
- Fix possible crash due to data race with selection and copy. #9818
- Fix a crash caused by a race condition between drawing Kitty image placements and the placement list being updated, triggered when rapidly cycling through images in applications like Yazi. #10680
- Fix a major memory leak when pruning scrollback with non-standard sized pages. Non-standard pages (caused by emoji-heavy, hyperlink-heavy, or Claude Code output) were incorrectly returned to the memory pool instead of being unmapped. #10251
- Fix rendering artifacts that could be caused in certain edge cases with insert lines or delete lines (IL/DL) VT operations. #10290
Terminal Capabilities:
- vt: More complete and accurate parsing and implementation of OSC 133. #10427
- vt: ConEmu OSC9 is now fully parsed (subcommand 1 to 12). Ghostty GUI only implements a subset of this but libghostty can parse it all. #3125
- vt: Report color scheme events are now reported synchronously. #5922
- vt: Modify other keys state 2 no longer encodes option as alt on macOS. #9406
- vt: shift+backspace encodes properly for Kitty Keyboard Protocol. #9896
- vt: CSI Scroll Up (e[nS) now preserves scrolled-off lines in the scrollback buffer instead of erasing them, matching the behavior of other terminal emulators. This fixes Fish shell’s Ctrl-L (scrollback-push) losing history. #9905
- vt: Reset (RIS) now also resets the progress bar. #10168
- vt: Suppress mouse reports for focus-transfer clicks so split focus changes don’t emit unintended mouse input to terminal applications. #11167
- vt: Parse Kitty text sizing protocol (OSC 66), not implemented in the GUI yet. #10315
- vt: Parse (but do not implement) iTerm2 OSC 1337 extensions. #10417
- vt: Parse (but do not implement) Kitty clipboard protocol (OSC 5522). #10560
- vt: Significantly more tmux control mode parsing, but not hooked up to the GUI yet. #9803 #9860
- vt: Fix crash with specially crafted large images in Kitty Graphics. #9579
- vt: Fix crash when spamming BEL (0x07). #9800
- vt: Ghostty terminfo now advertises support for SGR dim. #11144
Shell Integration:
nu: SSH shell integration now supported. #7877 fish: Add descriptions to fish shell completions for Ghostty. #9531 zsh: Fix literal n appearing in window titles when running commands in zsh by stripping control characters instead of converting them to visible representations. #10341 bash: shell integration no longer depends on bash-preexec for Bash 4.4+, using native PS0 and PROMPT_COMMAND instead for faster and simpler hooks. Older Bash versions (e.g. macOS’s 3.2) continue using bash-preexec. #10609 elvish: always report working directory changes, decoupling it from the title reporting feature. #10533 sudo shell integration feature is now more stable across all shells. #9891 Fix SSH cache failing when $TMPDIR and $XDG_STATE_HOME are on different filesystems. #10364 If cursor-style is manually set, default shell-integration-features to contain no-cursor. #8681
macOS:
- macOS: A drag handle now appears at the top of every terminal for reordering splits, moving a terminal into a new tab or window, etc. #1525 #10090
- macOS: New ”Set Ghostty as Default Terminal App” option, making it easy to set Ghostty as the handler for opening directories, shell scripts, etc. #10810
- macOS: Double-clicking a tab now allows inline editing of the tab title. Press Enter to confirm or Escape to cancel. #10963
- macOS: Custom command palette entries with command-palette-entry. This has been supported on GTK since 1.2.0. #7158
- macOS: Update notifications now appear as an unobtrusive pill within terminal windows rather than a popup dialog. #9116
- macOS: Mouse buttons 8/9 (back/forward) now encode properly in the terminal. #10381 #2425
- macOS: A new app intent to focus a specific terminal usable by Apple Shortcuts. #8961
- macOS: Right-click tabs to set a tab color. #9784
- macOS: background-blur now supports new options to use macOS 26 native liquid glass blurring. #8801
- macOS: bell-features = audio now works on macOS. You can specify a custom audio file to play on terminal bell events. #11154
- macOS: The fullscreen configuration can now be used to start Ghostty in non-native fullscreen in addition to native fullscreen. #9876
- macOS: Implement the close_all_windows binding action. #9552
- macOS: Add a new keyboard binding toggle_background_opacity. #9117
- macOS: Support native Cmd+Home/Cmd+End shortcuts to scroll to the top or bottom of the terminal scrollback. #10003
- macOS: Equalize splits when double-clicking the split divider. #9524
- macOS: The notification badge now clears when all active terminal bells are cleared. #8487
- macOS: The system bell setting (default off) now uses the system beep. #9339
- macOS: The dictation icon now appears in a more correct location. #8493
- macOS: window-width and window-height now properly take into account window chrome such as tab bars. #2660
- macOS: Restored non-native fullscreen windows now restore properly. #8435
- macOS: Quick terminal state is restored properly. #9588
- macOS: toggle_quick_terminal no longer makes hidden windows visible. #8414
- macOS: Text field in unsafe paste confirmation is no longer editable. #9400
- macOS: Close confirmation sheet attaches to a relevant window. #9509
- macOS: Metal loads linearized foreground color for the cursor cell so cursor text appears correct. #9695
- macOS: Fix ”Undo New Tab” crashing on certain systems. #9512
- macOS: Fix command palette not closing on mouse click when focus-follows-mouse is set. #9533
- macOS: Fix quick-terminal-size not working consistently for people. #9837
- macOS: Custom app icons now update more reliably using NSDockTilePlugIn, fixing corner radius issues on older macOS versions. #9983
- macOS: Menu bar now flashes briefly when using keyboard shortcuts that have menu equivalents (e.g. Cmd+V, Cmd+N, Cmd+T), matching standard macOS behavior. #10122
- macOS: Apply subpixel horizontal alignment also when cell width is less than advance, resulting in smoother rendering. #9646
- macOS: Font shaping now uses glyph positions for correct placement, fixing rendering of scripts where glyphs are visually reordered from their logical order in text (e.g. Tai Tham vowels rendering ahead of their associated consonants). #9883
- macOS: Fix window-width/window-height to properly clamp to the visible screen size and work correctly with window-position. #9975
- macOS: Hide the tab overview properly on escape. #9971
- macOS: Fix Cmd-click on file paths containing ~ (e.g. ~/Documents/file.txt) by expanding the tilde to the user’s home directory before opening. #10863
- macOS: Fix a crash when the terminal window texture exceeds the GPU’s maximum allowed size by clamping texture dimensions to the device limit. #9972
- macOS: Optimize the Secure Keyboard Input overlay animation, reducing CPU usage by ~35% and fixing lag and frozen frames caused by the previous innerShadow() implementation. #10903
- macOS: Fix Vim filetype detection to recognize the macOS-specific Ghostty config path as a Ghostty configuration file. #10101
- macOS: Various windowing fixes with macos-titlebar-style = tabs. #9596 #9597
- macOS: Various fixes around dark/light theme reloading. #9360
- macOS: Various fixes to ensure the mouse cursor is more accurate depending on the state. #9580 #8409
GTK (Linux, FreeBSD):
- GTK: Two-finger left/right swipes switch tab pages. #10575
- GTK: Key tables and sequences now have dedicated UI showing the pending keyboard input state to match macOS. #2127
- GTK: Spatial split navigation now wraps around at the edges, so navigating past the last split in a direction wraps to the first split on the opposite side. #10811
- GTK: The +new-window CLI command now accepts -e and –working-directory. #10809
- GTK: Cgroups have been revamped so that cgroups are now properly scoped per-surface. #10611 #2084
- GTK: Split-modifying actions such as creating, resizing, or closing splits no longer flicker the entire window. #8208
- GTK: Windows with custom window-height or window-width now center properly. #7937
- GTK: paste_from_clipboard now returns false when the clipboard contains no text (e.g. an image), allowing performable: keybinds to pass the keypress through to the terminal application. #10089
- GTK: Fix an issue where the i3 window border would disappear after toggling fullscreen back and forth. #8075
- GTK: Fix Kitty keyboard protocol not reporting text events for composed keys (e.g. accent characters via Compose key on international keyboard layouts). #10049
- GTK: Respect the gtk-enable-primary-paste GSettings option, allowing users to disable middle-click paste via the GNOME desktop setting. #10328
- GTK: Log a warning when OpenGL version is too old instead of crashing without notice. #9586
- GTK: Default FreeType flags to light hinting instead of full hinting to match the behavior of most other GTK applications. #9253
- GTK: XKB mapping works properly on Linux. #9454
- GTK: If 4.2 is available, use media queries and prefers-color-scheme in CSS. #9520
Localization:
Ghostty 1.3 adds support for 6 new languages:
- Croatian
- Kazakh
- Latvian
- Lithuanian
- Spanish (as spoken in Spain)
- Vietnamese
