# wireapp/wire-desktop architecture

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

- Interactive diagram: https://gitdiagram.com/wireapp/wire-desktop
- Repository: https://github.com/wireapp/wire-desktop

## Overview

Wire Desktop is an Electron wrapper for the Wire webapp, providing a native desktop shell for macOS and Windows. Users launch the app, manage multiple webapp accounts, and authenticate through embedded or browser-based SSO; managed-device policy can also affect webapp behavior. The renderer’s entry point mounts the account-oriented UI, while Electron startup and window management provide the desktop runtime. The README documents MDM, SSO, logging, and platform support; many corresponding implementations are present in the tree but were not sampled, so those links are documented rather than source-verified.

Main entry points: [`electron/renderer/src/components/App/App.tsx`](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/App/App.tsx) (Account UI), [`electron/src/mainProcess.ts`](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/mainProcess.ts) (Electron main process), [`electron/src/sso/SingleSignOn.ts`](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/SingleSignOn.ts) (Single sign-on), [`electron/src/main.ts`](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/main.ts) (App bootstrap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop runtime"]
  node_bootstrap["App bootstrap<br/>[main.ts]"]
  node_main["Electron main process<br/>[mainProcess.ts]"]
  node_window["Window manager<br/>[WindowManager.ts]"]
end

subgraph group_renderer["Account interface"]
  node_renderer_entry["Renderer entry<br/>[index.tsx]"]
  node_app_ui["Account UI<br/>[App.tsx]"]
  node_account_state["Account actions and state<br/>[index.ts]"]
  node_account_selector["Account selector<br/>[AccountSelector.ts]"]
  node_sidebar["Account sidebar<br/>[Sidebar.tsx]"]
  node_webview_list["Webview list<br/>[WebviewList.tsx]"]
  node_webview["Webapp view<br/>[Webview.tsx]"]
end

subgraph group_identity["Identity and policy"]
  node_managed["Managed configuration<br/>[ManagedConfig.ts]"]
  node_sso["Single sign-on<br/>[SingleSignOn.ts]"]
  node_mac_sso["macOS browser SSO"]
  node_windows_sso["Windows embedded SSO"]
end

subgraph group_operations["Desktop services"]
  node_logging["Desktop logging<br/>[getLogger.ts]"]
  node_updates["Desktop updates"]
  node_calling["Picture-in-picture calls"]
end

node_user(("Desktop user"))
node_webapp_service["Wire webapp"]
node_managed_device["Managed device policy"]
node_identity_provider["Identity provider"]

node_user -->|"launches"| node_bootstrap
node_bootstrap -->|"starts"| node_main
node_main -.->|"manages windows"| node_window
node_renderer_entry -->|"mounts"| node_app_ui
node_app_ui -->|"dispatches account actions"| node_account_state
node_app_ui -->|"selects accounts"| node_account_selector
node_app_ui -->|"renders"| node_sidebar
node_app_ui -->|"renders"| node_webview_list
node_webview_list -.->|"displays"| node_webview
node_webview -->|"hosts"| node_webapp_service
node_managed_device -->|"provides policy"| node_managed
node_managed -->|"forwards configuration"| node_webapp_service
node_user -->|"authenticates"| node_sso
node_sso -.->|"uses browser flow"| node_mac_sso
node_sso -.->|"uses embedded flow"| node_windows_sso
node_mac_sso -->|"authenticates with"| node_identity_provider
node_windows_sso -->|"authenticates with"| node_identity_provider
node_main -.->|"writes logs"| node_logging
node_user -.->|"receives updates"| node_updates
node_webapp_service -.->|"opens call picture-in-picture"| node_calling

click node_bootstrap "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/main.ts"
click node_main "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/mainProcess.ts"
click node_window "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/window/WindowManager.ts"
click node_renderer_entry "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/index.tsx"
click node_app_ui "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/App/App.tsx"
click node_account_state "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/actions/index.ts"
click node_account_selector "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/selector/AccountSelector.ts"
click node_sidebar "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/Sidebar/Sidebar.tsx"
click node_webview_list "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/WebViewList/WebviewList.tsx"
click node_webview "https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/WebView/Webview.tsx"
click node_managed "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/managed/ManagedConfig.ts"
click node_sso "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/SingleSignOn.ts"
click node_mac_sso "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/MacWebAuthentication.ts"
click node_windows_sso "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/BrowserSingleSignOn.ts"
click node_logging "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/logging/getLogger.ts"
click node_updates "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/update/macosAutoUpdater.ts"
click node_calling "https://github.com/wireapp/wire-desktop/blob/dev/electron/src/calling/PictureInPictureCall.ts"

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_bootstrap,node_main,node_window,node_user toneBlue
class node_renderer_entry,node_app_ui,node_account_state,node_account_selector,node_sidebar,node_webview_list,node_webview toneAmber
class node_managed,node_sso,node_mac_sso,node_windows_sso toneMint
class node_logging,node_updates,node_calling toneRose
class node_webapp_service,node_managed_device,node_identity_provider toneIndigo
```

## Components

### Desktop runtime

- [App bootstrap](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/main.ts): `electron/src/main.ts`
- [Electron main process](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/mainProcess.ts): `electron/src/mainProcess.ts`
- [Window manager](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/window/WindowManager.ts): `electron/src/window/WindowManager.ts`

### Account interface

- [Renderer entry](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/index.tsx): `electron/renderer/src/index.tsx`
- [Account UI](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/App/App.tsx): `electron/renderer/src/components/App/App.tsx`
- [Account actions and state](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/actions/index.ts): `electron/renderer/src/actions/index.ts`
- [Account selector](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/selector/AccountSelector.ts): `electron/renderer/src/selector/AccountSelector.ts`
- [Account sidebar](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/Sidebar/Sidebar.tsx): `electron/renderer/src/components/Sidebar/Sidebar.tsx`
- [Webview list](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/WebViewList/WebviewList.tsx): `electron/renderer/src/components/WebViewList/WebviewList.tsx`
- [Webapp view](https://github.com/wireapp/wire-desktop/blob/dev/electron/renderer/src/components/WebView/Webview.tsx): `electron/renderer/src/components/WebView/Webview.tsx`

### Identity and policy

- [Managed configuration](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/managed/ManagedConfig.ts): `electron/src/managed/ManagedConfig.ts`
- [Single sign-on](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/SingleSignOn.ts): `electron/src/sso/SingleSignOn.ts`
- [macOS browser SSO](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/MacWebAuthentication.ts): `electron/src/sso/MacWebAuthentication.ts`
- [Windows embedded SSO](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/sso/BrowserSingleSignOn.ts): `electron/src/sso/BrowserSingleSignOn.ts`

### Desktop services

- [Desktop logging](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/logging/getLogger.ts): `electron/src/logging/getLogger.ts`
- [Desktop updates](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/update/macosAutoUpdater.ts): `electron/src/update/macosAutoUpdater.ts`
- [Picture-in-picture calls](https://github.com/wireapp/wire-desktop/blob/dev/electron/src/calling/PictureInPictureCall.ts): `electron/src/calling/PictureInPictureCall.ts`

### Other components

- **Desktop user**
- **Wire webapp**
- **Managed device policy**
- **Identity provider**

## Connections

- Desktop user → App bootstrap: launches
- App bootstrap → Electron main process: starts (evidence: `electron/src/main.ts`)
- Electron main process → Window manager: manages windows
- Renderer entry → Account UI: mounts (evidence: `electron/renderer/src/index.tsx`)
- Account UI → Account actions and state: dispatches account actions (evidence: `electron/renderer/src/components/App/App.tsx`)
- Account UI → Account selector: selects accounts (evidence: `electron/renderer/src/components/App/App.tsx`)
- Account UI → Account sidebar: renders (evidence: `electron/renderer/src/components/App/App.tsx`)
- Account UI → Webview list: renders (evidence: `electron/renderer/src/components/App/App.tsx`)
- Webview list → Webapp view: displays
- Webapp view → Wire webapp: hosts
- Managed device policy → Managed configuration: provides policy
- Managed configuration → Wire webapp: forwards configuration
- Desktop user → Single sign-on: authenticates
- Single sign-on → macOS browser SSO: uses browser flow
- Single sign-on → Windows embedded SSO: uses embedded flow
- macOS browser SSO → Identity provider: authenticates with
- Windows embedded SSO → Identity provider: authenticates with
- Electron main process → Desktop logging: writes logs
- Desktop user → Desktop updates: receives updates
- Wire webapp → Picture-in-picture calls: opens call picture-in-picture
