# bitwarden/android architecture

> Architecture diagram of the GitHub repository bitwarden/android, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bitwarden/android
- Repository: https://github.com/bitwarden/android

## Overview

Bitwarden Android is a password-manager app. Its visible product surface includes account authentication, Android autofill (including accessibility-based autofill), browser integration, and premium billing. The principal user-to-result workflow represented here is an Android autofill request being processed into a fill response. The tree identifies the relevant components, but most implementation excerpts are absent, so internal links are limited to relationships made explicit by the sampled source or component contracts.

Main entry points: [`app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/processor/AutofillProcessorImpl.kt`](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/processor/AutofillProcessorImpl.kt) (Autofill processor), [`app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt`](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt) (Auth request manager), [`app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/BitwardenAutofillService.kt`](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/BitwardenAutofillService.kt) (Autofill service), [`app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/BitwardenAccessibilityService.kt`](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/BitwardenAccessibilityService.kt) (Accessibility service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App entry"]
  node_main_activity["Main activity<br/>[MainActivity.kt]"]
  node_main_vm["Main view model<br/>[MainViewModel.kt]"]
  node_auth_callback["Auth callback"]
end

subgraph group_auth["Authentication"]
  node_auth_repo["Auth repository"]
  node_auth_disk[("Auth disk source")]
  node_auth_sdk["Auth SDK source"]
  node_auth_state["Auth state manager"]
  node_auth_request["Auth request manager"]
  node_auth_api["Auth request API"]
end

subgraph group_autofill["Autofill"]
  node_autofill_service["Autofill service"]
  node_autofill_processor["Autofill processor"]
  node_autofill_parser["Autofill parser"]
  node_fill_builder["Fill response builder"]
  node_accessibility_service["Accessibility service"]
  node_accessibility_processor["Accessibility processor"]
  node_browser_manager["Browser autofill manager"]
end

subgraph group_platform["Platform services"]
  node_review_manager["Review prompt manager"]
  node_settings_disk[("Settings disk source")]
  node_bridge_service["Authenticator bridge"]
end

subgraph group_billing["Billing"]
  node_billing_repo["Billing repository"]
  node_premium_manager["Premium state manager"]
  node_play_billing["Play billing manager"]
end

node_user(("User"))
node_android(("Android system"))
node_autofill_system(("Autofill requester"))
node_browser(("Supported browsers"))

node_user -->|"interacts"| node_main_activity
node_user -->|"requests fill"| node_autofill_system
node_autofill_system -->|"dispatches request"| node_autofill_service
node_autofill_service -->|"delegates"| node_autofill_processor
node_autofill_processor -->|"parses request"| node_autofill_parser
node_autofill_processor -->|"builds response"| node_fill_builder
node_android -->|"dispatches events"| node_accessibility_service
node_accessibility_service -->|"delegates"| node_accessibility_processor
node_browser_manager -->|"queries status"| node_browser
node_auth_callback -->|"handles callback"| node_auth_request
node_auth_request -->|"requests updates"| node_auth_api
node_review_manager -->|"reads and writes"| node_settings_disk
node_billing_repo -.->|"uses billing"| node_play_billing

click node_main_activity "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/MainActivity.kt"
click node_main_vm "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt"
click node_auth_callback "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/AuthCallbackActivity.kt"
click node_auth_repo "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt"
click node_auth_disk "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt"
click node_auth_sdk "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt"
click node_auth_state "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthStateManagerImpl.kt"
click node_auth_request "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt"
click node_auth_api "https://github.com/bitwarden/android/blob/main/network/src/main/kotlin/com/bitwarden/network/service/NewAuthRequestService.kt"
click node_autofill_service "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/BitwardenAutofillService.kt"
click node_autofill_processor "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/processor/AutofillProcessorImpl.kt"
click node_autofill_parser "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/parser/AutofillParserImpl.kt"
click node_fill_builder "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/builder/FillResponseBuilderImpl.kt"
click node_accessibility_service "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/BitwardenAccessibilityService.kt"
click node_accessibility_processor "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt"
click node_browser_manager "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt"
click node_review_manager "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/ReviewPromptManagerImpl.kt"
click node_settings_disk "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt"
click node_bridge_service "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/service/AuthenticatorBridgeService.kt"
click node_billing_repo "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryImpl.kt"
click node_premium_manager "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/billing/manager/PremiumStateManagerImpl.kt"
click node_play_billing "https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/billing/manager/PlayBillingManager.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main_activity,node_main_vm,node_auth_callback,node_user,node_browser toneBlue
class node_auth_repo,node_auth_disk,node_auth_sdk,node_auth_state,node_auth_request,node_auth_api toneAmber
class node_autofill_service,node_autofill_processor,node_autofill_parser,node_fill_builder,node_accessibility_service,node_accessibility_processor,node_browser_manager,node_autofill_system toneMint
class node_review_manager,node_settings_disk,node_bridge_service toneRose
class node_billing_repo,node_premium_manager,node_play_billing,node_android toneIndigo
```

## Components

### App entry

- [Main activity](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/MainActivity.kt): `app/src/main/kotlin/com/x8bit/bitwarden/MainActivity.kt`
- [Main view model](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt): `app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt`
- [Auth callback](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/AuthCallbackActivity.kt): `app/src/main/kotlin/com/x8bit/bitwarden/AuthCallbackActivity.kt`

### Authentication

- [Auth repository](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt`
- [Auth disk source](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt`
- [Auth SDK source](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt`
- [Auth state manager](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthStateManagerImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthStateManagerImpl.kt`
- [Auth request manager](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt`
- [Auth request API](https://github.com/bitwarden/android/blob/main/network/src/main/kotlin/com/bitwarden/network/service/NewAuthRequestService.kt): `network/src/main/kotlin/com/bitwarden/network/service/NewAuthRequestService.kt`

### Autofill

- [Autofill service](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/BitwardenAutofillService.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/BitwardenAutofillService.kt`
- [Autofill processor](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/processor/AutofillProcessorImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/processor/AutofillProcessorImpl.kt`
- [Autofill parser](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/parser/AutofillParserImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/parser/AutofillParserImpl.kt`
- [Fill response builder](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/builder/FillResponseBuilderImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/builder/FillResponseBuilderImpl.kt`
- [Accessibility service](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/BitwardenAccessibilityService.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/BitwardenAccessibilityService.kt`
- [Accessibility processor](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt`
- [Browser autofill manager](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt`

### Platform services

- [Review prompt manager](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/ReviewPromptManagerImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/ReviewPromptManagerImpl.kt`
- [Settings disk source](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt`
- [Authenticator bridge](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/service/AuthenticatorBridgeService.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/platform/service/AuthenticatorBridgeService.kt`

### Billing

- [Billing repository](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryImpl.kt`
- [Premium state manager](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/billing/manager/PremiumStateManagerImpl.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/manager/PremiumStateManagerImpl.kt`
- [Play billing manager](https://github.com/bitwarden/android/blob/main/app/src/main/kotlin/com/x8bit/bitwarden/data/billing/manager/PlayBillingManager.kt): `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/manager/PlayBillingManager.kt`

### Other components

- **User**
- **Android system**
- **Autofill requester**
- **Supported browsers**

## Connections

- User → Main activity: interacts
- User → Autofill requester: requests fill
- Autofill requester → Autofill service: dispatches request
- Autofill service → Autofill processor: delegates
- Autofill processor → Autofill parser: parses request
- Autofill processor → Fill response builder: builds response
- Android system → Accessibility service: dispatches events
- Accessibility service → Accessibility processor: delegates
- Browser autofill manager → Supported browsers: queries status
- Auth callback → Auth request manager: handles callback
- Auth request manager → Auth request API: requests updates
- Review prompt manager → Settings disk source: reads and writes
- Billing repository → Play billing manager: uses billing
