Skip to content

Latest commit

 

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Browser Picker

A native macOS menu bar app that becomes your default browser and sends every link to the right browser and profile — automatically with rules, or with a quick picker.

macOS 14.0+ Universal binary Signed & notarized Latest release Donate via PayPal


Why Browser Picker?

Juggling a personal Chrome, a work Chrome profile, and Firefox for clients? Stop opening links in the wrong place. Browser Picker routes each link to the exact browser and profile you want — so work links land in your work profile, personal links in your personal one, automatically.

Install

A universal build that runs natively on both Apple Silicon and Intel Macs (macOS 14.0+). Every release is signed with a Developer ID certificate and notarized by Apple, so it opens without Gatekeeper warnings.

1. DMG — recommended

  1. Download BrowserPicker-X.Y.Z.dmg from the latest release.
  2. Open the DMG and drag Browser Picker into your Applications folder.
  3. Launch it from Applications — the icon appears in your menu bar.

2. Homebrew

brew install --cask mertizci/tap/browser-picker

Features

  • 🎯 Browser + profile routing — not just "open in Chrome", but "open in Chrome → Work" or "Firefox → Client A". Each link lands in the right account, ready to go.
  • 🧭 Menu bar control — pick the active browser + profile (Safari, Chrome, Edge, Brave, Vivaldi, Dia, Firefox) in one click.
  • 🔀 Automatic routing rules — match links by URL contains, host equals, or host suffix. First match wins; reorder by dragging.
  • 🪃 Two fallback modes when no rule matches:
    • Silent — open in your current menu bar selection.
    • Picker — prompt for the browser/profile each time.
  • 👤 Profile discovery
    • Chromium browsers (Chrome, Edge, Brave, Vivaldi, Dia) — from each browser's Local State.
    • Firefox — from profiles.ini and Firefox Profile Groups (selectable profile names).
    • Safari — from SafariTabs.db, with a menu scan fallback.
    • Dia ignores command-line arguments, so links are handed to it by automation: an existing window of the target profile is reused, otherwise the link is moved into that profile.
  • 🧑‍🏫 Guided onboarding that requests and live-tracks the required permissions.
  • Polished UI — window-style menu bar popover, redesigned Settings, rule editor with live preview, built-in FAQ and About.
  • 🖼️ Native browser icons from installed apps, with Simple Icons SVG fallback.

Permissions

Permission Why it's needed
Accessibility Drive Safari's File → New … Window menu, and Dia's profile menu, to open links in a specific profile.
Full Disk Access Read Safari profile names from the protected SafariTabs.db.

On first launch an onboarding window walks you through both. After granting Accessibility, quit and reopen the app — macOS only applies that permission on a fresh launch.

Requirements

To run:

  • macOS 14.0 (Sonoma) or later
  • Apple Silicon or Intel — ships as a universal binary

To build from source:

  • Xcode 15+
  • An Apple Development signing certificate (a stable code signature keeps the Accessibility grant across rebuilds)

Build

brew install xcodegen   # once
xcodegen generate
xcodebuild -scheme BrowserPicker -destination 'platform=macOS' -configuration Debug build
open ~/Library/Developer/Xcode/DerivedData/BrowserPicker-*/Build/Products/Debug/BrowserPicker.app

Or open BrowserPicker.xcodeproj in Xcode and press ⌘R.

Signing is configured in project.yml (CODE_SIGN_IDENTITY). Ad-hoc signatures change on every build and break the Accessibility grant, so a real "Apple Development" identity is recommended.

Setup

  1. Launch Browser Picker — the icon appears in the menu bar.
  2. Complete the onboarding (grant Accessibility + Full Disk Access).
  3. Choose Set as Default Browser… from the menu bar.
  4. Pick your default browser and profile.
  5. Open Settings → Rules to add routing rules (e.g. URL contains r2o → Firefox · Work).

Configuration

Settings are stored as JSON at:

~/Library/Application Support/BrowserPicker/config.json

Project structure

BrowserPicker/
├── BrowserPickerApp.swift           # App entry, AppDelegate, URL handling
├── Core/                            # Models, SettingsStore, RuleEngine, URLRouter
├── Browsers/
│   ├── BrowserLauncher.swift        # Chromium/Firefox/Safari dispatch
│   ├── SafariLauncher.swift         # AppleScript profile targeting
│   ├── AutomationPermissionService  # PermissionMonitor (Accessibility + FDA)
│   └── ProfileDiscovery/            # Per-browser profile discovery
├── UI/                              # Menu bar, Settings, Rules, Onboarding, FAQ, About
└── Resources/                       # faq.html, browser SVG icons

Test

# After making Browser Picker the default browser:
open "https://example.com"

Troubleshooting

  • Accessibility shows "not granted" after granting — quit and reopen the app (use Quit & Reopen); macOS applies it only on a fresh launch.
  • Safari profiles missing — grant Full Disk Access, or open Safari and use Scan Safari Profiles in Settings → Browsers.
  • App icon looks blank — quit/reopen; if it persists, log out and back in to clear the macOS icon cache.

Contact

Developed by Mert IZCImertizci@gmail.com.

License

Browser Picker application code is provided as-is. Browser SVG fallbacks use Simple Icons (MIT). See BrowserPicker/Resources/Icons/browsers/ATTRIBUTION.md.

About

No description, website, or topics provided.

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages