// the find
bitwarden/clients
Bitwarden client apps (web, browser extension, desktop, and cli).
The official Bitwarden client monorepo — web vault, browser extension (Chrome/Firefox/Safari), Electron desktop app, and CLI, all in TypeScript/Angular. This is the production codebase behind Bitwarden's password manager, not a reference implementation. If you're self-hosting Bitwarden or contributing fixes, this is where you work.
The monorepo is genuinely well-organized for its complexity — Nx workspace with per-app project.json files, clear separation between apps and shared libs, and separate build workflows per target. The .claude/ directory with structured rules for Angular, autofill content scripts, i18n, and testing is unusually thoughtful for an OSS project — it's actual contributor tooling, not decoration. Browser extension autofill code is properly split between background service workers and content scripts with typed message passing. 50+ locales maintained with Crowdin integration and a lint step to catch broken locale files before they ship.
Electron for the desktop app means you're shipping Chromium, which is a large runtime dependency and a recurring CVE surface — fine for a consumer product but worth knowing if you're evaluating the architecture. The codebase is large enough that onboarding is genuinely hard: the contributing docs are external (contributing.bitwarden.com) and not in the repo, so a new contributor needs to find them first. Angular is the UI framework throughout, including the browser extension popup, which adds build complexity and bundle size pressure in a context where extension size actually matters. The browser extension build pipeline produces per-browser bundles through a fairly involved webpack config — if you need to fork or customize, expect to spend time understanding the build before touching the extension manifest.