A Norton Commander-inspired, Total Commander-style dual-pane file manager for Windows, with a VS Code-style command palette. Free and open source.
Download the latest release for Windows
- Windows 10 or 11. No Java install needed; the runtime is included.
- Installer (
acommander-setup-v<version>.exe): installs for your user only, no admin rights, into%LOCALAPPDATA%\Programs\ACommander. Adds a Start Menu entry, an optional desktop shortcut, and an uninstaller in Settings › Apps. Running a newer setup upgrades in place and keeps your settings; uninstall removes the folder, settings included. - Portable (
acommander-v<version>.zip): unzip anywhere and runacommander.exe. Nothing is installed. - Both are about 300 MB because they bundle about 20 tools and their own Java runtime.
- Norton Commander at heart — two panes, the classic F-key bar (
F3view,F5copy,F6move,F8delete), and a Norton Commander theme, with dark and light themes too. - Command Palette — press
Ctrl+Shift+Pand type to find any action, like in VS Code. No menus to dig through. - Tools included — about 20 proven tools (7-Zip, FastCopy, ripgrep, Universal Viewer, qpdf and more) work out of the box. No setup.
- Archives and servers as folders — browse zip and 7z files, and FTP / SFTP / FTPS servers, like local folders.
- Configurable without code — every action, tool and shortcut lives in
config/apps.json.
A Commander workstation with several associated apps running (View Text File, View Image, Edit and Terminal)
- Core Features
- File Operations
- Virtual File System (VFS) & Remote Access
- Metadata Editing
- Search & Navigation
- Archive, PDF, Convert & Checksum
- Default Shortcuts
- External Tools Bundled
- Configuration
- Release History
- Build from Source
- Project Layout
- License
- 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
- Background progress bar with a Stop button that ends the whole operation (no next item, no delete after a stopped copy)
- Persistent state — left/right paths, theme mode, bookmarks and saved FTP connections in
config/acommander.properties(the Settings action opens it; edits apply when the editor closes) - 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
- About popup (Command Palette or the F1 help) — version, license, project link and runtime versions
| Operation | Details |
|---|---|
| Rename | Single or batch via Ant Renamer |
| Copy / Move | Between panes. When names already exist, one dialog lists them and asks: Overwrite All, Skip Existing or Overwrite Older |
| Copy / Paste | Clipboard-based copy and paste |
| Drag and Drop | Drag files into other apps (web uploads, Explorer, mail), between panes, onto a folder row (into that folder) or from Explorer into a pane. A drag copies; a right-button drag between panes asks Copy Here or Move Here. FTP files download at drag start |
| Duplicate | Clone a file in the same directory |
| Create | New directory or new file |
| Delete | Asks first, then moves local items to the Recycle Bin (FTP, archives and network shares: deleted for good). A locked local file or folder: lists the programs holding it open (File Locksmith) and, if you agree, ends them and deletes it |
| Secure Wipe | Via SDelete, after asking |
| 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, also an archive inside an archive |
| FTP | Connect to FTP servers and browse files inline (via curl) |
| SFTP / FTPS | Secure remote browsing over SSH or TLS (via curl). The server's certificate or SSH key (from .ssh\known_hosts) is checked; tick Trust Any Certificate in the connection dialog for a self-signed server you trust. Saved passwords are encrypted for your Windows account (DPAPI); another PC or user asks for them again |
| FTP-to-FTP copy | Transfer files directly between two remote servers |
| Folder upload | Copy or move whole folders (with empty subfolders) from a local or archive pane to a server |
| USB drives | Detect and browse USB disk keys; the drive list updates when you open it (Alt+F1/F2) or press Ctrl+R, so a disk plugged in later shows up |
| Media Type | Details |
|---|---|
| Video | Edit tags (title, artist, year, description, etc.) of MP4, MOV, MKV and WebM via ffmpeg |
| Images | View and modify EXIF/IPTC metadata via exiv2 |
| Audio | Edit tags (title, artist, album, etc.) of MP3, M4A, FLAC, OGG and Opus via ffmpeg, in any language |
| 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 |
Link / unlink panel navigation (Enter, Backspace and .. move both panes into same-named folders; a Linked button shows while on) |
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). Both, and Pack to zip, ask before replacing files that already exist | |
| Convert | Media conversion (Alt+F5) auto-routes to image, audio or video · Graphics via caesiumclt.exe · Audio to MP3, M4A, FLAC, WAV, OGG or Opus via ffmpeg (quality, sample rate, loudness normalize) · Video to MP4 (H.264 / H.265, optional downsizing), or to MP4/MKV without re-encoding, or extract its audio (MP3, M4A or the original track) |
| Media | Trim Media (keep a start-to-end part, lossless by default) · Join Media (join files of one type without re-encoding) · Media Info (duration, bitrate, codecs, resolution, tags) · all via ffmpeg, from the Command Palette |
| Checksum | Single file or recursive folder checksum via rhash.exe |
| UPX | Compress/decompress EXE and DLL files via upx.exe |
Bundled games start from the Command Palette (type game): Minesweeper
(Mines-Perfect, with extra board shapes), Puzzle Collection (Simon Tatham's 40 logic puzzles: Solo, Loopy, Net
...) and Arkanoid Clone.
| 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 | Alt+F6 |
Duplicate | |
Ctrl+C |
Copy to Clipboard | Ctrl+X |
Cut to Clipboard | |
Ctrl+V |
Paste | Ctrl+A |
Select All | |
Ctrl+Shift+A |
Unselect All | Ctrl+I |
Invert Selection | |
Insert |
Mark Item | Esc |
Clear Marks |
Quick tips:
Tabswitches active pane ·Enteropens folder/file ·Backspacegoes to parent ·F3on a folder calculates its size ·Insertmarks files one by one: the arrows then move only the cursor and keep the marks untilEsc.
| Tool | Location |
|---|---|
| Universal Viewer | apps/view/UniversalViewer |
| Notepad4 | apps/edit/Notepad4.exe |
| FastCopy | apps/copy |
| 7-Zip GUI | apps/pack_unpack/7zG.exe |
| Universal Extractor | apps/extract_all/UniExtract |
| qpdf | apps/pdf/qpdf.exe |
| Ant Renamer | apps/multi_rename |
| File Locksmith (PowerToys, MIT) & SDelete | apps/delete |
| ripgrep | apps/search_in_files/rg.exe |
| Caesium CLI | apps/image_convert/caesiumclt.exe |
| FFmpeg (GPLv3; the build downloads it) | apps/media/ffmpeg.exe |
| rhash | apps/checksum/rhash.exe |
| ExamDiff | apps/file_compare/ExamDiff.exe |
| exiv2 | apps/image_metadata/exiv2.exe |
| UPX | apps/exe_compress/upx.exe |
| curl | apps/remote_connectivity/curl.exe |
| Mines-Perfect (GPL) | apps/games/mines_perfect |
| Simon Tatham's Puzzle Collection (MIT; PortableApps launcher) | apps/games/puzzles |
| Arkanoid clone (Dreamwebspace, free) | apps/games/arkanoid_clone |
Each tool's full name, version and home page are in the F1 help ("Bundled Tools") and in config/apps.json (tools).
- Check Tool Updates (Command Palette) lists every tool with its installed and available version. Update downloads the tool's changed files; Update All does every tool.
- Updates come only from this project's GitHub: the
mainbranch, and a release of this project for ffmpeg. Every file must match the SHA-256 inapps/tools.sha256, or nothing changes. A file the update didn't change (a tool's own settings, say) is never reset; a missing file is downloaded again. - With Check at Start on (the default), ACommander looks once a day and opens the list only when there is something new.
- For the developer,
gradlew buildprints every tool's current and latest version, with release dates where GitHub has them, and a direct download for the newer ones (once a day;gradlew checkToolUpdatesany time).gradlew upgradeTools -Ptools=<id>downloads the newer version, replaces the tool's files and sets its version; build, then commit and push. Users get it frommain. BundledToolContractTestruns every command-line tool the way the app does (search, checksum, metadata, image conversion, UPX, PDF, archives, wipe, locked files, FTP protocols), so a new version that changed its flags or output fails the build before it is pushed. The tools that open a window run ingradlew guiToolTest(not inbuild): FastCopy copy and move, 7-Zip GUI pack and unpack, Universal Extractor and Ant Renamer are checked for their result; Notepad4, Universal Viewer and ExamDiff are checked to open a file without crashing.
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 |
description |
— | One sentence shown in the F1 help |
category |
— | F1 help section, one of HelpTopics.CATEGORIES |
shortcut |
— | Keyboard shortcut string |
aliases |
— | Palette search aliases |
contexts |
— | global · filePane · commandPalette |
selection |
— | none · single · multi · any · singleFile · singleFolder · singleOrMultipleFiles; otherwise the action is blocked with a message |
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 |
ftp |
— | true = allowed on FTP panes (default: rejected) |
writes |
— | Pane it writes to: none (default) · source (focused) · target (other) · both; blocked when that pane is a read-only archive |
fileTypes |
— | Palette offers it only when all selected items are one of: convertibleImage · convertibleAudio · convertibleVideo · media (audio or video) · imageWithMetadata · videoWithMetadata · audioWithMetadata · executable · archive · pdf |
requires |
— | Extra palette conditions: clipboardHasFiles · focusedPaneIsFtp · textFileInEachPane · navigationLinked · navigationUnlinked |
| Placeholder | Meaning |
|---|---|
${selectedFile} |
First selected file path |
${selectedFileQuoted} |
First selected file path (quoted) |
${selectedFiles} |
All selected file paths as separate args |
${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).
{"id": "ripgrep", "name": "ripgrep", "version": "15.1.0", "link": "https://github.com/BurntSushi/ripgrep",
"paths": ["apps/search_in_files"], "upstream": {"github": "BurntSushi/ripgrep"}}| Field | Notes |
|---|---|
paths |
Files or folders under apps/ that belong to the tool; every shipped file needs one owner |
upstream |
Where the build looks for a newer version: github (owner/repo) with optional asset (regex for the file to download), or page + pattern (regex, group 1 = version) with url ({version} filled in) or downloadPattern (regex, group 1 = link); extract (installer arguments, {dir}) when 7-Zip can't unpack it; files (names to take) when they differ from the tool's files; leave it out for tools no longer developed |
release |
A release of this project holding the tool's files (ffmpeg, too big for git) |
minAppVersion |
Users of an older ACommander don't get this tool version |
Full notes and downloads for every version: GitHub Releases.
v5.0 — the perfect dual-pane file explorer: installer, tool updates, drag and drop, safer operations
New Features & Enhancements
- Installer — per-user setup with Start Menu entry and uninstaller; no admin rights; upgrades keep your settings
- Check Tool Updates — every bundled tool's name, link, installed and newest version; update from the app
- FFmpeg for all media work — convert audio and video, Trim Media, Join Media, Media Info
- Remove Metadata — strip tags from audio, video and image files
- Sort by Extension, Linked Navigation of both panes, Ctrl+R refreshes the drive list
- Drag and Drop — to other apps, between the panes and onto folder rows
- Ask before overwriting on copy, move and paste; Insert marks files
- F1 help in collapsible sections and an About popup
- qpdf for PDF merge and page extraction; File Locksmith to delete locked files
- Games — Minesweeper (Mines-Perfect), Puzzle Collection, Arkanoid clone
Bug Fixes (more than 50)
- Security: encrypted FTP passwords, FTPS/SFTP server checks, no hidden commands in file or folder names
- Archives: Enter opens a zip as a folder, edits never lost when repacking fails, pack/unpack without 7-Zip installed
- FTP and SFTP folder copy, create, delete and rename
- Delete goes to the Recycle Bin, Wipe asks first, Stop stops the whole batch
- Large or remote folders no longer freeze the window
- Failed tool runs, PDF jobs and searches show what went wrong
- Hebrew names show the right way round; Turkish and comma-decimal systems work
v4.5 — quality update: small workflow features and day-to-day fixes
New Features & Enhancements
- 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 ...)
Bug Fixes
- 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 — major release: virtual file system, metadata editing, folder sync
Virtual File System (VFS) & Remote Access
- 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
File Comparison & Synchronization
- Compare files — diff two files side by side via ExamDiff
- Synchronize folders — keep two directories in sync across panes
Metadata Editing
- Edit video metadata — modify tags on MP4, MOV, MKV and WebM videos via ffmpeg
- Edit image metadata — view and change EXIF/IPTC data on images via exiv2
- Edit audio metadata — update tags on MP3, M4A, FLAC, OGG and Opus files via ffmpeg
File Operations
- 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
UI & Usability
- 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
Infrastructure
- GitHub CI/CD — automated compile and build via GitHub Actions
Bug Fixes
- 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
You only need this to change the code. To use the app, download a release.
# 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 + setup)
.\gradlew.bat distOutput locations:
| Artifact | Path |
|---|---|
| JAR + resources | build/libs/ |
| EXE | build/launch4j/ |
| Distribution | dist/ |
| Installer | dist/acommander-setup-v<version>.exe (script: installer/acommander.iss) |
acommander/
├── apps/ Bundled external tools
├── config/ apps.json, user properties
├── docs/ CODEMAP.md — where each feature lives in the code
├── installer/ Inno Setup script for the Windows installer
├── 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.

