The desktop vault (Windows, macOS, & Linux).
Go to file
Oscar Hinton d7674f5c91
Update (#1531)
2022-05-05 15:06:09 -04:00
.github Rust improvements (#1495) 2022-05-05 16:01:09 +02:00
.husky Make husky pre-commit hook executable (#1295) 2022-02-08 08:33:25 +10:00
.vscode Apply Prettier (#1202) 2021-12-20 15:47:17 +01:00
desktop_native Rust improvements (#1495) 2022-05-05 16:01:09 +02:00
jslib@80c834b52a [PS-106] update jslib (#1530) 2022-05-05 17:11:39 +02:00
resources Update macOS icon to follow Big Sur design (#837) 2022-03-29 20:56:03 +02:00
scripts Add utils for testing updating processes (#1448) 2022-03-24 21:23:29 +01:00
src [PS-540] Accessibility: remove `appBlurClick`, add `aria-expanded` to cog options, links to buttons, fix unsufficient focus indication (#1514) 2022-05-05 16:36:46 +02:00
stores [Help] Update links to new pattern (#1300) 2022-02-08 18:02:17 -06:00
.editorconfig Add Prettier configuration (#1201) 2021-12-20 14:17:39 +01:00
.eslintignore Rust improvements (#1495) 2022-05-05 16:01:09 +02:00
.eslintrc.json Add eslint (#1369) 2022-02-24 20:50:19 +01:00
.git-blame-ignore-revs Fix .git-blame-ignore-revs filename (#1207) 2021-12-21 17:05:54 +01:00
.gitattributes Apply Prettier (#1202) 2021-12-20 15:47:17 +01:00
.gitignore Add script for downloading legacy safari extension (#796) 2021-03-19 17:18:48 +01:00
.gitmodules submodule via https 2018-02-19 16:26:53 -05:00
.nvmrc Bump node to v16 (#1189) 2021-12-13 17:16:44 +01:00
.prettierignore [BEEEP] Add native rust module (#1379) 2022-04-05 16:54:44 +02:00
.prettierrc.json Add Prettier configuration (#1201) 2021-12-20 14:17:39 +01:00 Contribution Documentation edits (#1486) 2022-04-21 08:02:41 -04:00
LICENSE.txt license and contrib 2018-01-26 16:07:42 -05:00 Update (#1531) 2022-05-05 15:06:09 -04:00 Update (#1411) 2022-03-15 15:56:26 -04:00
crowdin.yml Updating the Crowin sync process (#1144) 2021-11-05 10:59:21 -07:00
electron-builder.json Updated publisher to use generic (#1529) 2022-05-05 09:51:17 -05:00
package-lock.json [EC-163] Undo move to rust implementation (#1509) 2022-05-02 12:39:38 +02:00
package.json [EC-163] Undo move to rust implementation (#1509) 2022-05-02 12:39:38 +02:00
sign.js Add eslint (#1369) 2022-02-24 20:50:19 +01:00
tsconfig.json Apply Prettier (#1202) 2021-12-20 15:47:17 +01:00
tsconfig.renderer.json Apply Prettier (#1202) 2021-12-20 15:47:17 +01:00
webpack.main.js Add keytar to externals (#1520) 2022-05-03 11:03:21 +02:00
webpack.renderer.js [bug] Adjust mode in render webpack.config to variable (#1473) 2022-04-04 10:45:35 -05:00

Github Workflow build on master Crowdin Join the chat at


This repository is archived, please go to for future development.

Bitwarden Desktop Application


The Bitwarden desktop app is written using Electron and Angular. The application installs on Windows, macOS, and Linux distributions.

Desktop Vault



  • Node.js v16.13.1 (LTS) or greater
  • NPM v8
  • Windows:
    • To compile the native node modules used in the app you will need the Visual C++ toolset, available through the standard Visual Studio installer. You will also need to install the Microsoft Build Tools 2015 and Windows 10 SDK 17134 as additional dependencies in the Visual Studio installer.
  • Linux:
    • The following packages build-essential libsecret-1-dev libglib2.0-dev

Run the app

npm ci
npm run electron

Debug Native Messaging

Native Messaging (communication with the browser extension) works by having the browser start a lightweight proxy application baked into our desktop binary. To setup an environment which allows for easy debugging you will need to build the application for distribution, i.e. npm run dist:<platform>, start the dist version and enable desktop integration. This will write some manifests to disk, Consult the native manifests documentation for more details of the manifest format, and the exact locations for the different platforms. Note that disabling the desktop integration will delete the manifests, and the files will need to be updated again.

The generated manifests are pre-configured with the production ID for the browser extensions. In order to use them with the development builds, the browser extension ID of the development build needs to be added to the allowed_extensions section of the manifest. These IDs are generated by the browser, and can be found in the extension settings within the browser.

It will then be possible to run the desktop application as usual using npm run electron and communicate with the browser.

We're Hiring!

Interested in contributing in a big way? Consider joining our team! We're hiring for many positions. Please take a look at our Careers page to see what opportunities are currently open as well as what it's like to work at Bitwarden.


Code contributions are welcome! Please commit any pull requests against the master branch. Learn more about how to contribute by reading the file.

Security audits and feedback are welcome. Please open an issue or email us privately if the report is sensitive in nature. You can read our security policy in the file.


We recently migrated to using Prettier as code formatter. All previous branches will need to updated to avoid large merge conflicts using the following steps:

  1. Check out your local Branch
  2. Run git merge b4df834b16d4f5d4162a926a5a308bdb3ebc718b
  3. Resolve any merge conflicts, commit.
  4. Run npm run prettier
  5. Commit
  6. Run git merge -Xours 521feae535d83166e620c3c28dfc3e7b0314a00e
  7. Push

Git blame

We also recommend that you configure git to ignore the prettier revision using:

git config blame.ignoreRevsFile .git-blame-ignore-revs