moose
A purpose-built git diff review tool for macOS: a persistent file list, side-by-side diffs, and keyboard navigation across every changed file in one command.
moose is closed source — all rights reserved, no LICENSE file, that’s deliberate. Requires macOS 15 (Sequoia) or later, on Apple Silicon.
Install
No toolchain needed, and two ways in — they end up in different places on your PATH, so pick one.
Homebrew:
brew tap jonarcher/tap
brew trust jonarcher/tap
brew install --cask moose-diff
The middle line is a one-time thing per machine — Homebrew doesn’t load formulae or casks from a third-party tap until you say you trust it, and it remembers that decision. Skip it and brew install will tell you the same thing. Once it’s done, moose is already on your PATH — no double-clicking, no separate command line tool step.
Direct download:
- Download the latest
Moose-Diff.dmgand dragMoose Diff.appto/Applications. - Double-click it. There’s no
moosecommand on yourPATHyet, so this is the only way to launch it the first time — with no repository to review, it shows a short landing screen instead. From there, use its button to open Preferences and install the command line tool. - From then on,
moosefrom any terminal, inside any repository, opens a review window for it.
Use
moose # review uncommitted changes in the current repo — staged,
# unstaged, and untracked, all against HEAD
moose main # compare the current branch against main via merge-base:
# every commit the branch has made since it diverged,
# plus uncommitted work, but nothing landed on main since
Keyboard:
- ⌘↓ / ⌘↑ — next/previous change, rolling across file boundaries once the current file is exhausted
- ↓ / ↑ — next/previous file, listed in the Navigate menu as documentation for what’s really the file list’s own native row navigation (it takes plain arrow keys once focused, which — since nothing else in the window is focusable — is essentially always) rather than a separate app-level shortcut
- ⌘R — refresh (the review also refreshes automatically whenever the window regains focus)
- ⌘1 / ⌘2 / ⌘3 — toggle the Staged / Unstaged / Untracked filter; ⌘0 shows all three. Meaningless (and disabled) when reviewing against a ref rather than uncommitted changes — there’s no index to compare against, so every file in that mode shows regardless.
- ⌘, — Preferences: fill-the-screen and syntax-highlighting toggles, and the command line tool install/remove. Esc closes it.
Syntax highlighting covers bash, python, swift, java, markdown, and properties/ini files, resolved from the file extension; anything else renders plain. It follows the system light/dark appearance and sits underneath word-level diff highlighting, which is a stronger tint of the row’s own red/green background rather than a separate color.