Source: https://seerepo.com/r/bitwarden/clients/built
Markdown source: https://seerepo.com/r/bitwarden/clients/built.md
Description: clients is a TypeScript repo built with Angular, Koa, @koa/router, Electron, Lit, and 3 more. It stores its data in SQLite.

# What is clients built with?

clients is a TypeScript repo built with Angular, Koa, @koa/router, Electron, Lit, and 3 more. It stores its data in SQLite, signs people in with zxcvbn, pbkdf2, and oauth4webapi, makes its content with papaparse, is tested with jest-mock-extended, Jest, @nx/jest, jest-preset-angular, jsdom, and 1 more, deploys with tracing, tracing-subscriber, tracing-oslog, and electron-log, and uses lowdb, rusqlite, and electron-store. It has 1,071,024 written lines, with 1,768 test files.

Read on November 9, 2026, at commit e3d0bc5.

Repository: https://github.com/bitwarden/clients

## Frontend (/)

### The base

- **Angular**: 287 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

### Interface

- **[angular](https://seerepo.com/uses/angular)**: 12 files
- **[Chart.js](https://seerepo.com/uses/chartjs)**: 2 files
- **chartjs-adapter-date-fns**: 1 file

## Backend (/)

### The base

- **[Koa](https://seerepo.com/uses/koa)**: [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Sign-in

- **[zxcvbn](https://seerepo.com/uses/zxcvbn)**: 2 files

## Support (/)

### The base

- **@koa/router**: 1 file
- **[Electron](https://seerepo.com/uses/electron)**: 1 file

### Content

- **[papaparse](https://seerepo.com/uses/papaparse)**: 2 files

### Testing

- **jest-mock-extended**: 115 files
- **Jest**: 2 files
- **@nx/jest**: 1 file
- **jest-preset-angular**: 1 file
- **jsdom**: 1 file

### Tools

- **type-fest**: 4 files
- **Storybook**: 3 files
- **commander**: 2 files
- **typescript-eslint**: 2 files
- **concurrently**: 1 file
- **TypeScript**: 1 file
- **Webpack**: 1 file

### Other

- **rxjs**: 185 files
- **core-js**: 2 files
- **util**: 1 file
- **zone.js**: 1 file

## Frontend (apps/browser)

### The base

- **Angular**: 159 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **[angular](https://seerepo.com/uses/angular)**: 15 files
- **@webcomponents/custom-elements**: 3 files
- **tabbable**: 2 files

## Support (apps/browser)

### The base

- **[Lit](https://seerepo.com/uses/lit)**: 4 files

### Testing

- **jest-mock-extended**: 144 files

### Tools

- **@ngtools/webpack**: 1 file
- **copy-webpack-plugin**: 1 file
- **html-webpack-plugin**: 1 file
- **mini-css-extract-plugin**: 1 file
- **tsconfig-paths-webpack-plugin**: 1 file
- **type-fest**: 1 file
- **Webpack**: 1 file

### Other

- **rxjs**: 176 files
- **core-js**: 2 files
- **tldts**: 1 file
- **zone.js**: 1 file

## Frontend (apps/browser/src/autofill/content/components)

### Styles

- **@emotion/css**: 59 files

## Support (apps/browser/src/autofill/content/components)

### The base

- **[Lit](https://seerepo.com/uses/lit)**: 74 files

### Other

- **@lit-labs/signals**: 4 files

## Backend (apps/cli)

### The base

- **[Koa](https://seerepo.com/uses/koa)**: 2 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Data

- **lowdb**: 1 file

## Support (apps/cli)

### The base

- **@koa/router**: 2 files
- **koa-bodyparser**: 1 file

### Testing

- **jest-mock-extended**: 22 files
- **jsdom**: 1 file

### Tools

- **commander**: 14 files
- **[Inquirer](https://seerepo.com/uses/inquirer)**: 7 files
- **copy-webpack-plugin**: 1 file
- **tsconfig-paths-webpack-plugin**: 1 file
- **Webpack**: 1 file
- **webpack-node-externals**: 1 file

### Other

- **rxjs**: 34 files
- **chalk**: 3 files
- **core-js**: 1 file
- **form-data**: 1 file
- **https-proxy-agent**: 1 file
- **jszip**: 1 file
- **node-fetch**: 1 file
- **open**: 1 file
- **proper-lockfile**: 1 file
- **SemVer**: 1 file

## Backend (apps/desktop)

### Data

- **[rusqlite](https://seerepo.com/uses/rusqlite)**
- **[SQLite](https://seerepo.com/uses/sqlite)**: 2 files · [apps/desktop/desktop_native/chromium_importer/src/chromium/mod.rs, line 12](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/apps/desktop/desktop_native/chromium_importer/src/chromium/mod.rs#L12)

### Sign-in

- **[pbkdf2](https://seerepo.com/uses/pbkdf2)**: 1 file

## Support (apps/desktop)

### The base

- **[Tokio](https://seerepo.com/uses/tokio)**: 16 files

### Testing

- **mockall**: 6 files

### Deploy

- **[tracing](https://seerepo.com/uses/tracing)**: 43 files
- **[tracing-subscriber](https://seerepo.com/uses/tracing-subscriber)**: 4 files
- **tracing-oslog**: 1 file

### Tools

- **napi-derive**: 5 files
- **uniffi**: 4 files
- **@ngtools/webpack**: 1 file
- **clap**: 1 file
- **copy-webpack-plugin**: 1 file
- **embed_plist**: 1 file
- **html-webpack-plugin**: 1 file
- **mini-css-extract-plugin**: 1 file
- **tsconfig-paths-webpack-plugin**: 1 file
- **Webpack**: 1 file

### Other

- **Bitwarden**
- **bytes**
- **core-foundation**
- **napi**
- **rand_core**
- **security-framework**
- **security-framework-sys**
- **widestring**
- **windows-future**
- **zbus**
- **anyhow**: 32 files
- **windows**: 31 files
- **async-trait**: 9 files
- **serde_json**: 9 files
- **serde**: 8 files
- **ssh-key**: 8 files
- **tokio-util**: 6 files
- **base64**: 5 files
- **futures**: 5 files
- **dirs**: 4 files
- **sha2**: 4 files
- **signature**: 4 files
- **thiserror**: 4 files
- **rand**: 3 files
- **rsa**: 3 files
- **aes-gcm**: 2 files
- **arboard**: 2 files
- **hex**: 2 files
- **homedir**: 2 files
- **interprocess**: 2 files
- **libc**: 2 files
- **rkyv**: 2 files
- **scopeguard**: 2 files
- **sysinfo**: 2 files
- **windows-core**: 2 files
- **aes**: 1 file
- **ashpd**: 1 file
- **cbc**: 1 file
- **chacha20poly1305**: 1 file
- **ctor**: 1 file
- **itertools**: 1 file
- **process**: 1 file
- **serde_with**: 1 file
- **sha1**: 1 file

## Support (apps/desktop/desktop_native/napi)

### The base

- **[Tokio](https://seerepo.com/uses/tokio)**: 3 files

### Deploy

- **[tracing](https://seerepo.com/uses/tracing)**: 3 files
- **[tracing-subscriber](https://seerepo.com/uses/tracing-subscriber)**: 1 file

### Tools

- **napi-derive**: 1 file

### Other

- **anyhow**
- **windows-registry**
- **napi**: 14 files
- **async-trait**: 1 file
- **serde**: 1 file
- **serde_json**: 1 file

## Support (apps/desktop/native-messaging-test-runner)

### Tools

- **module-alias**: 7 files
- **yargs**: 4 files

## Frontend (apps/desktop/src)

### The base

- **Angular**: 75 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/cdk**: 4 files

## Backend (apps/desktop/src)

### Data

- **[electron-store](https://seerepo.com/uses/electron-store)**: 1 file

## Support (apps/desktop/src)

### The base

- **[Electron](https://seerepo.com/uses/electron)**: 47 files

### Testing

- **jest-mock-extended**: 53 files

### Deploy

- **[electron-log](https://seerepo.com/uses/electron-log)**: 2 files

### Tools

- **electron-reload**: 1 file
- **type-fest**: 1 file

### Other

- **rxjs**: 60 files
- **core-js**: 2 files
- **electron-updater**: 1 file
- **url**: 1 file
- **zone.js**: 1 file

## Frontend (apps/web)

### The base

- **Angular**: 425 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **[angular](https://seerepo.com/uses/angular)**: 23 files

## Support (apps/web)

### Content

- **[papaparse](https://seerepo.com/uses/papaparse)**: 3 files

### Testing

- **jest-mock-extended**: 162 files

### Tools

- **Storybook**: 2 files
- **type-fest**: 2 files
- **@ngtools/webpack**: 1 file
- **copy-webpack-plugin**: 1 file
- **html-webpack-plugin**: 1 file
- **mini-css-extract-plugin**: 1 file
- **Webpack**: 1 file

### Other

- **rxjs**: 241 files
- **core-js**: 1 file
- **zone.js**: 1 file

## Frontend (libs/admin-console)

### The base

- **Angular**: 1 file · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/admin-console)

### Testing

- **jest-mock-extended**: 2 files

### Tools

- **type-fest**: 1 file

### Other

- **rxjs**: 8 files

## Frontend (libs/angular)

### The base

- **Angular**: 81 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/cdk**: 3 files

## Support (libs/angular)

### Testing

- **jest-mock-extended**: 24 files

### Tools

- **type-fest**: 1 file

### Other

- **rxjs**: 55 files
- **core-js**: 1 file

## Frontend (libs/auth)

### The base

- **Angular**: 28 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/animations**: 1 file

## Support (libs/auth)

### Testing

- **jest-mock-extended**: 18 files

### Tools

- **type-fest**: 10 files

### Other

- **rxjs**: 37 files
- **core-js**: 1 file

## Frontend (libs/auto-confirm)

### The base

- **@angular/core**: 3 files

### Interface

- **@angular/cdk**: 2 files

## Support (libs/auto-confirm)

### The base

- **Angular**: 3 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Testing

- **jest-mock-extended**: 2 files

### Other

- **rxjs**: 3 files

## Frontend (libs/automation-driver)

### The base

- **Angular**: 1 file · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/automation-driver)

### Testing

- **jest-mock-extended**: 6 files

### Other

- **rxjs**: 2 files

## Backend (libs/common)

### Sign-in

- **[zxcvbn](https://seerepo.com/uses/zxcvbn)**: 2 files

## Support (libs/common)

### Testing

- **jest-mock-extended**: 105 files
- **Jest**: 1 file

### Tools

- **type-fest**: 99 files

### Other

- **rxjs**: 186 files
- **tldts**: 4 files
- **core-js**: 2 files
- **microsoft**: 2 files
- **SemVer**: 2 files
- **buffer**: 1 file
- **lunr**: 1 file
- **url**: 1 file
- **util**: 1 file

## Frontend (libs/components)

### The base

- **Angular**: 251 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Styles

- **@tailwindcss/container-queries**: 1 file
- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**: 1 file

### Interface

- **[angular](https://seerepo.com/uses/angular)**: 49 files
- **ngx-toastr**: 4 files
- **@ng-select/ng-select**: 2 files

## Support (libs/components)

### Testing

- **jest-mock-extended**: 10 files

### Tools

- **Storybook**: 2 files

### Other

- **rxjs**: 48 files
- **zone.js**: 2 files

## Frontend (libs/dirt/card)

### The base

- **@angular/core**: 1 file

## Support (libs/dirt/card)

### The base

- **Angular**: 1 file · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Frontend (libs/importer)

### The base

- **Angular**: 48 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/cdk**: 3 files

## Backend (libs/importer)

### Sign-in

- **oauth4webapi**: 1 file

## Support (libs/importer)

### Content

- **[papaparse](https://seerepo.com/uses/papaparse)**: 4 files

### Testing

- **jest-mock-extended**: 41 files

### Tools

- **type-fest**: 2 files

### Other

- **rxjs**: 25 files
- **@bufbuild/protobuf**: 2 files
- **jszip**: 2 files
- **node-forge**: 1 file

## Frontend (libs/key-management-ui)

### The base

- **Angular**: 13 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/cdk**: 4 files

## Backend (libs/key-management-ui)

### Sign-in

- **[zxcvbn](https://seerepo.com/uses/zxcvbn)**: 1 file

## Support (libs/key-management-ui)

### Testing

- **jest-mock-extended**: 10 files

### Other

- **rxjs**: 13 files

## Support (libs/key-management)

### Testing

- **jest-mock-extended**: 2 files

### Other

- **rxjs**: 6 files
- **core-js**: 1 file

## Support (libs/legacy-crypto)

### Testing

- **jest-mock-extended**: 4 files

### Tools

- **type-fest**: 5 files

### Other

- **node-forge**: 3 files
- **big-integer**: 1 file
- **core-js**: 1 file
- **rxjs**: 1 file

## Frontend (libs/logging-angular)

### The base

- **Angular**: 3 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/logging)

### Content

- **[papaparse](https://seerepo.com/uses/papaparse)**: 1 file

### Testing

- **jest-mock-extended**: 2 files

## Support (libs/managed-settings)

### Other

- **rxjs**: 2 files

## Support (libs/messaging)

### Other

- **rxjs**: 4 files

## Support (libs/nx-plugin)

### Tools

- **Nx**: 1 file

## Support (libs/organization-invite-link)

### Testing

- **jest-mock-extended**: 1 file

### Tools

- **type-fest**: 1 file

### Other

- **rxjs**: 2 files

## Support (libs/platform)

### Testing

- **jest-mock-extended**: 1 file

## Frontend (libs/pricing)

### The base

- **@angular/core**: 3 files

## Support (libs/pricing)

### The base

- **Angular**: 3 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Testing

- **jest-mock-extended**: 3 files

## Support (libs/scheduling)

### Testing

- **jest-mock-extended**: 1 file

### Other

- **rxjs**: 2 files

## Support (libs/serialization)

### Tools

- **type-fest**: 1 file

## Support (libs/state-internal)

### Testing

- **jest-mock-extended**: 6 files

### Tools

- **type-fest**: 2 files

### Other

- **rxjs**: 11 files

## Support (libs/state)

### Testing

- **jest-mock-extended**: 57 files

### Tools

- **type-fest**: 7 files

### Other

- **rxjs**: 7 files

## Support (libs/storage-core)

### Testing

- **jest-mock-extended**: 1 file

### Other

- **rxjs**: 3 files

## Support (libs/storybook)

### Tools

- **Storybook**: 3 files

### Other

- **rxjs**: 1 file

## Frontend (libs/subscription)

### The base

- **Angular**: 4 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/tools/export-vault-core)

### Content

- **[papaparse](https://seerepo.com/uses/papaparse)**: 2 files

### Testing

- **jest-mock-extended**: 4 files

### Other

- **rxjs**: 4 files
- **jszip**: 1 file

## Frontend (libs/tools/export-vault-ui)

### The base

- **Angular**: 2 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/tools/export-vault-ui)

### Other

- **rxjs**: 2 files

## Frontend (libs/tools/generator/components)

### The base

- **Angular**: 15 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/cdk**: 5 files

## Support (libs/tools/generator/components)

### Testing

- **jest-mock-extended**: 1 file

### Other

- **rxjs**: 13 files

## Support (libs/tools/generator/core)

### Testing

- **jest-mock-extended**: 27 files

### Tools

- **type-fest**: 4 files

### Other

- **util**: 24 files
- **rxjs**: 11 files

## Support (libs/tools/generator/extensions/history)

### Testing

- **jest-mock-extended**: 2 files

### Tools

- **type-fest**: 2 files

### Other

- **rxjs**: 3 files
- **util**: 2 files

## Support (libs/tools/generator/extensions/legacy)

### Testing

- **jest-mock-extended**: 2 files

### Other

- **rxjs**: 4 files
- **util**: 2 files

## Support (libs/tools/generator/extensions/navigation)

### Testing

- **jest-mock-extended**: 1 file

### Other

- **rxjs**: 2 files
- **util**: 2 files

## Frontend (libs/tools/send/send-ui)

### The base

- **Angular**: 23 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/tools/send/send-ui)

### Testing

- **jest-mock-extended**: 12 files

### Other

- **rxjs**: 13 files

## Frontend (libs/tools/share)

### The base

- **Angular**: 8 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/tools/share)

### Testing

- **jest-mock-extended**: 7 files

### Other

- **rxjs**: 7 files

## Frontend (libs/ui/common)

### The base

- **Angular**: 3 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

## Support (libs/ui/common)

### Testing

- **jest-preset-angular**: 1 file

### Tools

- **type-fest**: 1 file

## Support (libs/unlock)

### Testing

- **jest-mock-extended**: 4 files

### Other

- **rxjs**: 6 files
- **core-js**: 1 file

## Support (libs/user-core)

### Tools

- **type-fest**: 1 file

## Support (libs/user-crypto-management)

### Testing

- **jest-mock-extended**: 1 file

### Other

- **core-js**: 1 file
- **rxjs**: 1 file

## Frontend (libs/vault)

### The base

- **Angular**: 145 files · [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### Interface

- **@angular/cdk**: 13 files

## Support (libs/vault)

### Testing

- **jest-mock-extended**: 68 files

### Tools

- **type-fest**: 1 file

### Other

- **rxjs**: 80 files

## Other repos with a similar stack

- [BerriAI/litellm](https://seerepo.com/r/BerriAI/litellm/built): rusqlite, SQLite, Tokio, Tailwind CSS, papaparse, tracing, tracing-subscriber · [Compare](https://seerepo.com/compare/BerriAI/litellm/vs/bitwarden/clients)
- [denoland/deno](https://seerepo.com/r/denoland/deno/built): rusqlite, SQLite, Tokio, pbkdf2, tracing, tracing-subscriber · [Compare](https://seerepo.com/compare/bitwarden/clients/vs/denoland/deno)
- [AppFlowy-IO/AppFlowy](https://seerepo.com/r/AppFlowy-IO/AppFlowy/built): rusqlite, SQLite, Tokio, pbkdf2, tracing, tracing-subscriber · [Compare](https://seerepo.com/compare/AppFlowy-IO/AppFlowy/vs/bitwarden/clients)
- [aaif-goose/goose](https://seerepo.com/r/aaif-goose/goose/built): Electron, Tokio, Tailwind CSS, tracing, tracing-subscriber, electron-log · [Compare](https://seerepo.com/compare/aaif-goose/goose/vs/bitwarden/clients)
- [tinyhumansai/openhuman](https://seerepo.com/r/tinyhumansai/openhuman/built): rusqlite, SQLite, Tokio, Tailwind CSS, tracing, tracing-subscriber · [Compare](https://seerepo.com/compare/bitwarden/clients/vs/tinyhumansai/openhuman)
- [volcengine/OpenViking](https://seerepo.com/r/volcengine/OpenViking/built): rusqlite, SQLite, Tokio, Tailwind CSS, tracing, tracing-subscriber · [Compare](https://seerepo.com/compare/bitwarden/clients/vs/volcengine/OpenViking)

## Frequently asked questions

### What language is clients written in?

clients is written in TypeScript, with 1,071,024 written lines.

### What framework does clients use?

clients is built with Angular, Koa, @koa/router, Electron, Lit, koa-bodyparser, Tokio, and @angular/core.

The proof: [in package.json](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/package.json)

### What database does clients use?

clients stores its data in SQLite.

The proof: [apps/desktop/desktop_native/chromium_importer/src/chromium/mod.rs, line 12](https://github.com/bitwarden/clients/blob/e3d0bc570925570c3ffc17757c43de22a1efa25b/apps/desktop/desktop_native/chromium_importer/src/chromium/mod.rs#L12)

### What does clients sign people in with?

clients signs people in with zxcvbn, pbkdf2, and oauth4webapi.

### What services does clients use?

clients uses lowdb, rusqlite, and electron-store.

### Does clients have tests?

Yes. clients has 1,768 test files and is tested with jest-mock-extended, Jest, @nx/jest, jest-preset-angular, jsdom, and mockall.

### Which repos have a stack like clients's?

The ones that share most of its stack: BerriAI/litellm, denoland/deno, and AppFlowy-IO/AppFlowy.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
