Interactive macOS .pkg and .dmg installer helper with a Finder Quick Action.
Scans a directory for .pkg and .dmg files, validates packages, and lets you pick which ones to install — all from a curses-based TUI or directly from a right-click in Finder.
- Recursively scans directories for
.pkgand.dmgfiles (configurable depth) - Validates
.pkgbundles viainstaller -pkginfobefore installation - Mounts
.dmgimages and extracts contained.pkgfiles - Interactive curses picker for selecting packages
- Handles Distribution packages with multiple choices automatically
- Finder Quick Action for launching directly from right-click menu
- macOS
- Python 3 (ships with macOS or via Xcode Command Line Tools)
# Scan current directory
python3 pkgflow.py
# Scan a specific directory
python3 pkgflow.py /path/to/packages
# Limit scan depth
python3 pkgflow.py /path/to/packages --max-depth 2| Key | Action |
|---|---|
↑ / ↓ or k / j |
Navigate |
Space |
Toggle selection |
d |
Unpack selected DMGs |
Enter |
Confirm and install |
pkgflow includes a macOS Automator workflow that adds a Quick Action to Finder's right-click menu. Right-click any folder or file, go to Quick Actions, and select pkgflow to launch it in Terminal for that directory.
Run the install script:
./install-workflow.shThis copies pkgflow.workflow to ~/Library/Services/.
After installing, you need to enable the extension in macOS:
- Open System Settings → Privacy & Security → Extensions → Finder Extensions
- Or: System Settings → General → Login Items & Extensions → Finder (depending on macOS version)
- Toggle pkgflow on
Once enabled, the Quick Action appears in Finder's right-click context menu under Quick Actions.
- Scan — Walks the target directory tree collecting
.pkgand.dmgfiles - Validate — Runs
installer -pkginfoon each.pkgto check validity - Select — Presents an interactive picker (or auto-selects in non-interactive mode)
- Extract — Mounts selected
.dmgfiles and copies out any.pkgfiles found inside - Install — Runs
sudo installer -pkg ... -target /for each selected package, with automaticapplyChoiceChangesXMLfor Distribution packages
MIT
