<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Terminal on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/terminal/</link><description>Recent content in Terminal on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/terminal/index.xml" rel="self" type="application/rss+xml"/><item><title>Terminal Multiplexers</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/dev-environment/terminal-multiplexers/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/dev-environment/terminal-multiplexers/</guid><description>&lt;p&gt;This note explores the choice between &lt;code&gt;Zellij&lt;/code&gt; and &lt;code&gt;tmux&lt;/code&gt; for terminal multiplexing.&lt;/p&gt;
&lt;h2 id="why-use-a-terminal-multiplexer"&gt;Why use a terminal multiplexer?
&lt;/h2&gt;&lt;p&gt;Terminal multiplexers allow you to run multiple terminal sessions within a single window, detach from them, and reattach later. This is incredibly useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Persistent sessions (e.g., long-running processes continue even if your SSH connection drops).&lt;/li&gt;
&lt;li&gt;Organizing multiple tasks (tabs, panes).&lt;/li&gt;
&lt;li&gt;Remote development.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tmux"&gt;Tmux
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/tmux/tmux" target="_blank" rel="noopener"
 &gt;https://github.com/tmux/tmux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt; &lt;code&gt;tmux&lt;/code&gt; is a long-standing and extremely powerful terminal multiplexer. It&amp;rsquo;s highly configurable and has a vast user base.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mature and stable.&lt;/li&gt;
&lt;li&gt;Very flexible and customizable.&lt;/li&gt;
&lt;li&gt;Widely adopted, lots of resources and plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configuration can be complex and requires significant effort to set up to personal taste.&lt;/li&gt;
&lt;li&gt;Default keybindings can be arcane.&lt;/li&gt;
&lt;li&gt;Can feel a bit dated in terms of user experience compared to newer alternatives.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="zellij"&gt;Zellij
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://zellij.dev/" target="_blank" rel="noopener"
 &gt;https://zellij.dev/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt; &lt;code&gt;Zellij&lt;/code&gt; is a newer, more modern terminal workspace and multiplexer, designed with a focus on good defaults and a more intuitive user experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modern design and user interface.&lt;/li&gt;
&lt;li&gt;Sensible defaults that often require less configuration out of the box.&lt;/li&gt;
&lt;li&gt;Built-in layout management.&lt;/li&gt;
&lt;li&gt;Rust-based, often praised for performance and safety.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Newer, so the ecosystem of plugins and community support is smaller than &lt;code&gt;tmux&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;May not have the sheer depth of customization options available in &lt;code&gt;tmux&lt;/code&gt; (though this is also a pro for simplicity).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="initial-thoughts--direction"&gt;Initial Thoughts / Direction
&lt;/h2&gt;&lt;p&gt;Given the preference for good defaults and minimal tinkering, &lt;code&gt;Zellij&lt;/code&gt; is the stronger contender — modern take on multiplexing without the configuration overhead of &lt;code&gt;tmux&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="current-status"&gt;Current status
&lt;/h2&gt;&lt;p&gt;Not using either. The setup cost hasn&amp;rsquo;t been worth it yet — plain terminal, one thing per tab works fine for now.&lt;/p&gt;
&lt;p&gt;The main argument for multiplexers is session persistence: if your connection drops or terminal closes, the session keeps running server-side. That matters most when SSHing into remote servers and running things interactively. That pattern is largely avoided here in favour of CI/CD pipelines — if something needs to run remotely, it runs in a pipeline, not in a terminal session.&lt;/p&gt;
&lt;p&gt;Working locally with a modern terminal (iTerm2, Wezterm, etc.) that has native tabs and split panes, the marginal gain is genuinely small day-to-day. Rational laziness — the cost-benefit only flips when remote work or session persistence becomes a real part of the workflow.&lt;/p&gt;
&lt;p&gt;Will revisit if that assumption changes.&lt;/p&gt;</description></item><item><title>Terminal Setup Notes (macOS): Kitty → Ghostty Exploration</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/dev-environment/terminal/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/dev-environment/terminal/</guid><description>&lt;p&gt;I&amp;rsquo;ve been using &lt;strong&gt;kitty&lt;/strong&gt; as my main terminal for a while. It&amp;rsquo;s fast, stable, and very capable — but I&amp;rsquo;ve realized I don&amp;rsquo;t actually enjoy tweaking terminal configs or maintaining a highly customized setup.&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m exploring simpler alternatives with good defaults.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="current-direction-ghostty"&gt;Current direction: Ghostty
&lt;/h2&gt;&lt;p&gt;Trying out: &lt;strong&gt;Ghostty&lt;/strong&gt;&lt;br&gt;
&lt;a class="link" href="https://ghostty.org/" target="_blank" rel="noopener"
 &gt;https://ghostty.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Why:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clean macOS-native feel&lt;/li&gt;
&lt;li&gt;GPU-accelerated and fast&lt;/li&gt;
&lt;li&gt;Tabs + splits built in&lt;/li&gt;
&lt;li&gt;Designed for sane defaults (low configuration overhead)&lt;/li&gt;
&lt;li&gt;Keyboard-first workflow works well out of the box&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My only config change:&lt;/strong&gt; Remapped tab switching shortcut (default &lt;code&gt;][&lt;/code&gt; to &lt;code&gt;alt-[/]&lt;/code&gt; for easier access on a Swedish keyboard layout).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Goal:&lt;br&gt;
Less time configuring terminal → more time working.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="why-the-switch"&gt;Why the switch
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplified setup:&lt;/strong&gt; I found myself spending less time tweaking and more time working.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Perceived responsiveness:&lt;/strong&gt; Both are fast, but Ghostty felt marginally snappier in heavy-usage scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clean design:&lt;/strong&gt; The aesthetic and functional minimalism resonated more with my current preferences.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="what-im-moving-away-from-for-now"&gt;What I&amp;rsquo;m moving away from (for now)
&lt;/h2&gt;&lt;h2 id="kitty"&gt;kitty
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://sw.kovidgoyal.net/kitty/" target="_blank" rel="noopener"
 &gt;https://sw.kovidgoyal.net/kitty/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What I liked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Very fast, GPU-accelerated rendering&lt;/li&gt;
&lt;li&gt;Highly configurable via a single &lt;code&gt;kitty.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Excellent font rendering — ligatures, custom fonts&lt;/li&gt;
&lt;li&gt;Extensible with Kitten modules (tabs, scrollback, multiplexing)&lt;/li&gt;
&lt;li&gt;Stable and mature&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why I&amp;rsquo;m moving on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Too much customization surface area&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t actually enjoy tuning it&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="other-tools-ive-looked-at"&gt;Other tools I&amp;rsquo;ve looked at
&lt;/h2&gt;&lt;h2 id="warp"&gt;Warp
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://warp.dev/" target="_blank" rel="noopener"
 &gt;https://warp.dev/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Warp feels like a &amp;ldquo;terminal reinvented&amp;rdquo; (more IDE-like, block-based UI, AI features). It&amp;rsquo;s interesting, but feels a bit too opinionated and visually heavy for my taste.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="other-terminal-emulators-briefly-noted"&gt;Other Terminal Emulators (briefly noted)
&lt;/h2&gt;&lt;p&gt;While Kitty and Ghostty are modern GPU-accelerated terminals, it&amp;rsquo;s worth acknowledging other terminal emulators that have been foundational or offer different philosophies.&lt;/p&gt;
&lt;h3 id="xterm-and-related-ttys"&gt;xterm (and related TTYs)
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.x.org/releases/X11R7.6/doc/man/man1/xterm.1.xhtml" target="_blank" rel="noopener"
 &gt;https://www.x.org/releases/X11R7.6/doc/man/man1/xterm.1.xhtml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The classic X Window System terminal emulator. While not as feature-rich or graphically advanced as modern options, &lt;code&gt;xterm&lt;/code&gt; (and its derivatives like &lt;code&gt;urxvt&lt;/code&gt;, &lt;code&gt;st&lt;/code&gt;, etc.) represent the minimalist, highly customizable end of the spectrum. They often prioritize resource efficiency and adherence to traditional Unix principles. Good for when you need something simple and rock-solid, but usually requires more effort to get a pleasant default experience.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="current-philosophy"&gt;Current philosophy
&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;m optimizing for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;minimal clutter&lt;/li&gt;
&lt;li&gt;fast keyboard workflow&lt;/li&gt;
&lt;li&gt;good defaults (not deep config systems)&lt;/li&gt;
&lt;li&gt;fewer moving parts&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="current-setup-direction"&gt;Current setup direction
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Terminal: &lt;strong&gt;Ghostty&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Tabs: built-in (no extra tooling yet)&lt;/li&gt;
&lt;li&gt;Multiplexing: not using tmux/Zellij for now&lt;/li&gt;
&lt;li&gt;Keeping things intentionally simple&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="open-question"&gt;Open question
&lt;/h2&gt;&lt;p&gt;If Ghostty tabs feel too minimal in real use, I may revisit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zellij (for structured sessions)&lt;/li&gt;
&lt;li&gt;tmux (unlikely unless necessary)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now, keeping it simple on purpose.&lt;/p&gt;</description></item><item><title>K9s &amp; Lens</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/k9s/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/k9s/</guid><description>&lt;p&gt;You run everything with &lt;code&gt;kubectl&lt;/code&gt;. Get pods, describe, logs, exec, delete, apply — fifty times a day across five namespaces. It works, but every command is a context switch: type, wait, read, type again. &lt;code&gt;-n namespace&lt;/code&gt; on every single invocation.&lt;/p&gt;
&lt;p&gt;So you use K9s. A terminal UI that shows your entire cluster in one view. Switch namespaces and clusters in a keystroke, tail logs in real time, exec into a pod without constructing the command — everything you reach for in &lt;code&gt;kubectl&lt;/code&gt;, but without the friction.&lt;/p&gt;
&lt;h2 id="k9s"&gt;K9s
&lt;/h2&gt;&lt;p&gt;K9s is a TUI (terminal UI) for Kubernetes. It stays in your terminal, updates live, and is keyboard-driven throughout.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install derailed/k9s/k9s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;k9s &lt;span style="color:#75715e"&gt;# connect to current context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;k9s --context prod &lt;span style="color:#75715e"&gt;# specific context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;k9s -n monitoring &lt;span style="color:#75715e"&gt;# start in a specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="navigation"&gt;Navigation
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:pod&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to pods view&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:deploy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Deployments&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:svc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Services&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:ns&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Switch namespace&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Filter/search&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Logs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Edit resource YAML&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Describe&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Shell into pod&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ctrl-d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Help / full keybinding list&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most resource types are reachable by typing &lt;code&gt;:&lt;/code&gt; followed by the resource name — &lt;code&gt;:configmap&lt;/code&gt;, &lt;code&gt;:secret&lt;/code&gt;, &lt;code&gt;:ingress&lt;/code&gt;, &lt;code&gt;:pvc&lt;/code&gt;, and so on.&lt;/p&gt;
&lt;h3 id="why-tui-over-gui"&gt;Why TUI over GUI
&lt;/h3&gt;&lt;p&gt;K9s lives in the terminal alongside your other tools. No window switching, works over SSH, starts instantly, and the keyboard-driven workflow is faster once it is in muscle memory. For day-to-day cluster work it is the right default.&lt;/p&gt;
&lt;h2 id="lens"&gt;Lens
&lt;/h2&gt;&lt;p&gt;Lens is a desktop GUI for Kubernetes — a full IDE-style interface with a visual cluster overview, resource browsing, metrics charts, log streaming, and terminal access built in.&lt;/p&gt;
&lt;p&gt;It is the better choice when you need to onboard someone who is not yet comfortable with the terminal, or when you want a visual overview to share with a non-technical stakeholder. For engineers doing operational work all day, K9s is faster.&lt;/p&gt;
&lt;p&gt;Worth noting: Lens has moved toward a commercial model (Lens Desktop Pro). &lt;strong&gt;&lt;a class="link" href="https://github.com/MuhammedKalkan/OpenLens" target="_blank" rel="noopener"
 &gt;OpenLens&lt;/a&gt;&lt;/strong&gt; is the open-source build of the same codebase, without the account requirement.&lt;/p&gt;
&lt;h2 id="kubectx--kubens"&gt;kubectx / kubens
&lt;/h2&gt;&lt;p&gt;If K9s is more than you need and you just want to stop typing &lt;code&gt;--context&lt;/code&gt; and &lt;code&gt;-n&lt;/code&gt; on every command, &lt;code&gt;kubectx&lt;/code&gt; and &lt;code&gt;kubens&lt;/code&gt; solve exactly that:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectx &lt;span style="color:#75715e"&gt;# list contexts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectx prod &lt;span style="color:#75715e"&gt;# switch to prod context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectx - &lt;span style="color:#75715e"&gt;# switch back to previous context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubens &lt;span style="color:#75715e"&gt;# list namespaces&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubens monitoring &lt;span style="color:#75715e"&gt;# switch default namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No TUI, no GUI — just fast context and namespace switching that persists for the rest of your terminal session. Install alongside K9s; they complement each other.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install kubectx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="resources"&gt;Resources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://k9scli.io/" target="_blank" rel="noopener"
 &gt;K9s documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/derailed/k9s" target="_blank" rel="noopener"
 &gt;K9s GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://k8slens.dev/" target="_blank" rel="noopener"
 &gt;Lens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/MuhammedKalkan/OpenLens" target="_blank" rel="noopener"
 &gt;OpenLens&lt;/a&gt; — open-source Lens build&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ahmetb/kubectx" target="_blank" rel="noopener"
 &gt;kubectx/kubens&lt;/a&gt; — fast context and namespace switching&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>