Show HN: Calyx – Ghostty-Based macOS Terminal with Liquid Glass UI

2026-03-1213:132731github.com

A macOS 26+ native terminal application. Contribute to yuuichieguchi/Calyx development by creating an account on GitHub.

NameName

A macOS 26+ native terminal application built on libghostty with Liquid Glass UI.

Calyx Terminal

  • libghostty terminal engine -- Metal GPU-accelerated rendering via Ghostty v1.3.0 submodule
  • Liquid Glass UI -- native macOS 26 Tahoe design language
  • Tab Groups -- 10 color presets, collapsible sections, hierarchical organization
  • Split Panes -- horizontal and vertical splits with directional focus navigation
  • Command Palette -- search and execute all operations with Cmd+Shift+P
  • Session Persistence -- tabs, splits, and working directories auto-saved and restored on restart
  • Desktop Notifications -- OSC 9/99/777 support with rate limiting
  • Browser Integration -- WKWebView tabs alongside terminal tabs (http/https only, non-persistent storage, popup blocking)
  • Scrollback Search -- Cmd+F to search terminal scrollback with match highlighting, Cmd+G/Cmd+Shift+G to navigate matches
  • Native Scrollbar -- system overlay scrollbar for terminal scrollback
  • Cursor Click-to-Move -- click on a prompt line to reposition cursor (requires shell integration)
  • Git Source Control -- sidebar Changes view with working changes (staged/unstaged/untracked), commit graph with branch visualization, and inline diff viewer
  • Claude Code IPC -- MCP server for communication between Claude Code instances across tabs and panes (demo video)
  • Ghostty config compatibility -- reads ~/.config/ghostty/config (most keys hot-reload on save; see Settings for Calyx-managed keys)
  • Auto-update -- Sparkle-based updates for direct downloads (Homebrew installs use brew upgrade)
Shortcut Action
Ctrl+Shift+] Next group
Ctrl+Shift+[ Previous group
Ctrl+Shift+N New group
Ctrl+Shift+W Close group
Shortcut Action
Cmd+T New tab
Cmd+W Close tab
Cmd+1--9 Switch to tab
Cmd+Shift+] Next tab
Cmd+Shift+[ Previous tab
Shortcut Action
Cmd+D Split right
Cmd+Shift+D Split down
Cmd+Option+Arrow Focus between splits
Shortcut Action
Cmd+F Find in terminal
Cmd+G Next match
Cmd+Shift+G Previous match
Escape Close search bar
Shortcut Action
Cmd+Shift+P Command palette

Multiple Claude Code instances running in different Calyx tabs or panes can communicate with each other via a built-in MCP server.

  1. Open the command palette (Cmd+Shift+P) and run Enable Claude Code IPC
  2. Start Claude Code in two or more terminal panes
  3. Each instance automatically registers as a peer and can send/receive messages

Available MCP tools: register_peer, list_peers, send_message, broadcast, receive_messages, ack_messages, get_peer_status

To disable, open the command palette and run Disable Claude Code IPC.

brew tap yuuichieguchi/calyx
brew install --cask calyx
  1. Download Calyx.zip from the latest release
  2. Unzip the file
  3. Drag Calyx.app into /Applications

Direct downloads include automatic update checking via Sparkle. Homebrew installs are updated via brew upgrade.

  • macOS 26+ (Tahoe)
  • Xcode 26+
  • Zig (version matching ghostty's build.zig.zon)
  • XcodeGen (brew install xcodegen)
# Clone with submodules
git clone --recursive https://github.com/yuuichieguchi/Calyx.git
cd Calyx # Build libghostty xcframework
cd ghostty
zig build -Demit-xcframework=true -Dxcframework-target=native
cd .. # Copy framework
cp -R ghostty/macos/GhosttyKit.xcframework . # Generate Xcode project & build
xcodegen generate
xcodebuild -project Calyx.xcodeproj -scheme Calyx -configuration Debug build

Calyx uses AppKit for window, tab, and focus management with SwiftUI for view rendering, bridged via NSHostingView.

  • All ghostty C API calls go through the GhosttyFFI enum
  • @MainActor enforced on all UI and model code
  • Action dispatch via NotificationCenter

Tech stack: Swift 6.2, AppKit, SwiftUI, libghostty (Metal), XcodeGen

  • Cursor click-to-move on full-width text -- cursor placement may be offset on Japanese/full-width text lines because Ghostty's cursor-click-to-move internally translates clicks into arrow-key steps over terminal cells.
  • Calyx-managed config keys -- background-opacity, background-blur, font-thicken, minimum-contrast, background-opacity-cells, font-codepoint-map are overridden by Calyx for Glass UI. See Settings > Ghostty Config Compatibility for the full list.

This project is licensed under the MIT License.

Built on libghostty by Mitchell Hashimoto (MIT License).

You can’t perform that action at this time.


Read the original article

Comments

  • By yuu1ch13 2026-03-1213:302 reply

    Hi everyone, I'm the developer of Calyx.

    I was a Ghostty user but kept running into the same problem: too many tabs, no way to organize them. Ghostty doesn't have tab groups or a plugin system, so I built Calyx using libghostty as the rendering engine.

    The idea is simple — keep Ghostty's speed, but add the workflow features I was missing:

      - Tab Groups — color-coded, collapsible groups to organize tabs by project
    
      - Command Palette (Cmd+Shift+P) — search and run any action
    
      - Session Persistence — tabs, splits, and working directories survive restarts
    
      - Notification Badges — OSC 9/99/777 notifications with per-tab badge counts
    
      - Built-in Browser — open docs right next to your terminal
    
      - Terminal Search (Cmd+F) — find text in terminal output
    
      - Git Diff View — inline source control diffs
    
      - IPC MCP Server — programmatic control from tools like Claude Code (Demo: https://youtu.be/LHY-NJEqBTg)
    
      - Scrollbar, cursor-click-to-move, Liquid Glass UI throughout
    
    Happy to answer any questions.

    • By andy_ppp 2026-03-1214:041 reply

      Do you have a screenshot!? I'll happily move to Calyx if it looks to my taste.

      • By yuu1ch13 2026-03-1214:18

        Hi, I've added a screenshot to the README. Thanks for the nudge!

    • By deafpolygon 2026-03-1214:231 reply

      Did you have trouble using tmux to organize your terminal sessions?

      • By yuu1ch13 2026-03-1214:291 reply

        Hi, thank you for asking. Honestly, I didn't know about tmux when I started this project. I was only familiar with Ghostty and cmux, and I really wanted a translucent terminal with Liquid Glass. Plus, building my own means I can customize it however I want going forward. So I just went for it.

        • By wolvoleo 2026-03-1216:09

          Also, tmux is really a different approach. Sometimes people just want to manage it on their workstation instead of on the server side.

  • By overflowy 2026-03-1213:594 reply

    You should post a screenshot in the README to give people an idea of what the terminal looks like.

    • By yuu1ch13 2026-03-1214:091 reply

      Hi, thanks for the feedback. I've added a screenshot to the README. Hope you like it.

      • By spiderfarmer 2026-03-1214:172 reply

        To be fair: no, I dislike it. It looks completely unreadable. I still don't know why Apple thinks this is a good idea.

        • By vulcan01 2026-03-1214:37

          This is not what Liquid Glass actually looks like on first-party macOS applications. This needs way more blur and opacity to match even the control center widgets.

        • By hirako2000 2026-03-1214:37

          Apple isn't suggesting to adopt this for your terminal, given they haven't made the native terminal glassy.

    • By hersko 2026-03-1214:011 reply

      Seriously. That was the first thing i looked for.

      • By bg0 2026-03-1214:02

        same

    • By LoganDark 2026-03-1214:031 reply

      Agree. Weird to market a terminal with a description of how it looks rather than actually how it looks.

      • By esafak 2026-03-1214:041 reply

        No LLM is going to take screenshots unless you force it to. They like dem words more!

        • By LoganDark 2026-03-1214:12

          They're not an LLM, just Aspie. I've seen this misconception like three or four times recently, it's nuts.

    • By davidthewatson 2026-03-1214:04

      Yes, please. Thank you!

  • By jasonjmcghee 2026-03-1214:581 reply

    It's only a few lines of code to use the built-in liquid glass.

    As far as I can tell, this doesn't use it.

    https://developer.apple.com/documentation/SwiftUI/Applying-L...

    https://developer.apple.com/documentation/technologyoverview...

    Also, for the vibe that this is going for, very surprised the title bar was left in.

    ---

    Code has lots of claims that something is done and it isn't.

    • By yuu1ch13 2026-03-1215:211 reply

      Hi, thanks for the feedback! To clarify, I do use the built-in .glassEffect() modifier on SwiftUI components (sidebar, tab bar, command palette, browser toolbar). The terminal surface itself is the hard part. It's backed by ghostty's Metal renderer which draws its own opaque background, so simply slapping .glassEffect() on it doesn't work. I've been working on improving transparency there but it's not as simple as a few lines of code when you're wrapping a GPU-rendered terminal engine. The titlebar is intentional for now, but I'm considering options there.

      • By jasonjmcghee 2026-03-1217:30

        None of the UI elements in the screenshot follow apple liquid glass styles / guidelines afaict, whether or not glassEffect() is being used.

HackerNews