Local-only Windows desktop utility for backing up and restoring Chromium-based browser profiles for personal migration between your own devices.
This project is designed for:
- Google Chrome
- Brave
- Microsoft Edge
It is designed for personal backup and restore only. It does not send data over email, HTTP, cloud storage, webhooks, or any other network path.
Installation status:
- Source execution is supported with
run_windows.ps1orpy -3 main.py. - Windows exe packaging is supported through
build_exe.ps1. - No installer, MSI, or signed binary is published in this repository.
Release status:
- As of August 17, 2026, no GitHub Release is published.
- A Release should be created only after a versioned tag and downloadable build artifact are prepared.
Verification status:
- Local Windows source-run and exe-launch smoke verification have been completed.
test_profile_lock.pycovers profile lock set/verify/remove behavior.- Backup and restore validation has been exercised on maintainer-owned Chrome test profiles only.
Not yet verified:
- Brave end-to-end backup and restore
- Edge end-to-end backup and restore
- Automated GUI end-to-end coverage
- Local-only file operations. No upload, email, remote sync, or API calls.
- Windows-first behavior for standard Chromium user data directories.
- Backup and restore both warn the user to fully close the browser first.
- The app checks for running browser processes and common locked profile files before changing anything.
- Restore includes a preview step so the user can see what would be overwritten.
- If restoring over an existing profile, the app creates a rollback snapshot archive before copying files.
- Optional password-based ZIP encryption is supported for the backup archive.
- Chrome:
%LOCALAPPDATA%\Google\Chrome\User Data - Brave:
%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data - Edge:
%LOCALAPPDATA%\Microsoft\Edge\User Data
The app scans profile folders such as:
DefaultProfile 1Profile 2Guest ProfileSystem Profile
- Detect installed supported browsers
- Enumerate available local browser profiles
- Back up one selected profile at a time
- Choose backup scope:
- Full profile backup
- Settings-only backup using a conservative allowlist
- Optional exclusion of common cookies, sessions, and login databases
- Choose backup destination folder manually
- Create compressed ZIP archives
- Optional password-based AES ZIP encryption
- Create a per-backup folder containing the ZIP archive and
manifest.json - Embed
manifest.jsoninside the archive too - Dry-run backup and dry-run restore
- Restore preview before overwrite
- Recent backup archive picker on the Restore tab
- Open the backup destination, restore archive folder, and most recent backup folder directly from the UI
- Remember recent paths and major UI selections between launches
- Restore into:
- an existing profile folder
- a new profile folder under the selected browser's user data directory
- Automatic rollback snapshot when restoring over a non-empty destination profile
- Local Profile Lock tab for password-gated launches through this app
- User-readable logging to the window and to
chromium_profile_backup.log
browser_detection.pyprofile_discovery.pyprofile_lock.pybackup_engine.pyrestore_engine.pymanifest.pyencryption.pyui.pymain.pytest_profile_lock.py
- Windows 10 or Windows 11
- Python 3.11 or newer recommended
가장 쉬운 실행 방법:
powershell -ExecutionPolicy Bypass -File .\run_windows.ps1또는 프로젝트 폴더에서 Launch Chromium Profile Backup Tool.cmd를 더블클릭해도 됩니다.
이 스크립트는 다음을 자동으로 처리합니다.
- Windows Python 찾기
.venv가상환경 생성requirements.txt의존성 설치main.py실행
옵션:
powershell -ExecutionPolicy Bypass -File .\run_windows.ps1 -SkipInstall
powershell -ExecutionPolicy Bypass -File .\run_windows.ps1 -ForceReinstall
powershell -ExecutionPolicy Bypass -File .\run_windows.ps1 -NoLaunch
powershell -ExecutionPolicy Bypass -File .\run_windows.ps1 -PythonPath "C:\full\path\to\python.exe"Install dependencies:
py -3 -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txtRun the app:
py -3 main.pyexe 파일로 패키징하려면:
powershell -ExecutionPolicy Bypass -File .\build_exe.ps1
powershell -ExecutionPolicy Bypass -File .\build_exe.ps1 -PythonPath "C:\full\path\to\python.exe"성공하면 dist\ChromiumProfileBackupTool.exe가 생성됩니다.
- Close the browser fully before starting.
- Click
Detect Installed Browsers. - Choose a browser and one profile.
- Choose:
- full profile backup, or
- settings-only backup
- Optionally enable exclusion of common cookies, sessions, and login databases.
- Choose a destination folder.
- Optionally enter a password to encrypt the archive.
- Use
Preview Backupto dry-run first. - Use
Create Backupwhen the preview looks right.
- Close the destination browser fully before starting.
- Choose the backup ZIP archive.
- Enter the password if the archive is encrypted.
- Choose the destination browser.
- Choose either:
- an existing profile folder, or
- a new profile folder name
- Use
Preview Restorefirst. - Review overwrite warnings carefully.
- Run restore only after confirming the preview.
Use this when you want a local password prompt before launching a selected browser profile from this tool.
- Open the
Profile Locktab. - Choose a browser and profile, for example Chrome
Profile 2 | test. - Enter and confirm a profile-lock password.
- Click
Set / Change Password. - Later, enter the password and click
Unlock and Launch Profile.
Important: this is a convenience gate inside this app only. It does not lock Chrome's native profile picker, direct browser shortcuts, Windows user accounts, or the profile folder on disk. Use separate Windows accounts or full-disk/profile-folder encryption if you need a real access-control boundary.
Profile Lock stores local salted password hashes in profile_locks.json. When running
from source, that file lives in the project folder. When running the packaged exe, it is
stored next to ChromiumProfileBackupTool.exe.
Each backup writes:
manifest.jsonnext to the ZIP archive inside that backup's timestamped output foldermanifest.jsoninside the ZIP archive
The manifest includes:
- browser name
- browser key
- profile name
- profile folder name
- source path
- creation timestamp
- backup scope
- included categories
- excluded categories
- browser version if detected
- archive name
- whether encryption was used
- notes and warnings
The app uses a single desktop window with:
- a top warning banner explaining that the browser must be closed and that the tool is local-only
- a
Backuptab with browser selection, profile selection, scope controls, destination folder picker, password box, and preview/create buttons - a
Restoretab with archive picker, password box, destination browser selector, restore target selector, preview button, and restore button - a
Profile Locktab with browser/profile selection, local password setup, lock removal, and password-gated launch - a lower activity log pane showing readable progress and errors
- Chromium profile internals change over time. A backup from one major version may not restore cleanly into another.
- Cross-browser restore is possible at the file level but may be incompatible because Chrome, Brave, and Edge can diverge in profile behavior.
Settings-onlymode uses a conservative allowlist. Some browser settings or extension-specific data may live outside the included files.Exclude cookies / sessions / login tokensmode excludes common known stores, but exact file names and storage locations vary by Chromium version and by extension.- Some extensions keep data in storage locations that are not easy to classify safely without making risky assumptions.
- The tool does not decrypt browser-protected secrets and does not attempt to bypass browser security.
- Profile Lock is not a Chromium-native password feature. Chrome's own profile picker can still open profiles unless you separately restrict access at the Windows account or filesystem level.
- The tool expects standard Windows profile locations. Non-standard portable installs are out of scope unless their profile folders are copied manually outside the app.
If you want a simple double-click workflow, you can package this script with PyInstaller later:
pip install pyinstaller
pyinstaller --noconfirm --onefile --windowed main.pyThat is optional. The application works directly with Python as-is.