After macOS 26 came out, every part of my Mac felt like glass except the window I spend all day in: the terminal. So I built iglass, a theme and small CLI that makes iTerm2 and Ghostty look like they ship with macOS.
brew install vukkt/tap/iglass
iglass install
It's free and MIT licensed: github.com/vukkt/iglass
What you get
- Four variants modeled on Apple's own options: Clear, Frosted (default), Tinted and Solid (for Reduce Transparency).
- Light and dark palettes built from Apple's system colors. The terminal switches with macOS, including automatic day/night.
- Eight accent colors matching the macOS accent set, used for the cursor, selection and links.
-
--contrast high, following Apple's guidance for Increase Contrast. - Real Liquid Glass in Ghostty on macOS 26+, with a blur fallback everywhere else.
-
One-command undo.
iglass uninstallputs back exactly what was there before.
| Clear | Frosted | Tinted | Solid |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
The interesting problems
A color scheme sounds like an afternoon's work. Doing it properly took longer, and these were the parts worth writing about.
1. Translucent backgrounds break contrast math
Normal contrast checks compare text against a known background color. With a translucent window, the background is whatever is behind the window: a white web page, a dark wallpaper, anything.
So the palette build checks each variant against the worst case it could be composited over. Tinted and Solid are checked over pure black and pure white. Frosted is checked over dark and light greys. Clear, the purely aesthetic variant, is checked over mid-grey, and the README says plainly that it can't be legible over everything.
The same math gives each variant a minimum safe opacity. If you pass --opacity below that value, iglass warns you and asks for --force. The full numbers are in a generated contrast report.
2. iTerm2 can't do real Liquid Glass (yet)
I wanted the real material, not an imitation. iTerm2's binary does contain glass-effect code, but there's no setting for it, and a pull request adding one was closed: glass forces auto layout and breaks window resizing.
So in iTerm2, iglass gets as close as it can with tuned transparency, blur and palettes, and the README's FAQ is upfront about that.
Ghostty is different. It has background-blur = macos-glass-regular and macos-glass-clear, which use Apple's actual material. Rather than guess from version numbers, iglass asks Ghostty's own config validator whether glass is supported and falls back to classic blur if it isn't.
3. One bad file breaks every profile
iglass installs into iTerm2 as a dynamic profile: a JSON file in a folder iTerm2 watches. Two things I learned:
-
A single malformed file in that folder disables all dynamic profiles, including other tools' profiles. So iglass writes to a temp file, validates it with
plutil -lint, and only then moves it into place.iglass doctoralso checks the other files in the folder. - Keys you leave out are inherited from your default profile. iglass only sets the keys that control the look, so your fonts, keybindings, shell and working directory stay yours.
4. You can't change iTerm2's global settings while it's running
Things like the tab theme and window padding are app-wide preferences. If you write them while iTerm2 is open, iTerm2 overwrites them with its in-memory copy when it quits.
The opt-in --app-settings flag therefore records the current values, hands off to a small detached launchd job that quits iTerm2, applies the change and reopens it. Uninstall restores those exact keys and nothing else.
5. The bug that hid from my own tests
v1.1.1 fixed a fun one. On macOS, pgrep leaves out its own ancestor processes. Run iglass from inside iTerm2, and iTerm2 is an ancestor, so iglass decided iTerm2 wasn't running and skipped the restart.
My tests didn't catch it because the fake pgrep in the test suite was more helpful than the real one. The fix is pgrep -a, and the stand-in now behaves like the real thing so the bug can't come back silently.
How it's built
- Plain bash 3.2 (the version macOS ships) plus
jq, so there's nothing extra to install. - Palettes live in one JSON file. A Python build step generates the iTerm2 and Ghostty themes and the contrast report, and CI fails if the generated files are stale.
-
117 bats tests and 19 palette tests, all run in a sandbox so they never touch real preferences.
shellcheckis clean, and CI runs on macOS. - Installs via Homebrew, a
curlscript, or prebuilt theme files if you'd rather not run a CLI.
The iglass Dark and Light schemes were also merged into iTerm2-Color-Schemes, so they're available for the many terminals that project supports.
Try it
brew install vukkt/tap/iglass
iglass install --variant clear --accent purple
iglass preview --variant tinted
iglass uninstall # everything back the way it was
I'd love feedback, especially screenshots of how it looks on your wallpaper, and requests for which terminal to support next (Kitty? WezTerm? Linux?). If it makes your terminal nicer, a ⭐ helps other people find it.





Top comments (0)