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:
- Download the latest
Moose.dmgand dragMoose.appto/Applications. (Or, once the tap is public:brew install --cask jonarcher/moose/moose.) - 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.