A lightweight macOS menu bar app that automatically merges Finder windows into a single tabbed window.
Every time you open a new Finder window, FinderOne detects it and merges all Finder windows into one tabbed window — automatically.
No more cluttered desktops full of Finder windows.
- Automatic merging of new Finder windows into tabs
- Manual "Merge Now" for on-demand merging
- Automatic updates and manual update checks
- Launch at Login support
- Minimal resource usage — sits quietly in your menu bar
Requires Xcode 15+ and macOS 14+.
git clone https://github.com/mohnya-org/FinderOne.git
cd FinderOne
make build
make run- Launch FinderOne — it appears in your menu bar
- Click the menu bar icon and grant Accessibility permission when prompted
- That's it — new Finder windows will be automatically merged into tabs
| Permission | Why |
|---|---|
| Accessibility | Required to monitor Finder windows |
| Automation | macOS will prompt on first merge (AppleScript → Finder) |
FinderOne release builds can check for updates automatically. In the menu bar panel, use Automatically check for updates to enable or disable automatic checks, or choose Check for Updates… to check manually.
If your installed version predates automatic update support, install a current release manually first.
- Monitors Finder window count via the Accessibility API
- When a new window is detected, waits ~0.5s for it to finish loading
- Runs Finder's built-in
Merge All Windowscommand via AppleScript - If fewer than 2 windows exist, does nothing
This is an Xcode project (not a Swift Package).
make build # Build
make debug-build # Debug build
make clean-build # Clean + build
make run # Open the built appRaw xcodebuild command
xcodebuild \
-project Corral.xcodeproj \
-scheme Corral \
-configuration Debug \
-derivedDataPath tmp/DerivedData \
build CODE_SIGNING_ALLOWED=NOmake build writes the app bundle to dist/FinderOne.app, matching the release workflow layout. Local builds do not perform Developer ID signing or notarization, and automatic updates are disabled unless configured.
For maintainer setup, signing, notarization, and release instructions, see Releasing FinderOne.
Corral/
├── CorralApp.swift # App entry point
├── AppDelegate.swift # App state & orchestration
├── MenuBarView.swift # Menu bar UI
├── MenuBarIconFactory.swift # Menu bar icon
├── FinderWindowMonitor.swift # Finder window monitoring
├── AppleScriptRunner.swift # Finder merge via AppleScript
├── AccessibilityPermissionManager.swift
└── LoginItemManager.swift
- Monitoring is polling-based, not event-driven
- Finder's
Merge All Windowsmay be temporarily unavailable depending on Finder state - Behavior may be affected by future macOS or Finder changes
Issues and pull requests are welcome.
MIT