Move signed-in sessions locally—or explicitly upload one to Browserless Cloud.
Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Comet · ChatGPT Codex and experimental Cursor browser import · encrypted Grok Bot .bcbx export · optional Browserless authenticated profiles.
Install · Homebrew · DMG · npm · How it works · Security · Contribute · Report a bug · Product Hunt · Windows waitlist · Support
Download for Apple silicon · Download for Intel
Version 1.5.2: Grok Bot
.bcbxbundles embed the decryption key, so import needs no passphrase—treat the file as credentials because anyone with it can decrypt the cookies. Version 1.5.1 restored the Product Hunt launch link. Version 1.5.0 added experimental Cursor browser import and encrypted Grok Bot.bcbxexport. Cursor is destination-only and currently imports cookie sessions into its dedicated browser partition. Attach the.bcbxfile to any Grok Bot and paste the prompt; the bundled importer decrypts automatically. Cookie values must never be logged or pasted into chat. The optional Codex restart flow from 1.4.0 is unchanged and remains off by default.
Signing into the same sites across several browsers is repetitive. Export files are awkward, password managers do not move active sessions, and embedded app browsers do not always offer an import button.
Browser Cookie Bridge gives those browser profiles a small, native control panel. Local browser, Codex, and Cursor transfers stay on the Mac. Grok Bot uses an encrypted transfer file with an embedded decryption key that you attach yourself. If you explicitly select Browserless Cloud and click Upload, the app can instead send authenticated profile state to your own Browserless account.
Browser Cookie Bridge currently ships for macOS. A separate Windows app is being explored, with demand guiding whether it moves into active development. If you use Windows, join the early-access waitlist and tell us which browsers and transfer paths matter to you.
- 🍪 Cookie and session transfer — cookies are enabled by default, including supported domain, path, expiry, security,
SameSite, and partition attributes. - 🗃️ Optional full site data for Codex — replace Codex's compatible Local Storage, IndexedDB, Session Storage, service-worker, and related origin stores from a closed source profile, with backup and rollback. Off by default.
- 🌐 Seven Chromium browsers — Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Perplexity Comet can be sources or destinations.
- ✨ ChatGPT Codex and experimental Cursor import — merge cookie sessions into either app's built-in browser; Codex also supports optional history and full site data. Both are destination-only. Cursor import is experimental: it writes only to Cursor's dedicated
Partitions/cursor-browserprofile and refuses unknown schemas. - 🤖 Encrypted Grok Bot transfer (
.bcbx) — export cookie sessions into a local encrypted bundle with an embedded decryption key and bundled importer. The destination tile uses the official Grok Bot app icon. Attach the file to any Grok Bot; the importer runs on the cloud computer only. Manual only. - 🔁 Optional Codex restart — manual Sync can force quit a running Codex instance and reopen it only after a successful local transfer; off by default.
- 🔄 Optional two-app restart — Full site data can force quit the selected source browser and Codex, then reopen only the apps that were running after a successful transfer; off by default.
- ☁️ Optional Browserless upload — create or refresh a Browserless authenticated profile with cookies, local storage, and IndexedDB; see a local size preflight, live progress, cancellation, and post-upload verification.
- 🕘 Background automation — sync when you sign in, at a fixed daily time, or whenever you choose.
- ◉ Native menu-bar app — closing the window removes the Dock icon while the helper continues running.
- 🧯 Backup and rollback — the destination app browser's database is backed up, modified on a separate copy, integrity-checked, and restored if replacement fails.
- ⬆️ Built-in updates — checks for GitHub releases, verifies the DMG checksum, installs in place, and relaunches the app.
- 🔒 Local-first — local paths use no account, analytics, cookie logs, or remote relay; Grok Bot writes an encrypted file you attach yourself; the separate Browserless path runs only after explicit selection and confirmation.
| Data | Support | Notes |
|---|---|---|
| Cookies and sessions | ✅ Default | Transfers supported cookie values and attributes |
| Full site data → Codex | Optional | Replaces compatible origin storage from a closed Chromium profile; backs up Codex first |
| Encrypted Grok Bot export | Manual | Cookie sessions only, written to a local .bcbx file; history and full site data are excluded |
| History URLs | ◐ Optional | Supported for browser and Codex targets; excluded for Cursor and Grok Bot. Original visit times and page titles cannot be preserved |
| Local storage and IndexedDB | ◐ Optional | Full site data into Codex, or an explicit Browserless authenticated-profile upload |
| Passwords | — Never | Chromium extensions cannot read the browser password store |
| Bookmarks, autofill, payments | — Never | Not requested or accessed |
| iCloud Keychain | — Never | Remains completely separate |
Some websites bind sessions to a specific device or browser and may ask you to sign in again after a transfer.
- macOS 13.5+
- A supported Chromium browser as the source, plus ChatGPT Codex, Cursor, Grok Bot, another supported browser, or optional Browserless Cloud as the destination
The DMG is self-contained. Node.js 24+ and Xcode Command Line Tools are required only for npm or source installation.
brew install --cask apoorvdarshan/tap/browser-cookie-bridgeHomebrew selects the correct Apple-silicon or Intel DMG, verifies its SHA-256
checksum, and installs the signed and notarized app into /Applications.
- Apple silicon DMG — M1, M2, M3, M4, and newer
- Intel DMG — Intel-based Macs
Open the DMG, drag Browser Cookie Bridge onto Applications, then open it from Applications. Current DMGs are checksum-verified, Developer ID-signed, and Apple-notarized for a standard macOS first-launch experience. The app does not require Node.js, Xcode, Terminal, or an administrator password.
Run the published package directly:
npx browser-cookie-bridge install-appNo administrator password is needed. The app is built from source on your Mac and installed in your user Applications folder. If a signed /Applications/Browser Cookie Bridge.app already exists, the CLI preserves it instead of replacing its Developer ID signature with an ad-hoc local build; use the app's built-in updater for signed releases.
All installation methods use the same bundle identifier and settings under
~/Library/Application Support/BraveCodexCookieSync. Homebrew and the DMG
install the canonical system Applications copy. Installing either after npm
does not create a separate product identity: a stale matching user Applications
copy is moved to Trash on launch, and future updates replace the same app.
View browser-cookie-bridge on npm →
git clone https://github.com/apoorvdarshan/browser-cookie-bridge.git
cd browser-cookie-bridge
npm test
npm run build:appThe final command compiles the native SwiftUI app, enables Open at login, Sync at login, and the menu-bar helper, then launches it. A first install uses ~/Applications/Browser Cookie Bridge.app without requesting administrator access. If an existing signed /Applications/Browser Cookie Bridge.app is present, the CLI keeps that system copy canonical and leaves app updates to the signed-DMG updater. Developers who intentionally need to replace it with a local ad-hoc build can pass --replace-system-from-source. Daily sync stays off until you enable it.
No browser extension is needed for this path.
Cursor support is experimental and currently limited to cookie sessions in its dedicated browser partition. The importer validates the audited Cursor schema and fails closed if Cursor changes it.
- Select a source browser and ChatGPT Codex or Cursor browser as the destination.
- Quit the destination app completely. For Codex, you can instead enable Restart Codex automatically. Closing only the app's browser panel is not enough.
- Choose Cookies. For Codex, you can also choose History URLs and Full site data. Both are excluded for Cursor until its other browser stores can be validated safely.
- Press Sync now, then reopen the destination app after the success message.
An open destination app blocks the transfer. The optional Restart Codex automatically setting applies only to a manual Codex sync: it force quits Codex, waits for its database to close, and reopens Codex only after the transfer succeeds. Cursor must be quit manually. Scheduled and login syncs never force quit either app.
No browser extension is needed for this path.
Grok Bot cannot receive a local database merge. The app writes an encrypted transfer file that you attach to any Grok Bot.
- Select a source browser and Grok Bot as the destination. The tile uses the official Grok Bot app icon.
- Keep Cookies on. History URLs and Full site data are excluded from Grok Bot transfer files.
- Optionally limit the export with Only these domains. Leave it blank to include every readable cookie.
- Press Create transfer file and choose where to save
GrokBot-Import.bcbx. - The result sheet shows a sensitivity warning and the prompt to paste. Use Reveal file or Copy prompt. Do not paste cookie values into chat.
- Attach the
.bcbxfile to any Grok Bot and paste the prompt. The bundled importer decrypts automatically—no separate key entry.
The bundle is a zip-compatible .bcbx file containing manifest.json, encrypted payload.enc, decryption.key, import.mjs, and PROMPT.txt. Cookies are encrypted with AES-256-GCM using a scrypt-derived key; the same key is stored in decryption.key inside the bundle so the importer can decrypt without user input. Treat the file as credentials—anyone with the bundle can read the cookies. The file is written with user-only permissions (0600). Daily sync and Sync at login never create Grok Bot bundles.
On the Grok Bot cloud computer the bundled importer:
- Expects you to unzip
GrokBot-Import.bcbxand runnode import.mjs. - Reads the embedded decryption key and decrypts the payload automatically. Do not print cookie names or values.
- Injects cookies into the cloud browser and reports only how many cookies were imported.
- Deletes the unzipped files and the bundle copy.
Browser-to-browser transfers use a small unpacked extension at each selected endpoint.
- Run
browser-cookie-bridge setup --no-scheduleor use the app's extension setup action. - Open the extensions page in both browsers and enable Developer mode.
- Choose Load unpacked and select the generated
extension-<browser>folder for each endpoint. - Keep both browsers open, select the same endpoints in the app, then press Sync now.
Generated extensions live under ~/Library/Application Support/BraveCodexCookieSync/ and contain a random, user-only local broker token. Do not share those folders.
This path uses the official Browserless CLI and is deliberately separate from local sync.
- Select Browserless Cloud as the destination.
- Enter your Browserless API token, cloud profile name, region, and optional domain allowlist. The token is stored in macOS Keychain; it is never written to the app configuration or command arguments.
- Quit the selected source browser so its profile can be copied consistently.
- Review the cloud warning and click Upload now.
The upload creates the named Browserless profile the first time and refreshes it on later runs. It may contain cookies, local storage, and IndexedDB; history and saved passwords are excluded. The app measures the profile, IndexedDB, local storage, and available disk space locally before capture. Progress and elapsed time remain visible, Cancel upload terminates the isolated capture process group, and the dedicated temporary workspace is removed after success, failure, timeout, or cancellation.
Browserless currently caps the serialized authenticated-profile artifact at 2 MB. A large on-disk IndexedDB does not mean all of it will be uploaded: the official CLI's --auto-fit behavior drops the heaviest origins until the artifact fits while keeping cookies. Browser Cookie Bridge reports those omissions in the final result and verifies that the named cloud profile can be read back after upload. Use the domain allowlist when you need specific sites or want a faster, smaller capture.
Browserless uploads never run from Daily sync or Sync at login. Browser Cookie Bridge disables Browserless CLI telemetry for this integration. Comet is not currently supported by the Browserless capture CLI. The default cloud timeout is 15 minutes; --timeout can override it.
The official CLI records the Browserless upload-disclaimer acceptance timestamp in ~/.browserless/config.json. Browser Cookie Bridge does not store its API token there.
| Control | What it does |
|---|---|
| Export from | Selects the browser whose data will be read |
| Import into | Selects a different browser, ChatGPT Codex, experimental Cursor browser, Grok Bot, or optional Browserless Cloud |
| Cookies | Moves cookies and supported session attributes; on by default |
| History URLs | Adds visited URLs without their original timestamps or titles |
| Daily sync | Runs at one fixed local time; off by default |
| Sync at login | Runs once whenever you sign in; on by default |
| Open at login | Starts the background app after macOS login; on by default |
| Show in menu bar | Keeps sync, status, updates, and support actions close at hand |
| Restart Codex automatically | Force quits Codex for a manual sync and reopens it only after success; off by default |
| Check for updates | Finds a newer GitHub release, verifies its DMG, and offers install + relaunch |
Automation uses the saved source, destination, and data choices for local transfers. A scheduled embedded-browser sync safely exits without making changes when its destination app is open. Browserless cloud uploads and Grok Bot .bcbx exports are always manual.
browser-cookie-bridge install-app [--no-open] [--replace-system-from-source]
browser-cookie-bridge setup [--hour 9] [--minute 0] [--no-schedule]
browser-cookie-bridge preferences --source brave --target codex --cookies on --history off --site-storage off --auto-restart-codex off --auto-restart-both off [--grok-bot-domains example.com]
browser-cookie-bridge sync [--timeout 300] [--allow-cloud-upload] [--output /path/GrokBot-Import.bcbx]
browser-cookie-bridge browserless-preflight
browser-cookie-bridge doctor
browser-cookie-bridge enable-login-sync
browser-cookie-bridge disable-login-sync
browser-cookie-bridge enable-app-login
browser-cookie-bridge disable-app-login
browser-cookie-bridge remove-scheduleSupported source IDs are brave, chrome, edge, arc, vivaldi, opera, and comet. Target IDs are the same plus codex, cursor, browserless, and grok-bot. The same browser cannot be both endpoints. Cursor import currently supports cookies only. Grok Bot export requires --output /path/GrokBot-Import.bcbx and writes cookies only; --grok-bot-domains optionally limits the bundle. The bundle includes an embedded decryption key—treat it as credentials and never paste cookie values into chat. Browserless requires BROWSERLESS_TOKEN and the explicit --allow-cloud-upload flag; the native app supplies the token from Keychain without placing it in the OS command line or app configuration.
| Path | Transfer method |
|---|---|
| Browser → browser | Unpacked extensions connect to a short-lived broker on IPv4 loopback. Selected data stays in memory and is never written to logs. |
| Browser → Codex / Cursor | The app reads the selected local Chromium profile, creates a consistent destination SQLite backup, merges cookies into a working copy, validates it, then replaces only the embedded browser's cookie database atomically. Codex also supports optional history and full site data. Cursor import is experimental and limited to the dedicated browser-partition cookie store. |
| Browser → Grok Bot | The app reads the selected local Chromium profile, encrypts cookie sessions into a .bcbx bundle with an embedded decryption key, and writes that file locally. You attach it to a Grok Bot; the bundled importer decrypts and injects cookies on the cloud computer only. |
| Browser → Browserless | The bundled official Browserless CLI copies a closed local profile, captures cookies/local storage/IndexedDB, and uploads it directly to the selected Browserless region. |
The broker validates a random token and extension origin, limits payload size, and normally exits after five minutes. Only the endpoints selected in the app respond to a transfer.
- Cookie values and history URLs are never logged. Never paste cookie values into chat.
- Browser-to-browser data is held only in broker memory.
- Grok Bot
.bcbxfiles encrypt cookie payloads with AES-256-GCM but include the decryption key inside the bundle (decryption.key). Treat the entire file as credentials—anyone with the bundle can read the cookies. Do not share it or paste cookie values into chat. The bundled importer decrypts automatically, reports only import counts, then deletes the unzipped files and the bundle copy. Legacy v1 bundles without an embedded key still prompt for a separate passphrase. - Direct-import backups are stored with user-only permissions under
~/Library/Application Support/BraveCodexCookieSync/backups/codexorbackups/cursor; the newest 14 per destination are retained. - Full site-data import is opt-in for Codex and requires both Codex and the source browser to be closed. It replaces compatible origin-storage directories rather than attempting an unsafe LevelDB merge; the previous directories are included in the same backup.
- The app refuses unknown destination database schemas instead of guessing and writes only to Cursor's dedicated
Partitions/cursor-browserprofile, never Cursor's main application cookie store. - Direct imports currently store imported cookie values in SQLite's plaintext
valuecolumn with an emptyencrypted_value. Those imported rows can therefore remain readable to software running as your macOS user until the website refreshes them. - Anyone who can use your logged-in macOS account or modify a generated extension may be able to access transferred browser sessions.
- The optional Browserless destination sends authenticated state to Browserless under their terms and privacy practices. Its API token is stored in macOS Keychain, uploads are manual, and Browserless CLI telemetry is disabled by the app.
Cookies are credentials. Review the source, protect your macOS account, and transfer only between profiles you trust.
Found a vulnerability? Read SECURITY.md and report it privately. Do not open a public issue or include real browser data.
Pushing a semantic version tag runs tests, validates that package and app versions match, builds separate Apple-silicon and Intel DMGs, publishes to npm, and creates a GitHub Release with the tarball, DMGs, and SHA-256 files attached.
npm run release:check
git tag vX.Y.Z
git push origin vX.Y.ZA normal branch push does not publish anything.
Contributions are welcome. See CONTRIBUTING.md for local setup, validation, privacy requirements, and pull request guidance.
If Browser Cookie Bridge is useful to you:
- ⭐ Star the repository
- ⬇️ Download the latest DMG
- 🍺 Install from Homebrew
- 📦 Install from npm
- 🐛 Report a bug — never include cookie values or tokens
- ☕ Support on Ko-fi
- 𝕏 Follow @apoorvdarshan
- 🚀 View on Product Hunt
Product screenshots, the transparent cookie logo, and launch artwork live in marketing/.
The product landing page, documentation overview, Privacy Policy, and Terms are live at cookiebridge.apoorvdarshan.com and live in web/. Preview them locally at http://localhost:3000:
npm run webMIT © 2026 Apoorv Darshan
Not affiliated with Brave, Google, Microsoft, The Browser Company, Vivaldi, Opera, Perplexity, OpenAI, Cursor, xAI, or Browserless. Their names and marks belong to their respective owners.