fretwireDownload

0e1a7c4·main·root commit

The graph is
the interface.

Fretwire is a native macOS Git client that opens straight onto your commit history — what changed, where you stand, how your branch relates to main, answered before you click anything. Staging, diffs and every branch operation stay attached to the graph. Underneath it’s the realgit CLI: nothing invented, everything inspectable.

brew install --cask olegklimakov/fretwire/fretwire

macOS 14+  ·  Apple silicon & Intel

fretwire — main
The Fretwire window: a sidebar of branches, a swim-lane commit graph with ref badges, a working-tree row above HEAD, and a dashed divergence boundary at origin/main

7c31b90·feat/graph·

History you can read at a glance.

Swim lanes with ref badges, authors coloured per identity, and a marked boundary where your branch diverges from the default. When the tree is dirty, a working-tree row sits above HEAD — so “what changed” is always the first thing you see.

Fretwire window: sidebar with branches, swim-lane commit graph with ref badges, a working-tree row on top, and a dashed divergence boundary at origin/main

a04df12·feat/staging·

Stage by file. Or by the hunk.

Pick a change apart in the diff and stage exactly the lines you mean. Amend, write the message, commit — without ever leaving the graph. Unstage the same way when you change your mind.

Fretwire staging: an inline hunk diff with a Stage Hunk control and word-level change marks, unstaged and staged file lists, and the commit form

b57e6aa·feat/diff·

Diffs with real typography.

Side-by-side or unified, syntax-highlighted — a changed line marks just the characters that differ, and a genuine rewrite keeps the plain row tint instead of confetti. Select lines and copy them out as plain text, no +/, no line numbers. Long lines scroll sideways instead of vanishing.

Fretwire diff view: a commit's file opened as a split before/after diff with additions highlighted, a Split / Inline toggle, and the commit's changed files beside it

d90c4b2·feat/rebase·

Rewrite a branch in one sheet.

Interactive rebase without the editor dance: the whole run from a base to HEAD, reordered by drag, with pick / reword / squash / drop on every row. No editor window ever opens — and a plan that stops on a conflict stays put, soContinue still works.

The Fretwire interactive rebase editor: one sheet listing the commits from a base to HEAD, each row with pick, reword, squash or drop, ready to reorder

b3e51fa·feat/worktrees·

A worktree is a tab, not a stranger.

git worktree, first class: a sidebar section lists every worktree with its folder and its branch, and each opens as a tab nested under its project. A branch checked out somewhere else says where — with Open Worktree in place of the checkout git was always going to refuse. Start one at any commit.

Fretwire with a WORKTREES sidebar section listing three worktrees with their folders and branches, folder markers on branches checked out elsewhere, and a worktree tab nested under its project in the rail

e9a2f45·fix/conflicts·branched off feat/diff

Stopped merges don’t panic.

A halted merge, rebase, cherry-pick or revert is detected and shown for what it is — with Abort andContinue right there, and every conflicted file keeping its diff. Anything that moves a branch asks first.

Fretwire during a paused rebase: a Rebase in progress banner with Abort and Continue, and the conflicted file listed with Ours / Theirs controls beside it

3fd10c8·main·merge commit · 2 parents

The terminal plays through.

An FSEvents watcher mirrors external gitcommands and editor saves into the graph — live, without ever blanking the view. Commit in the terminal and watch the row arrive here.

The Fretwire graph: commits on swim lanes, with branch and tag labels in the gutter

c62b0d3·main·under the hood

No magic between you and git.

Reads and writes go through the git you already use. Every operation is a real invocation — identical to the one you would have typed.

The real CLI — your CLI

No embedded engine to quietly disagree with your terminal. Fretwire runs the first git on your login shell’s PATH, so gh’s credential helper, gpg-signed commits andcore.sshCommand come along with it.

Tokens stay in the Keychain

Host tokens reach git through a transientGIT_ASKPASS helper — never inargv, never written to.git/config, and only to the host your push URL actually resolves to.

Guard rails, not straitjackets

Anything that moves a branch confirms first. Force push is only ever--force-with-lease, scoped to a single branch. Discards ask twice.

also in the case

mergecherry-pickrevertresettagsstashamendfetch / pull / push per remotessh remotespublish to GitHub & GitLabmultiple repositoriesyour own diff toollight & darkimage diffs

d18ff07·main·pricing

Two licences, one client.

Personal

Free

always

  • The full client — no feature gates
  • Unlimited repositories
  • For your own projects, forever
Download the beta

Commercial

$50

per seat · from 1.0

  • Yours forever — with 12 months of updates included
  • Renew for $30 when you want another year. Or don’t
  • For paid work — an employer's code or a client's
Download the beta

Free for everyone while Fretwire is in beta. A seat is a person, on all of their Macs — and bug fixes, conflict handling and data-safety work are never behind the licence. Where the line between the two tiers falls is written down in thelicence agreement.

tag·v1.0

Stop replaying history
in your head.

Open the graph instead.

brew install --cask olegklimakov/fretwire/fretwire

macOS 14 or later · pre-release 0.7