Total Commander-style dual-pane file manager for macOS.
I really miss Total Commander. Over the years I couldn't find anything on macOS that stuck with me — so I vibe-coded one.
Grab the latest .dmg from Releases.
Builds are signed with a Developer ID and notarized by Apple, so it opens normally — no right-click-to-open or Privacy & Security detour. Once installed it checks for updates on launch and offers them in a banner; nothing downloads or installs without you clicking. You can also trigger a check from GranderCommander → Check for Updates…
Hold
?anywhere in the app for the full keyboard cheatsheet. That's the only shortcut you need to memorize.
Requires Node 20+ and macOS 12+.
npm install
npm run dev # dev mode
npm test # unit tests
npm run typecheck # tsc across main / preload / renderer
npm run dist # build a signed .dmg — see belownpm run dist now signs and notarizes. It picks up a Developer ID from your keychain, and
notarization additionally needs APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD and
APPLE_TEAM_ID in the environment. To build locally without any of that:
npx electron-builder --mac --dir -c.mac.identity=null -c.mac.notarize=falseAuto-update is disabled in dev builds — the updater reports unsupported rather than
failing, since an unpackaged app has no signature for Squirrel to validate.
Two panels, keyboard-first navigation, quick search (Alt+letter), copy/move with conflict
prompts, trash, Quick Look, favorites, a command line at the bottom, F-keys, and native
context menus with Reveal in Finder / Open With.
Power-user tools:
F3 / Ctrl+Q |
Internal viewer (text / hex / image), and quick preview in the other pane |
Cmd+F |
Find by name, content, size and date — results open as a browsable panel |
Cmd+D |
Compare two files side by side |
Cmd+Y |
Synchronise the two panel folders, with copy-missing and mirror |
Ctrl+M |
Multi-rename with regex, counters and a live preview |
Cmd+T / Cmd+W / Cmd+1..9 |
Per-panel tabs |
Ctrl+1..9 |
Numbered folder bookmarks (Ctrl+Shift+N to set) |
Enter on an archive |
Browse .zip / .tar.gz / .7z in place; F5 extracts, Alt+F5 packs |
Tab in the command line |
Complete paths and executables |
| drag a row | Copy to the other panel; Shift moves, Alt drags out to Finder |
An embedded terminal (Ctrl+`) opens a real shell in the active panel's directory.
Cloud folders under ~/Library/CloudStorage (Google Drive, Dropbox, OneDrive) appear in the
drive bar and are navigable, including via symlinks like ~/Google Drive.
Archives use the tools macOS already ships. .7z additionally needs a 7-Zip binary on
PATH (brew install sevenzip); without one, the app says so instead of failing quietly.
See todo.md for what's next.
Tagging is what publishes — the release workflow builds,
signs, notarizes and uploads on any v* tag.
npm version 0.1.3 --no-git-tag-version # electron-builder reads this, NOT the tag
git commit -am "chore(release): 0.1.3"
git tag v0.1.3 && git push --tagsThe version bump is not optional: latest-mac.yml is generated from package.json, so
tagging without bumping publishes a manifest advertising the old version and no client
ever sees the update.
Requires these repository secrets: CSC_LINK (base64 .p12), CSC_KEY_PASSWORD,
APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, APPLE_TEAM_ID.
MIT © grnd
