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

Install

  1. Download the latest .dmg from the releases page.
  2. Open the .dmg, drag term-mac.app to Applications.
  3. 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
  4. 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

License & credits

term-mac is released under GPL-2.0-or-later. It uses SwiftTerm (MIT) as the terminal emulator.

Changelog

Mirrors the GitHub releases exactly. Newest first.

v0.1.4-alpha · 2026-05-27

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 panelterm-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.

Feedback

Bugs and feature requests: issue tracker.
Direct contact: razvan@cremenescu.ro.