{"id":18132796,"url":"https://github.com/madlittlemods/pass-import-chrome","last_synced_at":"2026-05-16T22:02:58.577Z","repository":{"id":223394272,"uuid":"759700972","full_name":"MadLittleMods/pass-import-chrome","owner":"MadLittleMods","description":"Import passwords from Chrome to pass (Password Store)","archived":false,"fork":false,"pushed_at":"2024-02-21T14:31:50.000Z","size":53,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-12T22:18:15.990Z","etag":null,"topics":["chrome","pass","password","password-store"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MadLittleMods.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-19T07:04:43.000Z","updated_at":"2024-02-20T01:13:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"cc64bc72-f94f-42fd-ba46-9d641bed1e35","html_url":"https://github.com/MadLittleMods/pass-import-chrome","commit_stats":null,"previous_names":["madlittlemods/pass-import-chrome"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MadLittleMods%2Fpass-import-chrome","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MadLittleMods%2Fpass-import-chrome/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MadLittleMods%2Fpass-import-chrome/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MadLittleMods%2Fpass-import-chrome/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MadLittleMods","download_url":"https://codeload.github.com/MadLittleMods/pass-import-chrome/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509237,"owners_count":20950232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome","pass","password","password-store"],"created_at":"2024-11-01T13:05:42.458Z","updated_at":"2026-05-16T22:02:58.529Z","avatar_url":"https://github.com/MadLittleMods.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Google Chrome to `pass` Password Store Importer\n\nThis project is a tool to import your Google Chrome passwords into `pass` password\nstore. The scripts are fairly simple and should be easy to modify to fit your needs.\n\nIf you're unfamiliar with [zx2c4's `pass` (Password Store)](https://www.passwordstore.org/), see this [introductory video](https://www.youtube.com/watch?v=FhwsfH2TpFA).\n\n![Showing off the import process in the terminal (see tool usage below)](https://gist.githubusercontent.com/MadLittleMods/60787453ec9dc9bc5c3277fa0bd97790/raw/9e0c9637dce16b4d26e877233fb235859635f84e/pass-import-chrome-demo.svg)\n\n## Setup\n\nInstall [Node.js](https://nodejs.org/) (tested with Node.js `v20.11.0`)\n\n```sh\n$ git clone git@github.com:MadLittleMods/pass-import-chrome.git\n$ cd pass-import-chrome\n$ npm install\n```\n\n## Tool usage\n\n### Step #1: Export Chrome passwords to a CSV file\n\nInstructions: **Chrome** -\u003e **Settings** -\u003e **Autofill and passwords** -\u003e **Google password manager** -\u003e **Settings** -\u003e **Export passwords** -\u003e **Download file**\n\nOr you can simply visit `chrome://password-manager/settings` and **Export passwords** -\u003e **Download file**\n\nThis will give you a `Chrome Passwords.csv` file.\n\n### Step #2: Generate `pass` entry JSON from Chrome CSV\n\nThis is an interactive script that will prompt you to resolve conflicts and provide\naliases where there are multiple logins for the same domain.\n\n(feel free just to try it out with the dummy data in `test/dummy-chrome-passwords.csv`)\n\n```sh\nFORCE_COLOR=1 node generate-pass-entry-json-from-chrome-csv.js --chrome-csv test/dummy-chrome-passwords.csv \u003e ./chrome-pass-entries.json\n```\n\nYou can also provide `--login-alias-json` file to preload the list of suggested aliases\nto resolve conflicts. The script will also spit out an updated alias list when you're\nfinished or decide to bail early to use in the next run.\n\n```sh\nFORCE_COLOR=1 node generate-pass-entry-json-from-chrome-csv.js --chrome-csv test/dummy-chrome-passwords.csv --login-alias-json login-aliases.json  \u003e ./chrome-pass-entries.json\n```\n\n### Step #3: Import `pass` entry JSON into `pass` password store\n\n```sh\nnode import-pass-entry-json.js --pass-entry-json chrome-pass-entries.json\n```\n\nExample `pass` entry output from this script below. There isn't a standard format for\n`pass` entries but this tries to follow the conventions of the `pass` community and\nshould work with [`browserpass`](https://github.com/browserpass/browserpass-extension)\nor [`passff`](https://github.com/passff/passff) browser extensions.\n\n```\n\u003cpassword\u003e\nlogin: \u003clogin\u003e\nemail: \u003cemail\u003e\nusername: \u003cusername\u003e\nurl: \u003curl\u003e\nurl: \u003curl\u003e\nurl: \u003curl\u003e\ncomments: \u003ccomments\u003e\n```\n\nThe script will also print out some git commands to revert the import process if you see anything wrong.\n\n## FAQ\n\n### How is this different from the alternative projects?\n\nBoth of the alternative projects put your login/email/username\n(ex. `mail.google.com/personal@gmail.com.gpg`) in the file name which might be ok for you\n(depending on your threat model) but is also a meta data leak. This project aims to only\ninclude the host name (so\n[`browserpass`](https://github.com/browserpass/browserpass-extension?tab=readme-ov-file#organizing-password-store)\nstill works) or your own alias like `personal`, `work`, etc in the file name\n(ex. `mail.google.com/personal.gpg`)\n\n- https://github.com/roddhjav/pass-import\n- https://gist.github.com/rounakdatta/eb6d0f13817eed56ac98b4f776f49428\n\n### Why two separate commands?\n\nSo you can first generate the `chrome-pass-entries.json` file and manually review it before\nimporting everything to your password store.\n\n### Piping/composing with other commands\n\n`FORCE_COLOR=1` is necessary to force color text output when piping (this option comes\nfrom\n[`chalk`](https://github.com/chalk/chalk/tree/v4.1.2?tab=readme-ov-file#chalksupportscolor)).\nThis is because when piping, the stdout/stderr that the program is outputting to isn't\nconsidered an interactive terminal (TTY) where color is supported so it needs to be forced.\n\n```sh\nFORCE_COLOR=1 node generate-pass-entry-json-from-chrome-csv.js --chrome-csv test/dummy-chrome-passwords.csv --login-alias-json login-aliases.json | jq .\n```\n\nWhen using `npm run \u003ccommand\u003e` instead of calling the scripts directly, `--silent` is\nnecessary to suppress the default `npm` run command output to `stdout` which messes with\ndata we're trying to pipe. Arguments for the script itself should be passed after `--` (see below).\n\n```sh\nnpm run generate-pass-entry-json-from-chrome-csv --silent -- --chrome-csv test/dummy-chrome-passwords.csv\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadlittlemods%2Fpass-import-chrome","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmadlittlemods%2Fpass-import-chrome","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadlittlemods%2Fpass-import-chrome/lists"}