Skip to content

Repository files navigation

Pterodactyl 🦖

License: GPL v3 Platform

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.

Features

  • 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.gz or .tgz to 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 a devenv shell 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 F2 menu)

Keyboard shortcuts

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

Requirements

  • macOS 14+ (Sonoma)
  • Xcode 16+
  • XcodeGen (brew install xcodegen)

Build & run

./scripts/build.sh          # generates the project and builds it
open build/Build/Products/Debug/Pterodactyl.app

To build a distributable DMG (Release, with a drag-to-Applications symlink and app icon):

./scripts/dmg.sh            # writes dist/Pterodactyl-<version>.dmg

Note (Nix/devenv): If a Nix devenv is active in your shell, it overrides DEVELOPER_DIR, SDKROOT, LD etc. and hijacks Xcode's linker. scripts/build.sh strips these variables before invoking xcodebuild. A direct xcodebuild fails with ld: unknown options in 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.

Project structure

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

Icons

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/.

Known limitations / roadmap

  • 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

Contributing

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).

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.

Dual licensing

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.

About

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.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages