[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74743":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":16,"starSnapshotCount":16,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},74743,"yojam","fluffypony\u002Fyojam","fluffypony","open links on macOS in whatever browser, app, or profile you need - whatever yo jam is","",null,"Swift",1108,418,6,14,0,3,22,53,9,78.17,"BSD 3-Clause \"New\" or \"Revised\" License",false,"main",true,[],"2026-06-12 04:01:15","\u003Cp align=\"center\">\n  \u003Cimg src=\"logo.png\" alt=\"Yojam\" width=\"400\">\n\u003C\u002Fp>\n\n### Open links in whatever browser, app, or profile you need - whatever yo jam is.\n\nI kept running into this problem: I clicked a link in Slack, and it opened in Safari. But I was logged into that AWS account in Chrome Profile 3, and the Figma link should just open in the desktop app, not another browser tab.\n\nYojam fixes that. Set it as your default browser, and it catches every link you click. Using rules you define, it routes each link exactly where it belongs - or pops up a fast picker right at your cursor so you can choose on the fly.\n\n## What it actually does\n\n- **Rules engine:** Route URLs by domain, prefix, regex, source app, or all links from a source. Send work stuff to your corporate Edge profile and personal stuff to Safari. Each rule can override the target browser's defaults: specific profile, private-window on\u002Foff, custom launch args, target display, machine scope, or Firefox container.\n- **Profile support:** Targets specific profiles in Chrome, Firefox, Brave, Edge, Vivaldi, and Opera. Work profile for work links, personal for everything else.\n- **Firefox containers:** Rules can route into a named Multi-Account Container (Work, Personal, Banking, etc.) through the bundled Firefox extension. The link gets reopened inside the right container instead of the default context.\n- **Multi-monitor targeting:** Pin a rule's output to a specific display. Jira on the left screen, Slack-forwarded links on the right, whatever you want.\n- **Tracking garbage removal:** Strips `utm_source`, `fbclid`, `gclid`, and 30+ other tracking parameters before the browser ever sees them. Per-browser or globally.\n- **URL rewriting:** Regex-based find\u002Freplace on URLs. Ships with disabled-by-default examples for Twitter→Nitter, Reddit→Old Reddit, Medium→Scribe.\n- **Private windows:** One checkbox to always open a browser in incognito\u002Fprivate mode. Works for Chromium, Firefox, and Safari\u002FOrion (via AppleScript).\n- **Email handling:** Catches `mailto:` links and routes them to your preferred client.\n- **Clipboard monitor:** Optionally watches your clipboard and offers to open copied links.\n- **Auto-learning:** Yojam notices which browser you pick for each domain and starts suggesting it automatically.\n- **Migrate from Bumpr, Choosy, or Finicky:** Quick Start detects these on first launch and imports their rules, tagged so you can review them before committing.\n- **Flat-file config:** A live-editable JSON copy of your setup at `~\u002FLibrary\u002FApplication Support\u002FYojam\u002Fconfig.json`. Edits in the file get picked up by the app in real time, and vice-versa. Good for dotfile repos or scripted changes.\n- **iCloud sync:** Your rules and browser setups sync across all your Macs, with per-rule machine scope for rules that should only run on one Mac.\n- **Shortcuts integration:** \"Open URL in Browser\" and \"Apply URL Rules\" intents for automation.\n- **Menu bar only:** No dock icon, no Cmd+Tab entry. Just a menu bar icon with recent URLs and quick access to preferences.\n\n## Receiving links\n\nYojam picks up links from every source macOS can offer:\n\n- Clicks in any app that opens `http`\u002F`https` URLs (the default-browser path).\n- Finder double-clicks on `.html`, `.xhtml`, `.webloc`, `.inetloc`, and `.url` files.\n- **Handoff** — pages you continue from another Apple device.\n- **AirDrop** — links arrive as `.webloc` files, which Yojam unwraps transparently.\n- **macOS Share menu**, via the bundled Share Extension.\n- **Services menu** — highlight any URL in any Cocoa app, right-click, choose *Open in Yojam*.\n- **Browser extensions** for Safari, Chrome, and Firefox.\n- The `yojam:\u002F\u002F` URL scheme, for Shortcuts, Raycast, Alfred, shell scripts, and any other automation.\n\nEvery one of these goes through the same rule engine, tracker scrubber, and rewrite pipeline as a direct click. There is no second-class handling.\n\n## Installing\n\nInstall via Homebrew:\n\n```bash\nbrew tap fluffypony\u002Fyojam\nbrew install --cask yojam\n```\n\nOr grab the DMG from [yoj.am](https:\u002F\u002Fyoj.am) and drag Yojam to your Applications folder. On first launch, Yojam asks to become your default browser.\n\nYojam checks for updates automatically. You can also check manually from the menu bar icon > \"Check for Updates...\"\n\n## Building from source\n\nYou need macOS 14+ and Xcode 16+. Yojam uses [XcodeGen](https:\u002F\u002Fgithub.com\u002Fyonaskolb\u002FXcodeGen) for the project file.\n\n```bash\n# Install xcodegen if you haven't\nbrew install xcodegen\n\n# Generate the Xcode project and build\nxcodegen generate\nopen Yojam.xcodeproj\n```\n\nBuild and run from Xcode. On first launch, Yojam asks to become your default browser - say yes, that's how it intercepts links.\n\n> **Note:** `swift build` \u002F `swift run` compiles the code and runs tests, but won't produce a working `.app` bundle. macOS requires a proper app bundle with Info.plist and URL scheme registration to function as a default browser. The Share Extension, Safari Web Extension, and native messaging host are Xcode-only targets produced by `xcodegen generate && xcodebuild`.\n\n### Building the extensions\n\n- The **Share Extension**, **Safari Web Extension**, and **native messaging host** are Xcode-only targets. `swift build` only builds the bare Yojam executable and `YojamCore` library.\n- `Extensions\u002Fbuild.sh` produces `dist\u002Fyojam-chrome.zip` and `dist\u002Fyojam-firefox.xpi` from the shared WebExtension source. Signing and store submission are out of scope for this script.\n\n## How it works\n\nWhen you click a link anywhere on your Mac, Yojam processes it through a pipeline:\n\n1. **Global rewrites** - URL transformations (regex find\u002Freplace)\n2. **Tracker scrubbing** - Strips tracking parameters (skipped for `mailto:` so subjects and bodies stay intact)\n3. **Rule matching** - Checks the clean URL against your routing rules top-to-bottom. First match wins.\n4. **Browser-specific rewrites** - Per-browser transforms after the target is determined\n5. **Open or pick** - If a rule matches, the link fires immediately. Otherwise, the picker appears at your cursor.\n\n## Activation modes\n\n| Mode | What happens |\n|---|---|\n| **Always show picker** | Unmatched links show the browser picker; matching rules still fire immediately. |\n| **Hold Shift to pick** | Links route via rules or your default. Hold Shift to force the picker. |\n| **Smart + Fallback** | Rules fire automatically. Learned domains auto-route. Everything else shows the picker. |\n\n## Picker keyboard shortcuts\n\n| Key | Action |\n|---|---|\n| 1–9 | Jump to browser at that position |\n| ←→ \u002F ↑↓ | Move selection |\n| Enter \u002F Space | Open in selected browser |\n| Cmd+C | Copy URL to clipboard |\n| Esc | Dismiss picker |\n\n## Rules\n\nYojam ships with built-in rules for Zoom, Telegram, Slack, Discord, Spotify, Apple Music, FaceTime, Apple Maps, Microsoft Teams, Figma, Linear, Notion, WhatsApp, Signal, App Store, TestFlight, and Podcasts. They auto-disable when the target app isn't installed and re-enable when it is. Built-in rules are also fully editable - tweak, duplicate, or delete them, and *Restore Default Rules* in Advanced brings them back.\n\nAdd your own rules matching on all URLs, domain (exact), domain suffix, URL prefix, URL substring, or regex. Rules can optionally filter by source app - only route links from Slack to your work browser, for example.\n\n### Per-rule overrides\n\nBeyond picking the target app or browser, each rule can pin:\n\n- **Profile** - e.g. route `github.com` to Chrome specifically in the *Work* profile, while your other Chrome rules use *Personal*.\n- **Private \u002F incognito window** - tri-state (inherit \u002F force on \u002F force off).\n- **Firefox container** - route into a named Multi-Account Container. Needs the Yojam Firefox extension enabled.\n- **Target display** - send the browser window to a particular monitor after it opens (requires Accessibility permission).\n- **Custom launch arguments** - pass whatever CLI flags the target needs, with `$URL` as the placeholder.\n- **Machine scope** - keep an iCloud-synced rule active only on the Mac where it was created.\n- **New instance** - open a separate app instance for custom Chromium `--user-data-dir` setups.\n\nThese overrides only apply to the specific rule, so a rule-level private-window toggle won't flip the browser's own default.\n\n### Source-app sentinels for rules\n\nFor ingress paths that don't have a real originating app, Yojam uses synthetic bundle identifiers. You can target these in rules to handle links differently depending on how they arrived:\n\n| Sentinel | Ingress path |\n|---|---|\n| `com.yojam.source.handoff` | Handoff from another Apple device |\n| `com.yojam.source.airdrop` | AirDropped .webloc files |\n| `com.yojam.source.share-extension` | Share menu |\n| `com.yojam.source.service` | Services menu |\n| `com.yojam.source.safari-extension` | Safari extension |\n| `com.yojam.source.chrome-extension` | Chrome\u002FChromium extension |\n| `com.yojam.source.firefox-extension` | Firefox extension |\n| `com.yojam.source.url-scheme` | `yojam:\u002F\u002F` URL scheme |\n\nFor example, you could write a rule like: *Source App = `com.yojam.source.handoff` → always open in Work profile*.\n\n## Share Extension\n\nThe Share Extension adds \"Open in Yojam\" to the macOS share menu. It shows up in Safari, Notes, Mail, Finder, Reminders, Photos, and other apps that support the share sheet. One tap forwards the URL to Yojam silently.\n\nTo enable it: **System Settings > Privacy & Security > Extensions > Sharing**, then turn on Yojam.\n\n## Services menu\n\nThe \"Open in Yojam\" entry appears in the Services menu in every Cocoa app. Highlight any URL text, right-click, and pick it from the Services submenu.\n\nTo add a global keyboard shortcut: **System Settings > Keyboard > Keyboard Shortcuts > Services**, find \"Open in Yojam\", and assign a shortcut.\n\n## Browser extensions\n\n### Safari\n\nShips inside Yojam.app. Enable it in **Safari > Settings > Extensions**.\n\n### Chrome \u002F Brave \u002F Edge \u002F Vivaldi \u002F Arc\n\nLoad from `Extensions\u002Fdist\u002Fyojam-chrome.zip` (or install from the Chrome Web Store once published). The native messaging host is installed automatically on Yojam's first launch. If something breaks, repair it from **Preferences > Integrations > Reinstall Browser Helpers**.\n\n### Firefox\n\nInstall the `.xpi` from `Extensions\u002Fdist\u002F` (or from AMO once published).\n\n### What each extension does\n\n- **Toolbar button** — click to send the current tab to Yojam.\n- **Context menu** — right-click any link and choose \"Open Link in Yojam\", or right-click the page background for \"Open Page in Yojam\".\n- **Keyboard shortcut** — `Alt+Shift+Y` sends the current tab to Yojam.\n\n## `yojam:\u002F\u002F` URL scheme\n\nYojam registers a `yojam:\u002F\u002F` URL scheme for automation. Any app, script, or shortcut can trigger it:\n\n```\nyojam:\u002F\u002Froute?url=\u003Cpercent-encoded>&source=\u003Cbundle-id>&browser=\u003Cbundle-id>&pick=1&private=1\nyojam:\u002F\u002Fsettings\n```\n\nParameters:\n- `url` (required): the target URL. Must decode to `http`, `https`, or `mailto`.\n- `source` (optional): bundle identifier for source-app rule matching.\n- `browser` (optional): force a specific target browser by bundle ID, skipping rules.\n- `pick=1` (optional): force the picker regardless of activation mode.\n- `private=1` (optional): open in private\u002Fincognito window if the target browser supports it.\n\nExample Shortcuts recipe: create a Shortcut with an \"Open URL\" action pointing at `yojam:\u002F\u002Froute?url=` followed by the URL you want to route.\n\n## Custom apps\n\nNot limited to browsers. Click **+ Add** in the Browsers tab and pick any `.app` or executable. For apps that don't natively handle URLs, use `$URL` where the link belongs. Without it, Yojam appends the URL after your custom arguments:\n\n```\n$URL\n--url $URL\n--browse $URL\n```\n\nYojam passes these arguments directly - no shell involved.\nFor app bundles, enable **Open as new instance** if the entry needs its own Chromium user-data directory. `$HOME` and leading `~\u002F` are expanded without invoking a shell.\n\n## Settings\n\nSix tabs in preferences (menu bar icon > Preferences, or Cmd+,):\n\n- **General** - Activation mode, picker layout and direction, launch at login, clipboard monitoring, iCloud sync, Quick Start\n- **Browsers** - Reorder, enable\u002Fdisable, profiles, private mode, per-browser tracker stripping, custom icons, custom launch args\n- **Link Handling** - Routing rules, rewrite rules, global tracker stripping, URL tester. Each rule supports the per-rule overrides listed above.\n- **Integrations** - Health dashboard for default browser, .webloc handler, yojam:\u002F\u002F scheme, Handoff, Share Extension, Safari extension, native messaging hosts, App Group access. One-click repair buttons for each.\n- **Advanced** - Debug logging, tracker parameter list, smart routing data, import from Bumpr\u002FChoosy\u002FFinicky, flat-file config panel, import\u002Fexport settings, uninstall, reset\n- **About** - Version info, license, links\n\nOn first launch Yojam shows a Quick Start card above the tabs that walks you through default-browser registration and, if any are installed, offers to import rules from Bumpr, Choosy, or Finicky.\n\nThe URL tester on the Link Handling tab lets you paste a URL and see exactly what Yojam would do - which rewrites fire, whether trackers get stripped, which rule matches, and where it ends up.\n\nSettings can be exported as JSON and imported on another machine.\n\n## Permissions\n\n- **App Group** `group.org.yojam.shared` — shared storage between the main app and its extensions.\n- **iCloud Key-Value Store** — for settings sync (off by default).\n- **Apple Events** — for AppleScript-based private windows in Safari and Orion.\n- **Accessibility** — only required if you use per-rule display targeting to move browser windows after they open. Granted in System Settings > Privacy & Security > Accessibility.\n\nThe first time certain features are used, macOS will show:\n- A protocol-handler confirmation for `yojam:\u002F\u002F` (from browser extension fallback path).\n- A prompt to enable the Share Extension (System Settings > Extensions > Sharing).\n- A prompt to enable the Safari Web Extension (Safari > Settings > Extensions).\n\n## Privacy\n\nEverything happens locally on your Mac. Yojam doesn't phone home, track your clicks, or send your data anywhere. The Share Extension and browser extensions only hand a URL to the local Yojam process. The native messaging host only forwards URLs you explicitly trigger — it never reads page contents. Nothing hits the network.\n\nThe only network activity is iCloud sync (uses your own Apple ID, off by default) and checking for updates via yoj.am (can be disabled in Preferences).\n\n## Troubleshooting\n\n- **Handoff link doesn't appear** — Confirm Yojam is your default browser, and that Handoff is on in System Settings > General > AirDrop & Handoff.\n- **Share Extension missing** — Enable it in System Settings > Privacy & Security > Extensions > Sharing.\n- **Browser extension button does nothing** — Go to Preferences > Integrations and click \"Reinstall Browser Helpers\" to rewrite native messaging manifests.\n- **Safari extension not showing** — Enable it in Safari > Settings > Extensions.\n- **AirDropped link file opens in Finder instead** — Set Yojam as the default handler for `.webloc` from Preferences > Integrations.\n- **Pre-release settings missing** — This release stores all routing state in an App Group container. If you upgraded from a pre-release build, your old preferences in `~\u002FLibrary\u002FPreferences\u002Fcom.yojam.app.plist` are not read. Reconfigure from Preferences.\n\n## License\n\nBSD 3-Clause. See LICENSE.\n\n## Why I built this\n\nThere are other browser pickers out there. I wanted one that felt invisible most of the time, stripped trackers globally, supported browser profiles as first-class citizens, and let me pass custom CLI arguments when I needed to do something weird.\n\n## Contributing\n\nThis project follows a hard-cut policy: we delete old-state compatibility code rather than carrying it forward. Any temporary migration or compatibility code must be called out in the same diff with why it exists, why the canonical path is insufficient, exact deletion criteria, and the task that tracks its removal.\n","Yojam 是一个 macOS 应用程序，旨在根据用户定义的规则在所需的浏览器、应用程序或配置文件中打开链接。其核心功能包括强大的规则引擎，支持基于域名、前缀、正则表达式等条件进行路由，并且可以针对特定浏览器配置文件、Firefox 容器以及多显示器环境定制规则。此外，Yojam 还具备自动学习用户偏好、去除跟踪参数、URL 重写等功能，同时支持从其他类似工具迁移设置。此工具非常适合需要在多个浏览器和应用之间高效切换工作和个人链接的用户，特别是在涉及多账户管理、隐私保护和自动化流程优化的场景下使用。",2,"2026-06-11 03:50:36","high_star"]