Architecture
The Bitwarden Clients repository is an Nx-powered monorepo that provides a unified development experience across four client applications while maximizing code reuse through shared libraries.Monorepo structure
The repository follows a clear separation between applications and shared code:Applications directory
Each application inapps/ is a standalone project with its own build configuration:
Shared libraries
Thelibs/ directory contains 35+ shared libraries organized by domain:
- Core libraries
- UI libraries
- Feature libraries
- Infrastructure
Platform-agnostic business logic:
@bitwarden/common- Core business logic, models, and services@bitwarden/platform- Platform abstractions (storage, crypto, messaging)@bitwarden/vault- Vault management and cipher operations@bitwarden/auth- Authentication and identity@bitwarden/state- State management and persistence
Nx workspace
The repository uses Nx for build orchestration and caching:Configuration
nx.json
Build targets
Nx automatically discovers and caches build targets:- build - Compile TypeScript and bundle applications
- test - Run Jest unit tests
- lint - Run ESLint checks
Dependency graph
Nx tracks dependencies between libraries and applications:TypeScript path mapping
The repository uses TypeScript path aliases to import shared libraries:tsconfig.base.json
Usage in applications
Application architecture patterns
Browser extension
Architecture: Multi-context extension (service worker, popup, content scripts)BrowserApi wraps all browser extension APIs for cross-browser compatibility.
Desktop application
Architecture: Electron multi-process (main + renderer)Web vault
Architecture: Standard Angular SPACLI
Architecture: Node.js command-line application--response flag.
Dependency injection
All applications use dependency injection for service management:Service container pattern
Angular services
Angular apps use standard Angular DI:State management
The repository uses a custom state management system:Build system
Each application has dedicated build scripts:Workspace features
npm workspaces
The repository uses npm workspaces for dependency management:package.json
- Single
node_modulesat root - Shared dependencies across all packages
- Faster installs with hoisting
Shared configuration
Common configuration files apply to all apps:tsconfig.base.json- TypeScript settings and path mappingseslint.config.mjs- Code style and quality rulesjest.config.js- Test framework configuration.prettierrc.json- Code formatting rules
Commercial features
Thebitwarden_license/ directory contains commercial/enterprise features:
Next steps
Installation
Set up the repository locally
Building
Build and run applications
Contributing
Learn the development workflow
Requirements
Review system requirements