npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

browser-cookie-bridge

v1.5.10

Published

Local-first cookie and session transfer for macOS with optional Browserless upload

Readme

Move signed-in sessions locally—or explicitly upload one to Browserless Cloud.


Version 1.5.2: Grok Bot .bcbx bundles 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 .bcbx export. Cursor is destination-only and currently imports cookie sessions into its dedicated browser partition. Attach the .bcbx file 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.

Why Browser Cookie Bridge

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.

Windows waitlist

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.

Features

  • 🍪 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-browser profile 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.

What it transfers

| 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.

Requirements

  • 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.

Installation

Via Homebrew — recommended

brew install --cask apoorvdarshan/tap/browser-cookie-bridge

Homebrew selects the correct Apple-silicon or Intel DMG, verifies its SHA-256 checksum, and installs the signed and notarized app into /Applications.

Download a DMG — recommended

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.

Via npm

Run the published package directly:

npx browser-cookie-bridge install-app

No 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 →

From source

git clone https://github.com/apoorvdarshan/browser-cookie-bridge.git
cd browser-cookie-bridge
npm test
npm run build:app

The 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.

Setup

Browser → ChatGPT Codex or Cursor

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.

  1. Select a source browser and ChatGPT Codex or Cursor browser as the destination.
  2. Quit the destination app completely. For Codex, you can instead enable Restart Codex automatically. Closing only the app's browser panel is not enough.
  3. 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.
  4. 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.

Browser → Grok Bot (encrypted .bcbx)

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.

  1. Select a source browser and Grok Bot as the destination. The tile uses the official Grok Bot app icon.
  2. Keep Cookies on. History URLs and Full site data are excluded from Grok Bot transfer files.
  3. Optionally limit the export with Only these domains. Leave it blank to include every readable cookie.
  4. Press Create transfer file and choose where to save GrokBot-Import.bcbx. The source browser can stay open: the app copies its cookie database itself before the export runs.
  5. 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.
  6. Attach the .bcbx file to any Grok Bot and paste the prompt. The bundled importer decrypts automatically—no separate key entry.

If the app shows Grant Full Disk Access to read Brave cookies (Create is blocked until then), macOS is refusing to let it read the browser's cookie store (EPERM: operation not permitted). Add Browser Cookie Bridge under System Settings › Privacy & Security › Full Disk Access, then quit and reopen the app. Quitting the browser does not fix this. The doctor command prints the same check as Source cookie store access.

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:

  1. Expects you to unzip GrokBot-Import.bcbx and run node import.mjs.
  2. Reads the embedded decryption key and decrypts the payload automatically. Do not print cookie names or values.
  3. Injects cookies into the cloud browser and reports only how many cookies were imported.
  4. Deletes the unzipped files and the bundle copy.

Browser → browser

Browser-to-browser transfers use a small unpacked extension at each selected endpoint.

  1. Run browser-cookie-bridge setup --no-schedule or use the app's extension setup action.
  2. Open the extensions page in both browsers and enable Developer mode.
  3. Choose Load unpacked and select the generated extension-<browser> folder for each endpoint.
  4. 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.

Browser → Browserless Cloud (optional)

This path uses the official Browserless CLI and is deliberately separate from local sync.

  1. Select Browserless Cloud as the destination.
  2. 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.
  3. Quit the selected source browser so its profile can be copied consistently.
  4. 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.

Usage

| 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.

CLI

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-schedule

Supported 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.

How it works

| 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.

Security & privacy

  • 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 .bcbx files 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/codex or backups/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-browser profile, never Cursor's main application cookie store.
  • Direct imports currently store imported cookie values in SQLite's plaintext value column with an empty encrypted_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.

Releases

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.Z

A normal branch push does not publish anything.

Contributing

Contributions are welcome. See CONTRIBUTING.md for local setup, validation, privacy requirements, and pull request guidance.

Support

If Browser Cookie Bridge is useful to you:

Product screenshots, the transparent cookie logo, and launch artwork live in marketing/.

Website

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 web

Star History

License

MIT © 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.