- Dual-pane file explorer for Windows
- Inspired by Norton Commander
- Extended functionality using 3rd party tools
- Command Palette (ctrl+shft+p) to rule them all!
Fast. Keyboard-driven. Endlessly configurable.
A Commander workstation with multiple associated apps running (View Text File, View Image, Edit and Terminal)
A Commander keeps file operations fast and keyboard-driven, and offloads specialized tasks — view, edit, copy, archive, convert, checksum — to proven external tools configured in config/apps.json.
- What's New in v4.5
- What's New in v4.0
- Core Features
- File Operations
- Virtual File System (VFS) & Remote Access
- Metadata Editing
- Search & Navigation
- Archive, PDF, Convert & Checksum
- Default Shortcuts
- External Tools Bundled
- Configuration
- Build & Run
- Project Layout
- License
v4.5 is a quality-focused update that adds small but practical workflow features and fixes a set of day-to-day issues.
- Open hosts file — open the Windows hosts file directly from the Command Palette
- Report Bug / Contact — quickly open a bug/contact flow from inside the app
- Analyze File — identify file type/content details for a single selected file
- Extract PDF Pages (upgraded) — interactive extraction modes with page expressions (
,,:,-) and chunking options - Natural numeric sort — filename sorting now treats numbers naturally (
... 9, 10 ...)
- Fixed Ant Renamer not opening/showing correctly
- Fixed multi-file move reliability
- Fixed PDF merge failures
- Fixed PDF page extraction failures
- Fixed Hebrew rename caret/navigation behavior with arrow keys
- Improved post-move focus to stay on the next item in the source pane
v4.0 is a major release that brings virtual file system support, metadata editing, folder synchronization, and many quality-of-life improvements.
- Virtual folders — browse archives (zip, 7z, etc.) as if they were regular directories
- FTP / SFTP / FTPS — connect to remote servers and browse them inline, just like local paths
- FTP-to-FTP copy — transfer files directly between two remote FTP locations
- Compare files — diff two files side by side via ExamDiff
- Synchronize folders — keep two directories in sync across panes
- Edit video metadata — modify tags on video files via AtomicParsley
- Edit image metadata — view and change EXIF/IPTC data on images via exiv2
- Edit MP3 metadata — update ID3 tags on audio files via id3
- Duplicate file — quickly clone a file in the same directory
- Copy / Paste — standard clipboard-based copy and paste support
- View properties — inspect detailed file and folder properties
- Advanced selection — select all, invert selection, select by mask with keyboard shortcuts
- UPX compression — compress/decompress EXE and DLL files via UPX
- Dark / Light / Norton Commander themes — switch UI modes to match your preference
- Improved default sorting — date and size sort descending by default; name sorts ascending
- USB drive support — detect and browse USB disk keys seamlessly
- GitHub CI/CD — automated compile and build via GitHub Actions
- Fixed empty bottom button bar triggering unintended actions when Alt-clicked
- Fixed
Alt+F1/Alt+F2path dropdowns not changing the folder - Fixed a bug in multi-file copying
- Dual-pane navigation with keyboard-first workflow
- Command Palette (
Ctrl+Shift+P) with fuzzy search and aliases - Data-driven action system via
config/apps.json— no recompilation needed for tool changes - Built-in and external actions with selection/context rules
- External task progress bar with stop button
- Persistent state — left/right paths, theme mode, and bookmarks in
config/acommander.properties - Sort by Name / Size / Modified (header click or palette actions)
- Incremental in-pane filtering by typing letters/digits
- Dark / Light / Norton Commander themes — switchable UI modes
| Operation | Details |
|---|---|
| Rename | Single or batch via Ant Renamer |
| Copy / Move | Between panes |
| Copy / Paste | Clipboard-based copy and paste |
| Duplicate | Clone a file in the same directory |
| Create | New directory or new file |
| Delete | With fallback unlock-delete for locked files |
| Secure Wipe | Via SDelete |
| Attributes | Change file/folder attributes |
| Properties | View detailed file/folder properties |
| Compare Files | Diff two files side by side via ExamDiff |
| Synchronize Folders | Keep two directories in sync |
| Advanced Selection | Select all, invert, select by mask |
A Commander v4.0 introduces a virtual file system layer that lets you browse non-local locations as if they were regular directories.
| Feature | Details |
|---|---|
| Archive browsing | Navigate inside zip, 7z, and other archives transparently |
| FTP | Connect to FTP servers and browse files inline (via curl) |
| SFTP / FTPS | Secure remote browsing over SSH or TLS (via curl) |
| FTP-to-FTP copy | Transfer files directly between two remote servers |
| USB drives | Detect and browse USB disk keys |
| Media Type | Details |
|---|---|
| Video | Edit video file metadata tags via AtomicParsley |
| Images | View and modify EXIF/IPTC metadata via exiv2 |
| MP3 / Audio | Update ID3 tags (title, artist, album, etc.) via id3 |
| Feature | Shortcut |
|---|---|
| File search (wildcard-aware) | F10 |
| Find-in-files text search (ripgrep) | Alt+F10 |
| Path dropdowns | Alt+F1 / Alt+F2 |
| Open terminal here | F9 |
| Open Explorer here | Alt+F9 |
| Bookmark / Go to / Remove bookmark | via Command Palette |
| Sync other pane to current path | via Command Palette |
| Category | Actions |
|---|---|
| Archive | Pack to zip (F11) via 7-Zip GUI · Unpack (F12) via 7-Zip GUI · Extract anything (Alt+F12) via Universal Extractor · Split large file (Alt+F11) via 7z CLI |
| Merge PDF files · Extract PDF pages (all pages, specific pages/ranges, pages-per-output chunking) | |
| Convert | Media conversion (Alt+F5) auto-routes to image or audio · Graphics via caesiumclt.exe · Audio via sndfile-convert.exe |
| Checksum | Single file or recursive folder checksum via rhash.exe |
| UPX | Compress/decompress EXE and DLL files via upx.exe |
| Key | Action | Key | Action | |
|---|---|---|---|---|
F1 |
Help | F7 |
Create Directory | |
F2 / Shift+F6 |
Rename | Alt+F7 |
Create File | |
F3 |
View | F8 / Delete |
Delete | |
F4 |
Edit | Shift+F8 / Shift+Del |
Delete & Wipe | |
F5 |
Copy | F9 |
Open Terminal Here | |
Alt+F5 |
Convert Media | Alt+F9 |
Open Explorer Here | |
F6 |
Move | F10 / Ctrl+F |
Search for Files | |
Alt+F10 |
Find in Files | Ctrl+R |
Refresh Panels | |
F11 |
Pack to Zip | Ctrl+Shift+P |
Command Palette | |
Alt+F11 |
Split Large File | Alt+F1 / Alt+F2 |
Path Dropdown | |
F12 |
Unpack | Alt+Enter |
Change Attributes | |
Alt+F12 |
Extract Anything |
Quick tips:
Tabswitches active pane ·Enteropens folder/file ·Backspacegoes to parent ·F3on a folder calculates its size.
| Tool | Location |
|---|---|
| Universal Viewer | apps/view/UniversalViewer |
| Notepad4 & TedNPad | apps/edit |
| FastCopy | apps/copy |
| 7-Zip GUI | apps/pack_unpack/7zG.exe |
| Universal Extractor | apps/extract_all/UniExtract |
| PDFtk | apps/pdf/pdftk.exe |
| Ant Renamer | apps/multi_rename |
| ThisIsMyFile & SDelete | apps/delete |
| ripgrep | apps/search_in_files/rg.exe |
| Caesium CLI | apps/image_convert/caesiumclt.exe |
| sndfile-convert | apps/sound_convert/sndfile-convert.exe |
| rhash | apps/checksum/rhash.exe |
| ExamDiff | apps/file_compare/ExamDiff.exe |
| exiv2 | apps/image_metadata/exiv2.exe |
| id3 & id3-images | apps/audio_metadata |
| AtomicParsley | apps/video_metadata/AtomicParsley.exe |
| UPX | apps/exe_compress/upx.exe |
| curl | apps/remote_connectivity/curl.exe |
Every action is data-driven. Add, remove, or reconfigure tools without touching the source code.
{
"id": "openVSCode",
"label": "Open in VS Code",
"shortcut": "Ctrl+Alt+V",
"aliases": ["code", "vscode"],
"contexts": ["filePane", "commandPalette"],
"selection": "single",
"type": "external",
"path": "C:/Program Files/Microsoft VS Code/Code.exe",
"args": ["${selectedFile}"],
"refreshAfter": false,
"prompt": {
"title": "Optional argument",
"label": "Value",
"defaultValue": "${selectedName}"
}
}| Field | Required | Notes |
|---|---|---|
id |
✅ | Unique action id |
label |
✅ | Display name |
shortcut |
— | Keyboard shortcut string |
aliases |
— | Palette search aliases |
contexts |
— | global · filePane · commandPalette |
selection |
— | none · single · multi · any · singleFile |
type |
— | builtin (default) or external |
builtin |
— | Override builtin handler id |
path |
External | Executable path |
args |
— | Argument array |
refreshAfter |
— | Refresh panes after execution |
prompt |
— | Prompt config for external actions |
| Placeholder | Meaning |
|---|---|
${selectedFile} |
First selected file path |
${selectedFileQuoted} |
First selected file path (quoted) |
${selectedFiles} |
All selected file paths as separate args |
${selectedFilesJoined} |
All selected file paths as quoted, comma-joined string |
${selectedName} |
Selected item name |
${focusedPath} / ${focusedPathQuoted} |
Focused pane path |
${targetFolder} / ${targetFolderQuoted} |
Opposite pane path |
${promptValue} |
Value entered from the prompt dialog |
ToolCommandBuilderalso creates quoted aliases for extra placeholders (e.g.${archiveFileQuoted}when${archiveFile}is provided by builtin flows).
# Run the application
.\gradlew.bat run
# Run tests
.\gradlew.bat test
# Build fat JAR
.\gradlew.bat shadowJar
# Build Windows distribution (EXE + runtime + apps/config + zip)
.\gradlew.bat distOutput locations:
| Artifact | Path |
|---|---|
| JAR + resources | build/libs/ |
| EXE | build/launch4j/ |
| Distribution | dist/ |
acommander/
├── apps/ Bundled external tools
├── config/ apps.json, user properties, F1 help markdown
├── src/
│ ├── main/
│ │ ├── java/ Application source
│ │ └── resources/ FXML, styles, icons, logging config
│ └── test/
│ └── java/ Unit tests
├── build.gradle Build, packaging, launch4j, dist tasks
└── LICENSE
Released under the Boost Software License 1.0 — see LICENSE for details.

