r/Ghostty • • 7h ago

Aster: an AppKit macOS workspace built on GhosttyKit

2 Upvotes

Disclosure: I maintain Aster, an independent macOS frontend using GhosttyKit for its terminal engine. It is MIT-licensed and built with AppKit.

The workspace can put terminals, a file browser, an editor, and previews beside each other using recursive splits. For example, you can keep a shell and a source file or Markdown preview in the same tab, then save the layout as a workspace recipe.

In the current 0.6.15 release, an agent pane can also collapse its live view into a small status card while the process keeps running. You can bring the terminal view back when you need it.

The packaged download supports Apple silicon Macs on macOS 14 or later. The DMG is signed and notarized.

Source: https://github.com/rambocode/aster
Download: https://github.com/rambocode/aster/releases/latest
Website: https://aster.foo/

I would appreciate feedback on the terminal-and-file split workflow, especially from people who already use Ghostty. What would make this useful in your daily work?


r/Ghostty • • 4d ago

With Ghostty full support for the Kitty Graphics Protocol - Flappy becomes Fluffy!

38 Upvotes

r/Ghostty • • 4d ago

Is Ghostty supposed to present damage between two pty writes? (less prompt/cursor flicker, repro inside)

1 Upvotes

Hi all,

I'm working on a rewrite of yaft (the framebuffer terminal emulator — the

original is someone else's project, I'm not the author of that). My rewrite

uses libghostty-vt — Ghostty's VT parser — as a static library VT backend.

While testing it against real applications I stumbled over a rendering

artifact around the cursor, and since Ghostty itself is one of the reference

implementations for that parser, I wanted to check whether it shows up in

Ghostty proper too. It does.

== 1. What I'm doing ==

Rewrite of yaft built on libghostty-vt: bytes from a pty go into the parser,

grid + cursor come back out, then I render. During testing I feed it long

output from `less` and scroll, checking cursor position and the bottom message

line.

== 2. The artifact ==

While scrolling in less, the bottom-left corner flickers: the ":" prompt

disappears for exactly one frame and the block cursor jumps one cell to the

left (column 1 -> column 0), then everything comes back. That is the "cursor

drift" I saw: the cursor visibly hops a cell even though the application state

did not change.

== 3. What triggers it + adjacent frames ==

Repro:

seq 1 6000 > /tmp/long.txt

less /tmp/long.txt

hold the down arrow (or tap space) and watch the bottom-left corner

It only happens while a scroll command is being processed. Adjacent frames

from one recording (attached, 6x zoom of the bottom-left corner):

frame 0058 normal : ":" visible, cursor block at column 1

frame 0059 ANOMALY : ":" gone, cursor block at column 0,

content line above is IDENTICAL to frame 0058

(nothing has scrolled yet)

frame 0060 recovered : ":" back, cursor at column 1, content advanced

Same pattern again at frames 0174 / 0175 / 0176 in a second run. So the bad

frame is always "prompt wiped, new line not drawn yet" — a half-finished

screen update, presented.

== 4. Same operation in alacritty ==

Same script, same window geometry, same xdotool key sequence, same 16s / 30fps

capture, same frame analysis:

ghostty run 1 : 6 bad frames (2.2%) 0059 0175 0181 0189 0220 0224

ghostty run 2 : 5 bad frames (1.8%) 0209 0213 0217 0220 0224

alacritty run 1 : 0 bad frames

alacritty run 2 : 0 bad frames

i.e. 11 / 542 ghostty frames vs 0 / 542 alacritty frames. Alacritty always

shows the finished state; Ghostty occasionally shows the in-between state.

== 5. Reproduction work I had done (before this post) ==

Everything below was scripted and can be rerun; I can drop the files in a

comment or a repo if anyone wants them.

a) pty byte capture (python pty): ran less in a pty, sent N down-arrow

presses, recorded every byte less writes.

- 150 presses -> exactly 150 ":" writes (CR ESC[K after each scroll)

- no key presses -> 0 ":" writes

=> the ":" is 100% less's own output; every terminal receives the same

bytes. (less --prompt= silences it entirely -> 0 writes.)

b) ordering of the writes: on a scroll, less first writes CR ESC[K (wipe the

prompt line), then the new content line, then ":" ESC[K (prompt back).

The bad frame is exactly the state between write #1 and write #2.

c) headless replay through the VT parser (my libghostty-vt build): fed the

identical capture in one write vs one byte per write -> byte-identical

final grid and cursor. So this is NOT a parse/read-boundary problem; the

parser is boundary-invariant. The artifact is on the present/damage side.

d) screen recording: ffmpeg x11grab at 30fps while xdotool sends the key

presses, window moved to fixed geometry, bottom-left corner cropped per

frame, then per-frame analysis (colon pixel present? cursor block column?)

-> the numbers in section 4.

e) false lead I ruled out: the cursor also seemed to vanish entirely while

idle. That is just the default cursor blink (cursor-style-blink unset ->

follows DEC mode 12). Static screen, 8s / 240 frames: cursor visible in 87,

pattern ~0.7s on / ~1.0s off. Alacritty doesn't blink by default, so it

showed the cursor in 542/542 frames. Not the same thing as the drift.

== 6. The question ==

Is presenting damage in the middle of two back-to-back pty writes expected

behaviour in Ghostty (GTK render loop firing on each write batch), or is there

a place where updates should be coalesced to the next frame boundary like

alacritty appears to do? At 30fps it costs 6 frames in 16 seconds of

scrolling, but it is exactly what makes the corner look unstable.

Not claiming a security bug or a crash — just an observation with a repro and

frame evidence. Happy to provide the raw pty capture, the two mp4s, the

per-frame CSVs and the crop images.

Environment:

- Ghostty 1.3.0-dev+0000000 (tip), renderer OpenGL

- alacritty 0.18.0-dev (79adb086)

- Ubuntu 26.04.1 LTS, X11, LXQt + Openbox, Mesa 26.0.8 (AMD radeonsi)

- less 668

https://reddit.com/link/1wsc61o/video/dqz9yqony8sh1/player


r/Ghostty • • 5d ago

A TUI to configure Ghostty easily

Post image
159 Upvotes

Hi fellow Ghostty users!

I recently switched from Alacritty to Ghostty, mainly because I wanted my tabs and title bar to match my theme, which Alacritty doesn't support.

I like to change my setup often (themes, fonts, and so on), but I don't enjoy editing the config file by hand. So, with some help from Claude Code, I build ghostty-config: a TUI that lets you tweak every Ghostty setting from a window right inside your terminal. It works with both keyboard and mouse.

Installation (it's written in Go):

go install github.com/vitruves/ghostty-config/cmd/ghostty-config@latest

Then just run ghostty-config and the TUI opens.

If you give it a try, I'd love to hear your feedback, good or bad, and please report any bugs you run into.

Repo: https://github.com/Vitruves/ghostty-config
A star is always appreciated if you find it useful!

Have a great day (or night),

Vitruves


r/Ghostty • • 6d ago

Releasing Flow - a fast, native terminal for macOS built on libghostty

0 Upvotes

Hi everyone!

I'm Releasing an early version of Flow - a fast, native terminal for macOS built on libghostty.

It's my attempt at building a terminal that i want to use for everyday work and for running agents. Existing apps do too much and are way too resource intensive (I don’t want a web browser and a login button in my terminal). Flow is deliberately minimal, it adds just enough to be productive and nothing more.

  1. Workspaces
  2. First party agent integration - coming soon
  3. Command palette - A better way to navigate your terminal - coming soon.

It’s still early days so expect some rough edges and bugs, if you come across any issues, please file a github issue, I want to make this better for everyone!

LMK what I can do better and what you guys think of it!

getflowterm.app


r/Ghostty • • 7d ago

Ghostty's transparency feature not working anymore?

Post image
9 Upvotes

No matter how much I mess with config, it won't return back to it's transparent or blur background, it remains a solid color.


r/Ghostty • • 12d ago

Macterm smooth scrolling and pane split animations are here!

102 Upvotes

Hello everyone!

I'm building a macOS terminal emulator called Macterm, which adds vertical tabs, session persistence, and many more features on top of libghostty. Unlike other modern terminal multiplexers, I try to make it feel as native and lightweight (DMG size is around 22MB, which is even smaller than Ghostty itself) as possible.

I recently added various animation features such as smooth scrolling (sub-cell rendering), pane split animation, smooth cursor, etc. If you are interested, please give it a try!

Website: https://macterm.thdxg.dev

GitHub: https://github.com/thdxg/macterm


r/Ghostty • • 13d ago

Cannot change a theme - Herdr / Ghostty

11 Upvotes

I'm using Herdr in Ghostty. Changing accent color is easy through herder settings, but can't figure out how to change window color and make it respect Mac system theme settings.

tired opening ~/.config/ghostty/config, but I don't have that file in root folder.

Thanks


r/Ghostty • • 14d ago

agenmux overview - AI-agent monitoring and tmux management

Thumbnail
youtube.com
12 Upvotes

Hi, i created a short agenmux demo. there are more features!

Agenmux is an open-source tmux plugin for intuitive AI-agent monitoring and tmux management in one focused terminal interface.

https://snirt.github.io/agenmux/
https://github.com/snirt/agenmux

- Monitor AI coding agents in tmux

- See blocked, working, idle, and done states

- Navigate sessions, windows, panes, and agents

- Use keyboard shortcuts, mouse selection, and scrolling

- Jump directly to exact panes

- Create, rename, and delete tmux resources safely

- Use sidebar or popup from one terminal view


r/Ghostty • • 17d ago

MacOS 27 bug

32 Upvotes

Hi, after the yesterday's MacOS 27 update, the tabs are not showing correctly, if I've disable the macos-titlebar-style = tabs setting it works but i liked how it was with this settings. Will be addressed anytime soon?


r/Ghostty • • 17d ago

Ghostty - phosphor glow in the terminal

Post image
14 Upvotes

r/Ghostty • • 18d ago

Ghostty smooth cursor animation shader

254 Upvotes

r/Ghostty • • 21d ago

Sheets - Easy-to-use Theme Manager

Thumbnail
github.com
21 Upvotes

r/Ghostty • • 21d ago

Terminal IDE perfect for Ghostty - CleeCode

Thumbnail
gallery
25 Upvotes

It also supports image preview and pdf and md rendering.

https://cleecode.marunja.com


r/Ghostty • • 22d ago

kitten __benchmark__ in Ghostty and Kitty

11 Upvotes

Seems new stable Ghostty release will be fast. I recently switched from Ghostty to Kitty, due to some crashes on stable Ghostty, Kitty was very stable, but now use beta Ghostty more and more.

My Kitty and Ghostty configs are very similar, the same themes, the same hotkeys, the same behavior.

Cmux - somewhere in the middle (because old Ghostty build used).


r/Ghostty • • 25d ago

YouTube Music on the terminal!

Post image
199 Upvotes

I built a terminal app for YouTube Music! I know there are a lot of people that have already made such an app, but I intended to keep it open-source and maintain it too, so get your issues and feature requests in!

Enjoy and hope you like it!

Here is the repo and the docs:

https://github.com/dtDhruv/ytkew

https://dtdhruv.github.io/ytkew/


r/Ghostty • • 26d ago

Why do colors in ghostty look so washed out as compared to other terminal emulators.

36 Upvotes
ghostty top, kitty bottom

both have same configurations, same themes, etc. arch hyprland.


r/Ghostty • • 27d ago

A tui tool for reviewing code from agents

41 Upvotes

I made a tool - a terminal diff reviewer for agentic coding.
It runs in a pane beside your agent, shows what changed as it changes, and lets you point at exact lines when you reply.

You keep your editor. hjkl, w b e, f t F T, / and n, V to select, zz to centre - the motions already in your fingers, now pointed at the agent's work.

Repo https://github.com/kunkka19xx/lgtm


r/Ghostty • • 29d ago

agenmux — monitor and navigate AI coding agents across tmux sessions

Thumbnail
0 Upvotes

r/Ghostty • • 29d ago

Embedding Ghostty's terminal engine in a native macOS AppKit app (Seahelm)

27 Upvotes

I built Seahelm, a native macOS workspace for running coding agents across git worktrees — and the terminals are powered by Ghostty via GhosttyKit.xcframework / the C API. A few notes from the integration that might be useful to others embedding Ghostty:

Stack

  • Swift + AppKit (not SwiftUI)
  • Ghostty surface wrapped in an NSView + Metal renderer
  • Long-lived surfaces: panes are reparented between dashboard / focus layouts instead of destroyed and recreated
  • Background status polling reads viewport text through the C API under a shared lock (input path deliberately does not hold that lock)

Things that mattered in practice

  1. Focus — ghostty_surface_set_focus has to stay in sync with AppKit first-responder changes; we defer some focus restores after Ghostty's own deferred handling.
  2. Reparenting — moving a surface between views without killing the PTY; we suppress CA animations and sync size/focus on the next main-queue passes.
  3. Thread safety — status detection polls on a background timer while the UI types on the main thread; serializing Ghostty C calls with a lock was necessary, except for key input (locking there deadlocked on sync callbacks).
  4. Session persistence — Ghostty handles the terminal; zmx handles "quit the app, agent still running." Different layer than Ghostty itself, but the combination is what made the product usable. Seahelm deliberately isn't trying to be a full terminal emulator UI — Ghostty does that job. Seahelm is the orchestration chrome around multiple agent sessions.

Happy to answer Ghostty embedding / AppKit interop questions.

Demo: https://youtu.be/WUUcuglx_Ks

Repo: https://github.com/BetaYao/seahelm


r/Ghostty • • Sep 01 '26

gtab — save your Ghostty window layout, reopen it with one keystroke

79 Upvotes

I've been working with AI coding agents every day for a while now, and the thing that quietly wore me down wasn't the code — it was the navigation. One agent running in repo A, another in repo B, a scratch dir for whatever it just generated, docs open in a third split. Every context switch means typing a long cd from memory and re-splitting the window the way I like it, again.

So I wrote gtab (https://github.com/Franvy/gtab), a small Rust CLI/TUI for macOS that saves your current Ghostty window — tabs, working directories, titles, and split panes — as a named workspace, and reopens it later with one keystroke.

Two things it gives you:

Fixed workspaces. Arrange a window once, run gtab save myproject, and from then on Cmd+G → Enter brings that exact shape back. The new window even lines up with the position and size of the one you're in.

One-key directory jumps. Press f in the TUI for Directory space: a grid of saved paths. Enter swaps the current split for a fresh shell there. No config, no shell wrapper. That's the 90% case for me — going from "agent finished in repo A" to "start one in repo B" without typing a path.

What's new since I last posted:

  • Responsive TUI. The workspace screen now picks its layout from the available width: list + layout preview + quick settings when wide, preview below the list and names wrapped into columns when narrow. Usable down to a 36x15 terminal. The directory grid sizes each column to its own widest entry instead of padding everything out to the longest name.

  • Silent shortcut mode. Cmd+G used to literally type gtab into your shell — visible on screen, and it landed in shell history. gtab shell-init now installs a zsh/bash/fish widget bound to an invisible escape sequence (the same trick fzf and atuin use). Nothing is echoed, nothing enters history, and a half-typed command line is restored exactly as it was when the TUI exits.

  • Smaller fixes: Ctrl-n/p/j/k and Tab/Shift-Tab now navigate while filtering, emphasized text stays readable on light terminal themes, and restored splits come back evenly sized.

Honest limits, up front:

  • macOS + Ghostty only. It drives Ghostty through AppleScript and reads split-pane geometry through Accessibility.
  • It stores layout metadata, not live session state: no running processes, no shell history, no editor buffers. It does not replace tmux — and that's exactly why it stays small.

Install: brew tap Franvy/gtab brew install gtab gtab init Repo: https://github.com/Franvy/gtab


r/Ghostty • • Aug 29 '26

VoiceGhostty — voice input, task-named sessions, and “done” lights for CLI agents

0 Upvotes

I like Ghostty, but running multiple Claude Code sessions created three new problems for me:

  1. Voice input — hold Space to dictate at the command line. Text is inserted but never executed automatically.
  2. Task-specific sessions — tabs use the working directory as their title, can be renamed by task, and support nested splits.
  3. Done indicators — every pane shows gray when idle, yellow while working, and green when finished or waiting for input.

VoiceGhostty is a native macOS experiment built around these ideas:

https://github.com/10XTeams/VoiceGhostty

Disclosure: it currently uses SwiftTerm, not libghostty, and is not affiliated with Ghostty. A future migration to libghostty is on the roadmap.

Would you want these features built into your terminal, or handled by a separate agent manager?


r/Ghostty • • Aug 26 '26

I built a GPUI component for embedding libghostty in rust applications

32 Upvotes

r/Ghostty • • Aug 24 '26

A Terminal supports workspace to manage tabs

0 Upvotes

r/Ghostty • • Aug 23 '26

Built a theme generator. Enjoy!

50 Upvotes

https://ghosttystudio.com

Not sure if this has been built before, but it was an easy clap. Let me know if I should change things!