A keyboard-driven, dual-pane file manager for macOS in the spirit of Norton/Midnight Commander – with local and cloud file systems side by side, an embedded terminal, and archive browsing.
- Dual-pane browser with full keyboard navigation (Tab between panes, arrows/Enter to navigate,
type-ahead search,
*/+wildcard selection, Shift+arrows/Page to extend the selection) - Multiple file systems via a Connection Manager: Local, Google Drive, Dropbox and kDrive (Infomaniak) – with several named accounts per provider, selectable in the sidebar
- Transfers between any two panes: copy (
F5) / move (F6), recursive, cross-provider, with a source-mask wildcard (and invert), configurable parallelism, conflict resolution (overwrite / overwrite-if-different / keep-both) and a live queue with progress, throughput and ETA - Rename in place – editing the name of a single item in the move dialog renames instead of moving
- Archive browsing – press Enter on a
.zip,.tar.gzor.tgzto step inside and copy files out - Embedded terminal (via SwiftTerm): a real login
shell shown as a one-line strip, expandable full-window with
Ctrl+O, whose working directory stays in sync with the active pane (both directions) - Projects (
F3): a searchable overlay to open a project folder in a configured editor, optionally loading adevenvshell first - Command overlay (
F2): quick file actions, connection switching, size calculation and more - Open remote files locally (
Enter/F4): a remote file is downloaded, opened in the registered app, and written back automatically on save - Size breakdown: a donut chart + ranked list of the selected items, switchable between apparent size and size on disk (sparse-file aware)
- Show hidden files – globally or per pane (via the
F2menu)
| Key | Action |
|---|---|
Tab |
Switch active pane |
F2 |
Command overlay |
F3 |
Projects overlay |
F4 |
Open in configured editor |
F5 |
Copy to other pane |
F6 |
Move / rename |
F7 |
New folder |
F8 |
Delete |
Ctrl+O |
Toggle full-window terminal |
- macOS 14+ (Sonoma)
- Xcode 16+
- XcodeGen (
brew install xcodegen)
./scripts/build.sh # generates the project and builds it
open build/Build/Products/Debug/Pterodactyl.appTo build a distributable DMG (Release, with a drag-to-Applications symlink and app icon):
./scripts/dmg.sh # writes dist/Pterodactyl-<version>.dmgNote (Nix/devenv): If a Nix devenv is active in your shell, it overrides
DEVELOPER_DIR,SDKROOT,LDetc. and hijacks Xcode's linker.scripts/build.shstrips these variables before invokingxcodebuild. A directxcodebuildfails withld: unknown optionsin such a shell.Metal toolchain: the embedded terminal ships a Metal shader. If your Xcode lacks the Metal toolchain the first build fails – install it once with
xcodebuild -downloadComponent MetalToolchain.
Sources/Pterodactyl/
├── App/ PterodactylApp (scenes), AppState, menus
├── Configuration/ Connection/Project stores, AppConfig, credentials
├── Engine/ TransferQueue + TransferCenter (progress model)
├── FileSystem/ FileSystemProvider protocol + Local/Dropbox/GoogleDrive/kDrive, archives
├── Models/ FileNode, transfer items
├── Services/ Cloud APIs (Dropbox, Google Drive, kDrive), OAuth, keychain
├── Terminal/ SwiftTerm-backed embedded terminal
└── UI/ Sidebar, dual-pane browser (AppKit collection view), dialogs, settings
The app and volume icons show a pterosaur gliding across a sunset. The source SVG is rasterized with
rsvg-convert into the PNGs under Sources/Pterodactyl/Resources/Assets.xcassets/.
- No app signing/notarization (dev build, ad-hoc signed) – Gatekeeper needs a right-click → Open on other Macs
- Cloud size reporting has no "size on disk"; that value falls back to the apparent size
Contributions are welcome! Please read CONTRIBUTING.md and the Code of Conduct first.
Important: By opening a pull request you agree to the Contributor License Agreement. It keeps your contributions under the GPLv3 and grants the project maintainer the right to also distribute the code under other licenses (see License).
Pterodactyl is licensed under the GNU General Public License v3.0 – see LICENSE. This means anyone who distributes the app or builds on it must also release their version's source under the GPLv3. Pterodactyl therefore stays open source permanently.
The maintainer (Jan Gehring) is the sole copyright holder (secured via the CLA) and additionally offers Pterodactyl under a commercial license. This specifically allows:
- distributing signed binaries via the Mac App Store (whose DRM/terms are incompatible with the GPL), and
- developing proprietary (closed-source) extensions.
As the copyright holder, the maintainer is not bound by their own GPLv3. For third parties only the GPLv3 applies, unless a separate commercial license has been obtained. For commercial licensing inquiries: jan.gehring@gmail.com.
Third-party libraries: SwiftTerm (MIT) and swift-argument-parser (Apache-2.0), both GPL-compatible.