macOS native app that makes Safari, Chrome, Arc, Edge, and Brave work together. It unifies your browsing experience through a local WebSocket daemon, browser extensions, intelligent URL routing rules, http://browsync.ct106.com/
  • Swift 58.9%
  • JavaScript 25.4%
  • HTML 12.1%
  • Shell 3.6%
Find a file
2026-06-17 15:58:52 +08:00
.github Add license and security policy 2026-06-13 22:11:48 +08:00
BrowSync chore: release version 1.0.11 build 23 2026-06-17 15:58:52 +08:00
BrowSync.xcodeproj chore: bump version to 1.0.6 and clean up build configuration and release scripts 2026-06-14 14:24:43 +08:00
BrowSyncExtension chore: release version 1.0.11 build 23 2026-06-17 15:58:52 +08:00
ChromiumExtension chore: release version 1.0.11 build 22 2026-06-17 15:25:03 +08:00
screenshots chore: update screenshot 000008.jpg 2026-06-15 20:46:46 +08:00
Sparkle/bin chore: release version 1.0.0 build 2 2026-06-11 20:43:50 +08:00
.gitignore feat: rotate log files daily, add automated build/test script, and improve DMG signing process 2026-06-05 12:13:42 +08:00
appcast.xml chore: release version 1.0.11 build 23 2026-06-17 15:58:52 +08:00
badge.png refactor: modernize documentation and landing page with Chrome Web Store link and updated styling 2026-06-10 21:13:04 +08:00
BrowSync.entitlements feat: implement iCloud synchronization for application settings and browser tabs 2026-06-14 14:05:21 +08:00
BrowSyncExtension.entitlements first commit 2026-05-31 13:48:24 +08:00
CNAME Create CNAME 2026-06-02 20:25:14 +08:00
disabled-domains.json chore: release version 1.0.3 build 6 2026-06-11 21:54:31 +08:00
index.html feat: localize screenshots, update settings sync to replace instead of merge, and enable dynamic localization for UI components 2026-06-15 13:41:54 +08:00
LICENSE Add license and security policy 2026-06-13 22:11:48 +08:00
package.sh feat: rotate log files daily, add automated build/test script, and improve DMG signing process 2026-06-05 12:13:42 +08:00
privacy.html Refactor code structure for improved readability and maintainability 2026-06-02 21:20:07 +08:00
project.yml chore: release version 1.0.11 build 23 2026-06-17 15:58:52 +08:00
README.md feat: localize screenshots, update settings sync to replace instead of merge, and enable dynamic localization for UI components 2026-06-15 13:41:54 +08:00
README_zh.md feat: localize screenshots, update settings sync to replace instead of merge, and enable dynamic localization for UI components 2026-06-15 13:41:54 +08:00
release-to-brew.sh chore: bump version to 1.0.6 and clean up build configuration and release scripts 2026-06-14 14:24:43 +08:00
release.sh chore: remove chrome extension from github release assets 2026-06-16 21:02:41 +08:00
test.sh fix: explicit lsregister and pluginkit to keep Safari extension enabled after test build 2026-06-06 00:25:53 +08:00

BrowSync

[English] | 简体中文

BrowSync is a cross-browser routing and sync hub for macOS. It unites Safari and all Chromium-based browsers, intelligently routing links and syncing bookmarks and sessions in real-time.

Download BrowSync Available in the Chrome Web Store

brew install --cask chentao1006/tap/browsync

Important

Local Execution BrowSync's synchronization and URL routing happen locally on your device via a WebSocket daemon. Browsing data (bookmarks, cookies, local storage, active tabs) is stored on your machine without external server involvement.

🚀 Features

  • URL Routing: Register BrowSync as the default macOS browser to direct links to specific browsers based on domain, URL patterns, query strings, source application, or time of day.
  • Bookmark Sync: Sync bookmarks in real-time across Safari and all Chromium-based browsers.
  • State Sync: Sync Cookies, LocalStorage, and sessionStorage across supported browsers to maintain login states.
  • Tab Sharing: View active tabs across browsers. It filters out incognito tabs and non-HTTP(S) local pages, and deduplicates URLs.
  • Sync Strategies: Supports unidirectional (master-slave), last-write-wins (based on access time), and bidirectional merging.
  • Site Control: Manage sync scope with whitelist/blacklist rules and per-site policies.
  • Local Network: Communication is handled locally via a WebSocket daemon (ws://127.0.0.1:62333). No external servers are used.
  • Native macOS App: Built with SwiftUI. Supports Dark/Light themes, Menu Bar integration, and Launch at Login.
  • iCloud Sync: Automatically sync your routing rules, settings, and site preferences across all your Mac devices via iCloud.

📸 Screenshots

Screenshot 1 Screenshot 2
Screenshot 3 Screenshot 4
Screenshot 5 Screenshot 6
Screenshot 7 Screenshot 8

🛠 Installation & Setup

1. Requirements

Tool Version
macOS 14.0+
Xcode 15.0+
Swift 5.10+
Homebrew Latest
XcodeGen 2.40+

2. Homebrew Cask

You can install BrowSync with Homebrew:

brew install --cask chentao1006/tap/browsync

Or tap the repository first:

brew tap chentao1006/tap
brew install --cask browsync

3. Build from Source

# 1. Clone the repo
git clone https://github.com/chentao1006/browsync.git
cd browsync

# 2. Generate Xcode project using XcodeGen
xcodegen generate

# 3. Open the generated project
open BrowSync.xcodeproj

Then in Xcode:

  1. Select the BrowSync target → Signing & Capabilities
  2. Set your Development Team
  3. Press ⌘R to build and run

4. Install Browser Extension

Chromium-based Browsers: You can install the BrowSync extension directly from the Chrome Web Store: Install from Chrome Web Store

Safari: The app includes a native Safari extension. After running the BrowSync app, you can enable it directly in Safari's Settings -> Extensions.

🔍 Architecture & Protocol

System Architecture

Safari Extension                Chromium Extension
      │                                    │
      └──────────── WebSocket ─────────────┘
                         │
                  BrowSync Daemon
              ws://127.0.0.1:62333
                         │
                   BrowSync App
              (macOS native, SwiftUI)

Directory Structure

BrowSync/
├── BrowSync/                   # macOS App (Swift/SwiftUI)
│   ├── App/                    # Entry point, AppState
│   ├── Views/                  # Multi-tab UI (Browsers, Rules, Sync)
│   ├── Core/                   # DaemonServer, BrowserScanner, BrowserLauncher
│   ├── Models/                 # Data models (Browser, Rule, SyncModels, WSMessage)
│   ├── Services/               # RulesEngine, SyncService, SettingsService
│   └── Resources/              # Info.plist, Localizable.strings (en + zh-Hans)
│
├── BrowSyncExtension/          # Safari Web Extension target
│   ├── SafariWebExtensionHandler.swift
│   └── Resources/
│       ├── manifest.json
│       ├── background.js       # WebSocket client, bookmark/cookie/tab sharing
│       ├── content.js          # localStorage/sessionStorage proxy
│       ├── popup.html
│       └── popup.js
│
├── ChromiumExtension/          # Shared MV3 extension (Chromium-based)
│   ├── manifest.json
│   ├── background/
│   │   └── service-worker.js   # Same logic as Safari background.js
│   ├── content/
│   │   └── content-script.js
│   ├── popup/
│   │   ├── popup.html
│   │   └── popup.js
│   └── _locales/
│       ├── en/messages.json
│       └── zh_CN/messages.json
│
├── project.yml                 # XcodeGen configuration
├── BrowSync.entitlements       # App entitlements (Sandbox: NO)
├── package.sh                  # Script to package the app
├── release.sh                  # Script to automate releases
├── test.sh                     # Script to run tests
├── index.html                  # Landing page
└── privacy.html                # Privacy policy

WebSocket Protocol

All browser extensions connect to the BrowSync daemon at ws://127.0.0.1:62333.

  • Registration: { "type": "register", "browser": "chrome", "instanceId": "chrome-main" }
  • Heartbeat (every 30s): { "type": "heartbeat" }
  • Sync:
{
  "type": "sync",
  "browser": "safari",
  "site": "chatgpt.com",
  "category": "bookmarks",
  "payload": { "kind": "bookmarks", "bookmarks": [...] },
  "messageId": "uuid",
  "timestamp": 1234567890
}

📁 Data Directory & Identifiers

BrowSync stores its data locally in your Application Support folder:

~/Library/Application Support/BrowSync/
├── sites/          # Per-site sync state
├── bookmarks/      # Synced bookmark snapshots
├── logs/           # sync-YYYY-MM-DD.log
└── settings.json   # All app settings

Bundle IDs:

  • App: com.ct106.browsync
  • Safari Extension: com.ct106.browsync.extension
  • App Group: group.com.ct106.browsync

🎯 Feature Status (MVP)

Feature Status
Browser detection & extension status
WebSocket Daemon
URL routing rules & Default browser handling
Bookmark real-time sync
localStorage & sessionStorage cross-browser sync
Cookie cross-browser sync
Real-time Tab Sharing (w/ deduplication & privacy filter)
Granular site sync control
Safari & Chromium MV3 Extensions
Dark/Light/System theme & EN/zh-Hans localization
iCloud Sync for rules and settings

⚠️ Important Notes

  • Default Browser: To utilize the URL routing feature, BrowSync must be set as your default system browser in macOS Settings.

🛡 License

This project is licensed under the MIT License. See LICENSE.