{"slug": "the-terminal-in-jetbrains-ides-now-runs-on-libghostty", "title": "The Terminal in JetBrains IDEs Now Runs on libghostty", "summary": "JetBrains IDEs will run their built-in terminal on libghostty, the terminal emulation library behind Ghostty, starting with version 2026.3, replacing the long-used JediTerm emulator. JetBrains said libghostty takes over parsing and terminal state while the IDE still handles rendering, adding the Kitty keyboard protocol, theme-change notifications (mode 2031) and support for almost 50 control sequences JediTerm ignored or misread. The change targets tools that push terminals harder, including AI coding agents such as Claude Code and Codex, plus Neovim and tmux.", "body_md": "## JetBrains Platform\n\nPlugin and extension development for JetBrains products.\n\n[IntelliJ Platform](https://blog.jetbrains.com/platform/category/intellij-platform/)\n\n[News](https://blog.jetbrains.com/platform/category/news/)\n\n# The Terminal in JetBrains IDEs Now Runs on libghostty\n\nMore and more of your terminal work now runs through tools that push the terminal harder than a shell prompt ever did: AI coding agents like Claude Code and Codex, full-screen apps like Neovim and tmux, system monitors and dashboards. These tools lean on modern terminal protocols, the kind today’s best standalone terminals are built on.\n\nStarting with 2026.3, the built-in terminal in JetBrains IDEs speaks that same language. It now runs on [`libghostty`](https://ghostty.org/docs/about#libghostty), the terminal emulation library that powers Ghostty itself.\n\n[Many projects](https://github.com/Uzaaft/awesome-libghostty) already embed `libghostty`, and it’s widely regarded as a reliable, performant library, so we preferred it over the other options we considered.\n\nIn our IDEs, `libghostty` replaces JediTerm, the terminal emulator we relied on for many years. TUI apps increasingly depend on modern protocols that JediTerm never supported. That gap felt more like a minor inconvenience, since the experience didn’t quite match other terminals, but it wasn’t disruptive enough to warrant a bug report. Now libghostty takes over parsing and terminal state in our IDEs, while the IDE still handles rendering, and higher-level features and integrations.\n\nHere is what those changes mean in practice.\n\n## Multi-line prompts and keybindings work the way the docs say\n\nWith support for the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/), terminal apps can now distinguish among `Enter`, `Shift`+` Enter`, and `Ctrl`+` Enter``modifyOtherKeys`, an older keyboard protocol that Vim uses.\n\nFor you, this means `Shift`` Enter` `Ctrl`, `Shift`, or `Alt` with other keys reach the app intact. Terminal-based editors and tools respond the way they should, with no IDE settings to adjust. The old setting that sent `Esc`+` CR` on `Shift`+` Enter` is no longer needed and is ignored.\n\n## Your tools follow your IDE theme\n\nSwitching the IDE to *Dark* mode used to leave terminal apps guessing, and you ended up with dark text on a dark background or a bright color scheme inside a dark IDE, unless you configured each tool by hand.\n\nNow the terminal answers the dark/light query (`CSI ? 996 n`) from the current IDE theme and sends a notification through mode 2031 when you switch. Claude Code, OpenCode, Pi, Neovim, and tmux subscribe to these theme-change notifications, so most of them switch automatically with the IDE. \n\nThe terminal also answers OSC 4 palette queries and the Kitty OSC 21 color query, in addition to the OSC 10/11 queries that JediTerm already handled. OpenCode and Pi read the palette, and Junie CLI asks whether the terminal is dark or light. Programs can now set the extended palette colors 16 to 255 with OSC 4, while colors 0 to 15 stay under the control of the IDE theme.\n\n## Terminal applications with rich output now draw better\n\nAI agents, system monitors, file managers, and dashboards are only as good as the terminal that renders them. The new engine handles almost 50 control sequences that JediTerm either ignored or misread. A few you may have hit:\n\n- REP (`CSI Ps b` ): ncurses uses it for runs of 7 or more identical characters, so some lines previously rendered with missing characters.\n- Colon-separated SGR colors (`38:2::r:g:b` ): JediTerm printed the colons and merged the digits into the wrong attribute.\n- Unknown APC, SOS, and PM strings: JediTerm printed them as text. They are now silently dropped.\n\nAlso supported are left/right margins (DECSLRM), protected areas, tab-stop control, insert mode, XTSAVE/XTRESTORE, the Kitty `CSI 22 J` scroll-and-clear, and X10 mouse reporting. Cursor blink mode (`?12`) is respected now; before, the cursor always blinked. There’s much more – to see the full list of supported escape-sequences, please refer to [this table](https://youtrack.jetbrains.com/issue/IJPL-218849/Consider-using-Libghostty-for-terminal#focus=Comments-27-14563824.0-0).\n\nIn summation: lines, borders, and separators no longer come out broken, colored output no longer shows stray colons or the wrong colors, and leftover invisible codes no longer show up as garbage text.\n\n## And this is just the start\n\nThe `libghostty` library already parses many sequences that the IDE doesn’t act on yet: OSC 52 clipboard, desktop notifications (OSC 9/777), ConEmu progress bars, Kitty graphics, and styled and colored underlines. Parsing is no longer the bottleneck. Only the IDE side is left, so expect these to arrive faster than they did with JediTerm.\n\nIn practice, that groundwork covers features you may know from standalone terminals: copying to your clipboard from a program running on a remote server, getting notified when the app in the terminal finishes a task (for example, Claude finishes processing a prompt and is waiting on you), seeing a progress bar for long tasks, and showing images directly in the terminal.\n\n## Try it now, enabled by default in 2026.3\n\nThe `libghostty`-based engine is already on by default in the reworked terminal in the 2026.3 EAP builds of your IDEs, and it will stay that way through the Beta and Release Candidate builds and in the stable release.\n\nIf something goes wrong, you can switch back to JediTerm: go to *Help | Find Action*, open *Registry…*, and turn off `terminal.use.ghostty.emulator`. We’d appreciate it if you also let us know what happened by leaving a comment on [IJPL-218849](https://youtrack.jetbrains.com/issue/IJPL-218849) or by filing a bug report. \n\n## Thank you, Ghostty\n\nThis story began with the Ghostty team, who approached us at a conference last year and asked whether we would consider using their emulator at the IntelliJ IDEA Conf. Since then, they stayed engaged through every discussion that followed. Many thanks to Mitchell Hashimoto, Tim Culverhouse, and all the Ghostty contributors. You built `libghostty` as a reusable library and kept improving it while we integrated it. Over the past months, `libghostty` also gained features that JediTerm users relied on, which made the switch possible. We’re glad to build on your work, and we look forward to contributing back.\n\n#### Subscribe to JetBrains Platform updates", "url": "https://wpnews.pro/news/the-terminal-in-jetbrains-ides-now-runs-on-libghostty", "canonical_source": "https://blog.jetbrains.com/platform/2026/10/jetbrains-terminal-now-uses-ghostty/", "published_at": "2026-10-27 09:36:36+00:00", "updated_at": "2026-10-27 11:14:00.077689+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["JetBrains", "libghostty", "Ghostty", "JediTerm", "Claude Code", "Codex", "Neovim", "tmux"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/the-terminal-in-jetbrains-ides-now-runs-on-libghostty", "markdown": "https://wpnews.pro/news/the-terminal-in-jetbrains-ides-now-runs-on-libghostty.md", "text": "https://wpnews.pro/news/the-terminal-in-jetbrains-ides-now-runs-on-libghostty.txt", "jsonld": "https://wpnews.pro/news/the-terminal-in-jetbrains-ides-now-runs-on-libghostty.jsonld"}}