A feature-rich macOS terminal built to be pleasant, native, and lightweight.
Note
This project has no relation to MacTerm, an earlier macOS terminal emulator with the same name.
- Session persistence: your shells keep running when you quit, and every pane returns when you start Macterm again.
- Vertical project sidebar: projects and their tabs in a native macOS sidebar.
- Splits and multiplexing: split panes, drag a pane onto another, and move a pane to its own tab.
- Remote projects: open a folder on another machine over SSH. Its shells keep running on that machine.
- Pinned tabs: keep a tab above your projects. It starts with Macterm.
- Command palette: press ⌘P for every command, with its keybind on the row.
- Extensions: add palettes for Git, Docker, Kubernetes, SSH and Claude Code, or write your own in YAML.
- Save and restore layouts: the tabs, splits and commands of a project in one YAML file.
- Control CLI: scripts and coding agents control Macterm with the
mactermcommand. - Tab switcher: hold the recent-tab keybind to pick a tab from live previews.
- Animations: scrolling, splits and the cursor glide into place.
- Quick terminal: a drop-down terminal over any app, with a global keybind.
- Desktop widgets: a terminal on your desktop, in the grid and shape of the macOS widgets.
- Password autofill: Macterm saves the passwords that you type at a prompt and fills them in again.
- Adaptive background: the window takes the background color of the running program.
- Ghostty compatibility: your Ghostty config, theme, font and keybinds carry over.
brew install --cask thdxg/tap/mactermThe cask removes the Gatekeeper quarantine attribute when it installs. The app then starts with no extra prompts.
Download the latest .dmg from Releases. Open it and drag Macterm to Applications. The app has no Apple Developer certificate signature, so clear the quarantine flag one time:
xattr -cr /Applications/Macterm.appAfter that, Sparkle installs updates. It checks an EdDSA signature on each update. You do not need xattr again.
Macterm reads your Ghostty config from the same places as Ghostty: ~/.config/ghostty/config or ~/Library/Application Support/com.mitchellh.ghostty/config. An existing setup carries over with no change. The Ghostty option reference documents every key. A minimal config looks like this:
theme = catppuccin-mocha
font-family = JetBrains Mono
font-size = 14A few Macterm defaults are different from the Ghostty defaults: theme, font size, padding and macos-option-as-alt. Macterm also sets tab-inherit-working-directory = false, so new tabs open at the project root. Macterm loads these defaults before your config. A key that you set always wins. defaultsBody in MactermConfig.swift has the full list.
Macterm has its own settings for window opacity, sidebar behavior, quick terminal size and keymaps. Open them with Macterm → Settings. The configuration docs give the full order of precedence and the few window keys that Macterm overrides.
The community shares workflows and recipes: layouts, keybinds and scripts that people run with Macterm. For example:
- Use one set of ⌃hjkl keybinds to move between Neovim splits and Macterm panes
- Drive an interactive program from a script
- Give a coding agent control of Macterm
- A Neovim plugin that moves focus between Neovim splits and Macterm panes with the same directional keybinds
Do you have a recipe? Start a Cookbook topic. Anyone can post a recipe, and anyone can use one.
Read CONTRIBUTING.md for setup, build and pull request rules.
MIT
