Skip to content

Repository files navigation

chromium-migrate — migrate Chromium browser profiles between browsers

chromium-migrate logo

chromium-migrate

Production-grade CLI to migrate Chromium browser profiles between browsers
Chrome · Brave · Arc · Edge · Vivaldi · Opera · Chromium · and more

MIT License Node.js 22+ TypeScript GitHub stars Issues

Quick start · Features · Browsers · CLI · Architecture · Security · Contributing


Why chromium-migrate?

Switching browsers usually means weeks of friction: lost bookmarks, dead sessions, re-typing passwords, and hunting down extensions.

chromium-migrate copies a full Chromium user profile from one browser to another — locally, safely, and verifiably.

Safe by default Target profile is backed up before any write. Rollback in one command.
Secrets stay secret Passwords & cookies are re-encrypted in memory. Never logged. Never written plaintext.
Browser-agnostic Registry-driven paths for Chrome, Brave, Arc, Edge, Vivaldi, Opera, and more.
Production CLI Progress UI, dry-run estimates, JSON/Markdown/HTML reports, batched SQLite I/O.
chromium-migrate migrate --from arc --to brave -y

Features

Capability Details
Bookmarks Full folder tree, order, dates; Arc sidebar favorites imported when source is Arc
History & downloads Large profiles (100k+ history rows) via batched SQLite
Passwords Keychain / Safe Storage re-encryption on macOS
Cookies Network/Cookies layout + encrypted value re-keying
Autofill Addresses, form history, masked card metadata
Extensions Packages + local/sync settings + compatibility notes
Sessions Current / Last Session & Tabs
Permissions Camera, mic, notifications, location, and more
Preferences Compatible Chromium prefs (theme, startup, search, zoom, …)
Favicons / Top Sites Databases copied and count-verified
Dry-run Item counts, disk estimate, unsupported surface list — zero writes
Reports JSON · Markdown · HTML under reports/

Supported browsers

ID Browser Notes
chrome Google Chrome
chrome-canary Chrome Canary
chromium Chromium
brave Brave
arc Arc Spaces/Boosts not portable; sidebar → bookmarks
edge Microsoft Edge
vivaldi Vivaldi
opera Opera
opera-gx Opera GX
thorium Thorium
dia Dia Experimental
chromium-migrate browsers    # paths for your OS
chromium-migrate profiles    # installed profiles + sizes

Add another Chromium browser with a single entry in src/browsers/registry.ts.


Install

Prerequisites

  • Node.js 22+
  • Build tools for native modules (better-sqlite3, keytar)
  • On macOS: Xcode Command Line Tools
git clone https://github.com/IshankDev/chromium-migrate.git
cd chromium-migrate
npm install
npm run build
npm link   # installs `chromium-migrate` and `cmigrate`
# without linking
node dist/cli.js --help
npm run dev -- profiles
# rebuild natives if install fails
npm rebuild better-sqlite3 keytar

The first password/cookie migration may prompt for OS keychain access — allow it for Safe Storage.


Quick start

# 1. Discover
chromium-migrate profiles

# 2. Preview (no writes)
chromium-migrate dry-run --from arc --to brave

# 3. Migrate (terminates browsers, backs up target)
chromium-migrate migrate --from arc --to brave -y

# 4. Verify
chromium-migrate verify --from arc --to brave

# 5. Something wrong? roll back
chromium-migrate rollback

More examples

chromium-migrate migrate --from chrome --to brave -y
chromium-migrate migrate --from brave --to edge --source-profile "Profile 1"
chromium-migrate migrate --from edge --to vivaldi --no-passwords
chromium-migrate dry-run --from opera --to chrome
chromium-migrate backup create --browser brave -y

CLI

Command Description
migrate Migrate --from--to
verify Compare source vs target counts
backup create / backup list Snapshot a profile
rollback [id] Restore the latest (or given) backup
dry-run Estimate without writing
profiles List discovered profiles
browsers List supported browsers + expected paths
report Show generated reports
clean Prune old backups / logs / reports

Binaries: chromium-migrate · cmigrate · legacy arc2brave

Flags

Flag Description
-f, --from <browser> Source browser id
-t, --to <browser> Target browser id
--source-profile / --target-profile Profile folder (default Default)
--no-passwords / --no-cookies / … Skip individual stages
--skip-backup Skip target snapshot
-y, --terminate Quit browsers without prompting
-v, --verbose Debug logging

Platform support

Platform Discovery DB copy Password / cookie re-encrypt
macOS ✅ Keychain + AES-128-CBC
Linux ⚠️ via keytar; may copy blobs as-is
Windows ❌ DPAPI not yet — blobs copied as-is

Paths use portable {home} templates — never hardcoded to a username or machine.

export CHROMIUM_MIGRATE_HOME=/path/to/workdir   # logs, backups, reports

Architecture

flowchart LR
  A[Source browser<br/>profile] --> B[Discovery & preflight]
  B --> C[Backup target]
  C --> D[Stage migrators]
  D --> E[Re-encrypt secrets]
  E --> F[Verify + reports]
  F --> G[Target browser<br/>profile]
Loading
src/
  browsers/     Registry · discovery · process control
  migration/    Stage migrators · orchestrator · verify
  services/     Backup · crypto / Safe Storage
  database/     Batched transactional SQLite helpers
  commands/     CLI (commander)
  reports/      JSON / Markdown / HTML
  utils/        Logging · progress UI · helpers

Security

chromium-migrate is designed for local migration of your own profiles.

  • Decrypt only in process memory for re-encryption
  • Never print, log, or persist plaintext passwords / cookie values
  • Redacted logging by default
  • Prefer quitting browsers cleanly before migrate

See SECURITY.md to report vulnerabilities privately.

Not portable

  • Browser-specific UI (Arc Spaces / Boosts, Vivaldi panels, Opera workspaces)
  • Cloud sync / account session state
  • Full credit-card PANs (masked / tokenized metadata only)

Development

npm install
npm run typecheck
npm test
npm run build
npm run dev -- browsers

Roadmap

  • Windows DPAPI password/cookie re-encryption
  • Stronger Linux secret-service integration
  • Firefox → Chromium adapters (experimental)
  • npm package publish + Homebrew formula
  • Guided TUI mode

Vote with 👍 on issues — PRs welcome.


Contributing

We welcome browser definitions, platform crypto work, tests, and docs.

  1. Read CONTRIBUTING.md
  2. Follow the Code of Conduct
  3. Open a PR with clear test notes

⭐ Star the repo if this saved you a weekend of re-logins.


License

MIT © chromium-migrate contributors

About

Production-grade CLI to migrate Chromium browser profiles between Chrome, Brave, Arc, Edge, Vivaldi, Opera, and more

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages