{"id":654,"date":"2025-07-16T09:00:00","date_gmt":"2025-07-15T23:00:00","guid":{"rendered":"https:\/\/jm.armijo.au\/dev\/?p=654"},"modified":"2025-07-15T21:23:28","modified_gmt":"2025-07-15T11:23:28","slug":"two-reasons-why-i-%e2%9d%a4%ef%b8%8f-ghostty","status":"publish","type":"post","link":"https:\/\/jm.armijo.au\/dev\/blog\/2025\/07\/16\/two-reasons-why-i-%e2%9d%a4%ef%b8%8f-ghostty\/","title":{"rendered":"Three Reasons Why I \u2764\ufe0f Ghostty"},"content":{"rendered":"\n<p>As a backend developer, I do a lot of my work in a terminal (although, admittedly, not as much as I used to). That is why I had no doubt about trying out Ghostty, a new terminal emulator, as soon as it was released a few months ago, late last year.<\/p>\n\n\n\n<p>Ghostty provides a number of prominent features like GPU acceleration that helps make scrolling and rendering feel smooth, and being super fast (although I\u2019d probably only notice them if they were missing), along with others. However, as a regular but not intensive terminal user, there are three particular features that make it my go-to terminal without hesitation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Make the Text Bigger, Not the Window<\/h3>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p>When I do live or recorded demos, or just share my screen, I usually increase the font size to make it easier on the audience to see the content I am sharing. If you&#8217;re like me, you may have noticed that whenever we change the font size in Terminal or iTerm, the terminal window size is also changed, as Image 1 shows.<\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"875\" src=\"https:\/\/jm.armijo.au\/dev\/wp-content\/uploads\/2025\/07\/iterm2.gif\" alt=\"\" class=\"wp-image-668\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Image 1: iTerm2 window is resized when increasing font size<\/em><\/p>\n\n\n\n<p>I find this to be particularly annoying since I usually share only a part of my screen, and if the terminal window gets resized, I will likely share more or less than I intended to.<\/p>\n\n\n\n<p>This is no longer a problem with Ghostty, as shown in Image 2. Whenever I increase or decrease the font size, the window remains the same size. I am actually zooming in or out as intended. For me, it&#8217;s just great to have a terminal emulator window that behaves as I would expect.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"875\" src=\"https:\/\/jm.armijo.au\/dev\/wp-content\/uploads\/2025\/07\/ghostty-1.gif\" alt=\"\" class=\"wp-image-663\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><em>Image 2: Ghostty window is <strong>NOT<\/strong> resized when increasing font size<\/em><\/p>\n\n\n\n<p>The above is possible thanks to the fact that <em>&#8220;Ghostty&nbsp;is&nbsp;a native application for macOS and Linux.&#8221;<\/em>. You can read more about that in the official Ghostty documentation: <a href=\"https:\/\/ghostty.org\/docs\/about#native\">https:\/\/ghostty.org\/docs\/about#native<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Easy Configuration<\/h3>\n\n\n\n<p>Although Ghostty comes ready to use out of the box, you may want to personalise it to get the best out of it.<\/p>\n\n\n\n<p>Luckily, configuring Ghostty is extremely simple. All settings are stored in a file you can access by going to <code><strong>Ghostty &gt; Settings<\/strong><\/code>, or <code><strong>Cmd + ,<\/strong><\/code>. There are several settings to choose from: you can see the full list in the official documentation: <a href=\"https:\/\/ghostty.org\/docs\/config\/reference\">https:\/\/ghostty.org\/docs\/config\/reference<\/a><\/p>\n\n\n\n<p>In case you are interested, these are the setting I have defined based on how I use the terminal:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntheme = deep\ncopy-on-select = true\nkeybind = ctrl+s&amp;gt;\\=new_split:right\nkeybind = ctrl+s&amp;gt;-=new_split:down\nkeybind = ctrl+s&amp;gt;z=toggle_split_zoom\nkeybind = ctrl+s&amp;gt;r=reload_config\nkeybind = global:cmd+home=toggle_quick_terminal\n\nkeybind = ctrl+s&amp;gt;right=goto_split:right\nkeybind = ctrl+s&amp;gt;left=goto_split:left\nkeybind = ctrl+s&amp;gt;down=goto_split:bottom\nkeybind = ctrl+s&amp;gt;up=goto_split:top\n\nkeybind = ctrl+s&amp;gt;page_up=goto_split:previous\nkeybind = ctrl+s&amp;gt;page_down=goto_split:next\n\nkeybind = ctrl+5&amp;gt;right=resize_split:right,500\nkeybind = ctrl+4&amp;gt;right=resize_split:right,400\nkeybind = ctrl+3&amp;gt;right=resize_split:right,300\nkeybind = ctrl+2&amp;gt;right=resize_split:right,200\nkeybind = ctrl+1&amp;gt;right=resize_split:right,100\n\nkeybind = ctrl+5&amp;gt;left=resize_split:left,500\nkeybind = ctrl+4&amp;gt;left=resize_split:left,400\nkeybind = ctrl+3&amp;gt;left=resize_split:left,300\nkeybind = ctrl+2&amp;gt;left=resize_split:left,200\nkeybind = ctrl+1&amp;gt;left=resize_split:left,100\n\nkeybind = ctrl+5&amp;gt;up=resize_split:up,500\nkeybind = ctrl+4&amp;gt;up=resize_split:up,400\nkeybind = ctrl+3&amp;gt;up=resize_split:up,300\nkeybind = ctrl+2&amp;gt;up=resize_split:up,200\nkeybind = ctrl+1&amp;gt;up=resize_split:up,100\n\nkeybind = ctrl+5&amp;gt;down=resize_split:down,500\nkeybind = ctrl+4&amp;gt;down=resize_split:down,400\nkeybind = ctrl+3&amp;gt;down=resize_split:down,300\nkeybind = ctrl+2&amp;gt;down=resize_split:down,200\nkeybind = ctrl+1&amp;gt;down=resize_split:down,100\n\n<\/pre><\/div>\n\n\n<p>As you may have noticed, most of them are key bindings to create, resize and navigate split screens. This may give you a hint about what my next favourite feature is: built-In Tmux Features.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Built-In Tmux Features<\/h3>\n\n\n\n<p>In my early days, I was an intensive user of <code>Screen<\/code> to split my terminal in different working spaces, until a friend convinced me to try Tmux, which I had been using ever since.<\/p>\n\n\n\n<p>For this reason, I was very pleased when I found out that Ghostty natively supports splitting screens horizontally and vertically, as shown in Image 3. While iTerm2 also supports splits and works reliably, it does not look as clean or natural as it does in Tmux, and now in Ghostty. In Ghostty, the experience is so seamless that I can barely tell I am not using Tmux.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"875\" src=\"https:\/\/jm.armijo.au\/dev\/wp-content\/uploads\/2025\/07\/ghostty-split.gif\" alt=\"\" class=\"wp-image-670\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Image 3: Ghostty built-in split feature<\/em><\/p>\n\n\n\n<p>On top of that, Ghostty also supports the Tmux\u2011style zoom feature, which lets you maximise a single split, temporarily hiding other splits. The example on Image 4 shows how we can focus on each of two horizontal splits:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"875\" src=\"https:\/\/jm.armijo.au\/dev\/wp-content\/uploads\/2025\/07\/ghostty-zoom.gif\" alt=\"\" class=\"wp-image-671\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Image 4: Ghostty supports zoom in individual splits<\/em><\/p>\n\n\n\n<p>It&#8217;s worth noting that the zoom feature is also available in iTerm2, but as you may have noticed, I really prefer how this is implemented in Ghostty, mainly because I feel it looks way better than in iTerm2 (maybe due to the GPU acceleration?).<\/p>\n\n\n\n<p>In practice, these features mean that there is one less tool I need to configure to set up my workspace. If you use Tmux features like session management you may want to stick with Tmux though, but the built-in features that Ghostty provides are good enough for me, and work great for my use cases.<\/p>\n\n\n\n<p>If this sounds interesting, you may want to learn more on the official documentation: <a href=\"https:\/\/ghostty.org\/docs\/about#feature-rich\">https:\/\/ghostty.org\/docs\/about#feature-rich<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wrap up<\/h3>\n\n\n\n<p>I like to try new technologies when they become available, and Ghostty has helped me improve my development workflow. I like using Ghostty because it helps me be more efficient at coding. If you feel this may help you, I would encourage you to give it a go.<\/p>\n\n\n\n<p>However, that doesn&#8217;t mean this is for everyone. Maybe you do like your window to be resized (or it&#8217;s not a big deal for you), or maybe you need all Tmux&#8217;s features. <\/p>\n\n\n\n<p>Changing tools may be disruptive, especially at the beginning, so if you decide to try this or another new tool out, make sure you&#8217;ll have enough time to set it up properly. Ghostty does not need to be configured to use it, but I did spend some time looking for the settings that made it comfortable for me.<\/p>\n\n\n\n<p>Please note that this is not a comprehensive review of terminal emulators. I&#8217;ve only tried this on macOS, and only Terminal, iTerm2 and Ghostty. If you have a different experience, or some other recommendation, please share!<\/p>\n\n\n\n<p>Cheers!<br>Jos\u00e9 Miguel<\/p>\n\n\n\n<p><em>Share if you find this content useful.<\/em><br><em>Follow me on&nbsp;<a href=\"http:\/\/www.linkedin.com\/comm\/mynetwork\/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;followMember=jmarmijo\">LinkedIn<\/a>&nbsp;to be notified of new articles.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As a backend developer, I do a lot of my work in a terminal (although, admittedly, not as much as I used to). That is why I had no doubt about trying out Ghostty, a new terminal emulator, as soon as it was released a few months ago, late last year. Ghostty provides a number [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":659,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-654","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/posts\/654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/comments?post=654"}],"version-history":[{"count":14,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/posts\/654\/revisions"}],"predecessor-version":[{"id":675,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/posts\/654\/revisions\/675"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/media\/659"}],"wp:attachment":[{"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/media?parent=654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/categories?post=654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jm.armijo.au\/dev\/wp-json\/wp\/v2\/tags?post=654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}