- Browser profiles as first-class targets. A rule can send a URL to "Chrome, Profile 3" or "Firefox, Work container" - not just "Chrome". Seems obvious; somehow nobody else does it properly.
- Source-app matching. GitHub links from Slack route differently than GitHub links from Messages. Handoff, AirDrop, Share, Services, and each browser extension get synthetic bundle IDs so rules can fire on ingress path.
- Tracker stripping happens before the target browser ever sees the URL, so referrer leakage through utm_* / fbclid / gclid / etc. is cut off globally rather than per-site. This is the only sane way to do it.
- Custom launch arguments with a $URL placeholder, so you can point a rule at any executable, not just registered URL handlers. Useful for throwaway Chromium instances or weird CLI tools.
- Menu bar only. No dock icon, no cmd-tab entry (unless the preferences window is open).
Stack: Swift, AppKit, App Group container shared with a Share Extension, Safari Web Extension (WIP but should be out soon), and a native messaging host for Chromium/Firefox extensions (not live yet, just doing final spit and polish). Private windows in Safari & Orion go through AppleScript because there's no CLI flag (thanks, Apple). Everything is local - the only network traffic is optional iCloud KV sync and Sparkle update checks.
macOS 14+. BSD-3. Happy to answer implementation questions, especially around default-browser registration, the LSHandlers dance, and how the native messaging manifests get installed across six Chromium variants without them stepping on each other.
idan_p•2d ago
What if there is a tracking param that you don't support?
fluffypony•2d ago
Tracker list is fully editable. Preferences > Advanced > Tracker Parameters lets you add, remove, or disable any entry; rules are plain strings or regex, and they apply globally or per-browser. So if some new `xyz_campaign_id` shows up tomorrow, you paste it in and it's stripped from then on.
The shipped list of ~30 covers the obvious ones (utm_*, fbclid, gclid, mc_eid, igshid, yclid, etc.) but I deliberately didn't try to be a full ClearURLs clone - that list is huge and mostly rots. If there's a parameter you think belongs in the defaults, open an issue and I'll add it.
You can also paste a URL into the URL tester on the Pipeline tab and watch exactly which parameters get stripped before the target browser sees it.