term-mac
Native macOS terminal with PuTTY-style copy & paste, dynamic SSH tab titles and configurable cursor blink.
~1.4 MB · macOS 14+ · Apple Silicon · GPL-2.0
What is term-mac?
A small, focused terminal for macOS. It runs your login shell
(zsh by default) and adds the parts of PuTTY
you probably miss on a Mac: selection is copied to the clipboard
automatically when you release the mouse, and right-click pastes from
the clipboard. No menus, no key combos.
On top of that: tabs that show where you actually are
(your prompt's OSC title — so ssh user@host shows
user@host:cwd in the tab), auto-scroll when your selection
drag leaves the visible area, configurable cursor blink, and a folder
you can pin as the default starting directory for new tabs.
Features
- Copy on selectRelease the mouse → text is in the clipboard. No menu, no Cmd+C.
- Right-click pastePuTTY-style paste. No detour through Edit → Paste.
- Dynamic tab titlesTabs reflect the shell's OSC 0/1/2 title. SSH sessions show
user@host:cwd automatically.
- Auto-scroll on dragSelection extends across long output as you drag past the bottom/top edge.
- Cursor blink: 4 modesOff / Slow / Medium / Fast — set in Settings.
- Startup folderPin a default working directory for new tabs (Settings → Pornire).
- ThemesDefault, Solarized Dark/Light, Dracula, Nord, macOS Light, more.
- Adjustable fontCmd+= / Cmd+- to zoom. Slider in Settings.
- Shell integrationOptional one-time hook in
~/.zshrc (with markers, removable) for the title + interactive tab completion.
- Self-contained .dmg~1.4 MB. No dependencies beyond macOS itself.
Install
- Download the latest
.dmg from the releases page.
- Open the
.dmg, drag term-mac.app to Applications.
- Because the bundle is ad-hoc signed (no paid Apple Developer ID yet), Gatekeeper will refuse to open it on first launch. Clear the quarantine flag once:
xattr -dr com.apple.quarantine /Applications/term-mac.app
- Launch from
/Applications. Open ⌘, for Settings, ⌘T for a new tab, ⌘? for the in-app help.
Not on the Mac App Store. term-mac is intentionally non-sandboxed — a real local terminal needs full disk access to your files (vim, less, grep across the system, etc.). For a sandbox-compatible version, see the separate (private) VTerm project.
What's not yet there
- Apple Developer ID signing + notarization (so Gatekeeper opens it without the
xattr step).
- bash / fish equivalents of the zsh integration (only zsh today).
- Search inside the buffer (Cmd+F).
- Custom keybindings.
Changelog
Mirrors the GitHub releases exactly. Newest first.
Scrollback fix — the setting now actually works.
- Settings > Buffer scrollback now takes effect. In v0.1.2 / v0.1.3 the buffer stayed at 500 lines regardless of the value you picked. Root cause: setting
terminal.options.scrollback + calling resetNormalBuffer() in makeNSView was getting silently undone by SwiftTerm's setupOptions running later in the view layout pipeline, which re-assigned terminal.options to a fresh struct with default scrollback=500. Fix: use SwiftTerm's public Terminal.changeScrollback(_:) API, which mutates Buffer.scrollback and lines.maxLength in place without recreating the buffer.
- Scrollback now applies to open tabs too. Change the setting in Settings and the tabs you have open immediately get the new buffer size — no need to close & reopen.
v0.1.3-alpha
· 2026-05-26
— First scrollback attempt (didn't actually work)
Tried to fix the v0.1.2 scrollback bug by calling resetNormalBuffer() instead of setup(isReset:false). Closer, but still didn't survive SwiftTerm's later layout calls. Superseded by v0.1.4.
v0.1.2-alpha
· 2026-05-26
— Buffer scrollback setting (added, but not effective)
Added the Settings > Buffer scrollback picker (1.000 / 5.000 / 10.000 / 25.000 / 50.000 / 100.000 lines) so common workflows like mdls Downloads/ + Tab with 1217 entries don't truncate. The UI shipped but the wiring was wrong — properly fixed in v0.1.4.
v0.1.1-alpha
· 2026-05-25
— About panel + Help window
- About panel — term-mac → About term-mac opens a real panel with author, email, repo link, version & build number. Replaces the empty auto-generated one.
- Help menu — ⌘? opens an in-app window with: What is, Quick start, Selection & paste, SSH tab title, Tab completion, Limitations + links to GitHub / issues / email. Replaces "Help isn't available for term-mac".
- Fix:
Info.plist now reads version from $(MARKETING_VERSION) — previously hardcoded to "1.0" so version bumps didn't show up in About or Finder Get Info.
v0.1.0-alpha
· 2026-05-25
— First public release
First public alpha of a native macOS terminal with PuTTY-style copy/paste.
- Local login shell (zsh / bash from
$SHELL), tabs (⌘T / ⌘W).
- Dynamic tab titles via OSC 0/1/2 — SSH sessions show
user@host:cwd automatically.
- Copy on select + right-click paste (PuTTY-style).
- Auto-scroll while drag-selecting — workaround for an upstream SwiftTerm bug where
autoScrollDelta is set but never consumed.
- Configurable cursor blink: Off / Slow / Medium / Fast. Uses DECSCUSR + reflection-based access to
caretView for the custom animation duration (SwiftTerm hardcodes 0.7s).
- Default startup folder in Settings (empty = HOME).
- Themes (Default, Solarized, Dracula, Nord, macOS Light, more), adjustable font (⌘= / ⌘-).
- Shell integration auto-install in
~/.zshrc (with markers, toggle in Settings): adds the precmd title hook + AUTO_MENU / menu select for interactive tab completion.