Skip to content

h5nam/mq-dir

mq-dir

Free, open-source macOS file manager for AI multi-taskers. Up to four independent panes per project, each remembering its folder, sort, and scroll position across launches β€” with zero telemetry, ever.

release platform swift license

🌐 mqdir.com Β· πŸ““ Releases Β· πŸ›  Contributing Β· 🌏 ν•œκ΅­μ–΄

mq-dir hero

Why

A modern coding session is half source, half artifacts: generated images, recorded demos, PDFs, screenshots from QA, exported transcripts, downloaded models, design specs. None of it lives where your code does β€” and Finder wasn't built for that volume or for the way agents now produce work in parallel.

mq-dir gives you up to four independent panes side by side. One per project, one per agent, one for the artifact dump. Each pane keeps its own folder, sort, scroll position, and column widths β€” and remembers them across launches and force-quits.

Features

  • 🟦 1 / 2H / 2V / 4-pane layouts β€” focused-pane routing, independent folder per pane.

  • β†Ή Per-pane tabs β€” Safari-style strip with X/+, ⌘T / ⌘W / βŒ˜β‡§T / ⌘1β€¦βŒ˜9 / βŒ˜β‡§[ / βŒ˜β‡§], drag-to-reorder, drag a tab onto Favorites to bookmark its folder, right-click Close Other / Close to Right / Duplicate, last-tab safety placeholder.

  • 🌳 VS Code-style tree view β€” per-tab toggle, lazy child loading, separate chevron hit target (clicking a folder name selects without expanding), Shift / Cmd multi-select, file drag-out to external apps. New tabs via ⌘+double-click or ⌘+Enter on a folder (same as list view).

  • ⌨️ Keyboard nav + Finder-parity right-click β€” ↑/↓ step through rows (hold to repeat, Shift to extend the selection); Return opens, ⌘+Return opens in a new tab. ⌘C / ⌘X / ⌘V copy / cut / paste with Windows Explorer-style move semantics β€” a ⌘X-marked selection moves on ⌘V at the destination instead of copying (something Finder doesn't ship). Row context menu covers Open With β–Έ (LaunchServices candidates + Other…), Get Info, Reveal in Finder, Copy / Copy Path, Duplicate, Rename, Normalize Filename to NFC (rewrites Hangul filenames stored as decomposed NFD on disk to the precomposed NFC form Windows / Slack / Discord / Gmail / web uploaders expect β€” multi-select supported, no-op on already-NFC names), and Move to Trash. Multi-selection right-clicks act on the whole selection. Restoring keyboard focus after a rename is handled correctly in both list and tree view.

  • βš™οΈ Settings β†’ Shortcuts β€” 17 actions re-bindable from Preferences (⌘,), including F1…F12. Reset-to-default per row.

  • πŸ‘€ Per-tab preview pane β€” toggle in the pane header (or βŒ˜β‡§P). PDFs render through PDFKit with continuous scroll + paging; everything else routes through Quick Look for images, code, video, audio, office docs (DOCX/PPTX/XLSX). MarkdownUI handles .md with full GFM (tables, code blocks, lists). Folder/multi/empty selections get custom summaries. Zip archives preview in-pane (listing + single-entry decode). Multi-page navigation for non-PDF documents and formats macOS Quick Look has no generator for (HWP, etc.) is best done with ⎡ to summon the floating Quick Look panel, or ⇧↩ to open in the system default app (e.g. Hancom Office Viewer for HWP).

  • 🏷️ Finder tag display β€” per-tag colour swatches (red / orange / yellow / green / blue / purple / grey) read straight from macOS metadata, including multi-tag rows. Sidebar Tags section lists every tag in the current folder. Read-only β€” applying or editing tags happens in Finder.

  • πŸ“‚ Custom folder icons β€” folders with a Finder-assigned custom icon (Get Info β†’ drag image) render that icon in the row, not the system default.

  • ⭐ User-editable Favorites sidebar β€” drag folders in (or drag a tab in to bookmark its folder), right-click Remove or Rename, drag to reorder, βŒ˜β‡§D adds the focused pane's folder. Real Finder folder icons, stale-path styling.

  • πŸ“ Projects (workspaces) β€” named snapshots of (layout + pane tabs + focus). + button creates one, click switches, right-click Rename / Delete, drag to reorder. Switching auto-saves the outgoing project.

  • πŸ’Ύ State persistence β€” every pane / tab / favorite / project survives relaunch, force-quit, and even schema upgrades (legacy state.json shapes auto-migrate).

  • πŸ”Ž Per-pane recursive search β€” debounced, case-insensitive substring match across the current folder's subtree. ⌘F.

  • πŸ”„ In-app auto-update β€” Sparkle 2 polls the appcast every 24 h; when a new release is out, the sidebar grows an "Update Available" button that runs the standard install/relaunch flow.

  • πŸ’¬ In-app Send Feedback β€” sidebar footer β†’ send a short note with optional screenshots straight to the maintainer (no email client involved).

  • πŸ”— cmux sync β€” sidebar grows a CMUX section that mirrors your cmux workspaces. Click a row to open its working directory in the focused pane (⌘-click for a new tab). cmux ships with the socket locked to its own children, so pick one of:

    • Quick: cmux β†’ Settings β†’ Automation β†’ Socket Control Mode = Allow All.
    • Stricter: Socket Control Mode = Password, then launchctl setenv CMUX_SOCKET_PASSWORD <pw> (so the env var reaches GUI-launched apps) and relaunch mq-dir.

    Section stays hidden when cmux isn't installed.

  • 🎨 Native macOS look β€” SwiftUI + AppKit, system theme tokens, hand-finished app icon.

Roadmap

  • 3-pane layout option.
  • More archive formats in-pane (tar / 7z / rar).
  • Open to ideas β€” file an issue or use the in-app Send Feedback.

Status

v0.1.2 β€” latest stable cut. Each tagged build is Developer ID-signed and Apple-notarized. The feature set above has been daily-driven by the maintainer and a small early-adopter group; expect occasional rough edges around ergonomics. Per-release detail lives on the Releases page.

Requirements

  • macOS 14 (Sonoma) or later
  • Apple Silicon or Intel
  • For building: Xcode 15+, Homebrew

Install

From the signed DMG (recommended)

Grab the latest .dmg from Releases and drag mq-dir.app into /Applications. Notarized + stapled, so Gatekeeper opens it without a right-click trick. The running app then auto-updates via Sparkle on its 24-hour cadence (or whenever you click the sidebar's "Update Available" button).

Via Homebrew

brew install --cask h5nam/mq-dir/mq-dir

brew tap-installs the formula on first use β€” no separate brew tap needed. Subsequent updates are brew upgrade --cask mq-dir. The cask points at the same signed DMG as above; the tap repo (h5nam/homebrew-mq-dir) is refreshed automatically by the release workflow.

From source

git clone https://github.com/h5nam/mq-dir.git
cd mq-dir
Scripts/bootstrap.sh   # installs XcodeGen and the xcodes CLI
open mq-dir.xcodeproj

bootstrap.sh generates mq-dir.xcodeproj from project.yml (XcodeGen is the source of truth β€” the .xcodeproj is not checked in).

Tests-only (no Xcode required, just the Swift toolchain):

swift test

Privacy

We never call home. No telemetry, no crash reporting, no analytics. Ever, in v1.

mq-dir is local-only by default. Outbound network traffic is limited to two narrowly-scoped paths, both auditable in the source:

  1. Sparkle update check β€” once every 24 hours, fetches https://h5nam.github.io/mq-dir/appcast.xml. Public file, no identifying info attached to the request.
  2. Send Feedback β€” only when you press the button in the sidebar footer, posts your message + optional screenshots to the maintainer's Discord webhook. Nothing leaves the machine if you never use it.

No background analytics, no usage pings, no crash reporting upload. Local state lives in ~/Library/Application Support/com.mqdir.app/.

If a v1.x release ever proposes opt-in crash reporting, it will land behind a config toggle defaulting to off, with the source clearly visible.

Out of scope for v1

Cloud sync, file editing, plugins, iPadOS/iOS port, localization beyond English. Archive editing (we preview zip in-pane; tar / 7z / rar previews are on the roadmap, not write support).

Contributing

PRs welcome. Contributions are accepted via DCO β€” every commit needs a Signed-off-by: line. No CLA. See CONTRIBUTING.md for the workflow, SECURITY.md for vulnerability disclosure, and CODE_OF_CONDUCT.md.

Releasing (maintainers only)

Scripts/release.sh 0.1.3

That's it. The script bumps the version, builds Release with Developer ID, re-signs every nested binary inside-out (Sparkle's helpers don't auto-inherit signing), notarizes via the stored mq-dir-notary keychain profile + staples, builds and EdDSA-signs the DMG, appends a fresh <item> to docs/appcast.xml, bumps Casks/mq-dir.rb, tags + pushes, and creates the GitHub release.

One-time setup (per maintainer machine):

Scripts/sparkle-setup.sh
# β†’ downloads Sparkle binary tools, generates the EdDSA key pair in your
#   macOS keychain, prints the public half. Already embedded in
#   project.yml's SUPublicEDKey for this project; only needed if a
#   future maintainer rotates the key.

xcrun notarytool store-credentials mq-dir-notary \
    --apple-id <your-apple-id> --team-id WKV6T7K33K \
    --password <app-specific-password>

brew install create-dmg
gh auth login

Plus give codesign access to the Developer ID private key once: Keychain Access β†’ login β†’ My Certificates β†’ expand Developer ID Application: … β†’ right-click the private key β†’ Get Info β†’ Access Control β†’ Allow all applications to access this item. Without this, every release prompts for your Mac password ~10 times during the inside-out re-sign.

GitHub Pages is already enabled on main / /docs so the appcast at https://h5nam.github.io/mq-dir/appcast.xml updates within a minute of every push.

License

MIT β€” see LICENSE.

Acknowledgments

mq-dir's quad-pane layout is inspired by Q-Dir by SoftwareOK / Nenad Hrg, a long-running Windows file manager that made the case for multi-pane file management. mq-dir is an independent, clean-room implementation in Swift for macOS β€” not affiliated with, endorsed by, or derived from Q-Dir's source code.

About

Quad-pane native macOS file manager

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors