Author here. Yojam replaces the default browser on macOS so every URL - clicks, Finder .webloc/.inetloc/.url files, Handoff, AirDrop, Share and Services menus, Safari/Chromium/Firefox extensions, and a yojam:// scheme - runs through one pipeline: global regex rewrites, tracking-parameter scrubbing, rule matching, per-browser rewrites, then open-or-pick.
Technically interesting bits if you want to pick them apart:
Rules can target specific browser profiles, not just bundle IDs. For Chromium this means shelling out with --profile-directory; for Firefox, -P with the profile name; for Safari/Orion, AppleScript because there's no profile CLI (because of course there isn't).
Source-app filtering uses real originating bundle IDs where macOS actually gives them to us, and synthetic sentinels (com.yojam.source.handoff and friends) where it doesn't. Rules can key on either.
The Share Extension, Safari Web Extension, and native messaging host are separate Xcode targets sharing an App Group container, which is why swift build alone can't produce a functioning bundle - the default-browser role requires a proper Info.plist with URL scheme registration. Don't ask me how long that took to figure out.
Private/incognito is per-target: Chromium --incognito, Firefox --private-window, Safari/Orion via AppleScript.
No telemetry, no network I/O beyond optional iCloud KV sync and Sparkle. Your URLs are your business.
Source layout, rule semantics, and yojam:// scheme parameters are all in the README. Feedback on the rule model and the native-messaging install/repair flow especially welcome - those two areas took the most iteration and I'm least confident they're right yet.