# rhinstaller/anaconda-webui architecture

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

- Interactive diagram: https://gitdiagram.com/rhinstaller/anaconda-webui
- Repository: https://github.com/rhinstaller/anaconda-webui

## Overview

Anaconda Web UI is a browser-based installer front end. Users progress through a wizard to configure localization, networking, software and installation source, storage, time zone, and accounts; they review choices and start installation, with progress and error reporting along the way. The UI connects to Anaconda’s module APIs through Cockpit, with storage receiving especially detailed coverage here. The graph includes the principal screens and backend domains from the tree; many unsampled screen-to-screen and API interactions are therefore shown only as unverified links or omitted.

Main entry points: [`src/components/AnacondaWizard.jsx`](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/AnacondaWizard.jsx) (Setup wizard), [`src/actions/storage-actions.js`](https://github.com/rhinstaller/anaconda-webui/blob/main/src/actions/storage-actions.js) (Storage actions), [`src/hooks/Storage.jsx`](https://github.com/rhinstaller/anaconda-webui/blob/main/src/hooks/Storage.jsx) (Storage state and planning), [`src/apis/storage.js`](https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage.js) (Storage D-Bus client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["Application shell"]
  node_app["Application entry<br/>[app.jsx]"]
  node_wizard["Setup wizard<br/>[AnacondaWizard.jsx]"]
  node_contexts["Shared contexts<br/>[Common.jsx]"]
end

subgraph group_setup["Installation setup"]
  node_localization["Language and keyboard"]
  node_network["Network setup"]
  node_software["Software selection"]
  node_source["Install source"]
  node_datetime["Date and time<br/>[DateAndTime.jsx]"]
  node_accounts["User accounts<br/>[Accounts.jsx]"]
  node_review["Configuration review"]
end

subgraph group_storage["Storage planning"]
  node_storageui["Storage scenarios"]
  node_storagecheck["Storage validation"]
  node_storagereview["Storage review<br/>[StorageReview.jsx]"]
  node_storagehook["Storage state and planning<br/>[Storage.jsx]"]
  node_storageactions["Storage actions<br/>[storage-actions.js]"]
end

subgraph group_backend["Anaconda services"]
  node_storageapi["Storage D-Bus client<br/>[storage.js]"]
  node_devicetree["Device tree API"]
  node_diskselection["Disk selection API"]
  node_partitioning["Partitioning API"]
  node_moduleapis["Installer module APIs<br/>[boss.js]"]
end

subgraph group_finish["Completion and support"]
  node_installation["Installation progress"]
  node_errors["Error reporting<br/>[Error.jsx]"]
  node_bugzilla["Bug reporting<br/>[BugzillaReport.jsx]"]
end

node_installer(("Installer user"))
node_anaconda{{"Anaconda services"}}

node_installer -.->|"opens"| node_app
node_app -->|"renders"| node_wizard
node_app -->|"provides"| node_contexts
node_app -->|"renders"| node_errors
node_wizard -->|"uses"| node_contexts
node_wizard -.->|"hosts"| node_localization
node_wizard -.->|"hosts"| node_network
node_wizard -.->|"hosts"| node_software
node_wizard -.->|"hosts"| node_source
node_wizard -.->|"hosts"| node_storageui
node_wizard -.->|"hosts"| node_datetime
node_wizard -.->|"hosts"| node_accounts
node_wizard -.->|"hosts"| node_review
node_wizard -.->|"hosts"| node_installation
node_storageui -->|"uses"| node_storagehook
node_storageui -->|"dispatches"| node_storageactions
node_storagecheck -->|"dispatches"| node_storageactions
node_storagecheck -->|"applies storage"| node_partitioning
node_storagecheck -->|"reads disks"| node_diskselection
node_storagecheck -->|"renders"| node_storagereview
node_storagereview -->|"reads planned state"| node_storagehook
node_storagehook -->|"queries device data"| node_devicetree
node_storagehook -->|"creates partitioning"| node_partitioning
node_storagehook -.->|"selects usable disks"| node_diskselection
node_storageactions -->|"reads device tree"| node_devicetree
node_storageactions -->|"reads disk selection"| node_diskselection
node_storageactions -->|"reads partitioning"| node_partitioning
node_storageapi -->|"dispatches updates"| node_storageactions
node_devicetree -->|"calls D-Bus"| node_storageapi
node_diskselection -->|"calls D-Bus"| node_storageapi
node_partitioning -->|"calls D-Bus"| node_storageapi
node_storageapi -->|"communicates"| node_anaconda
node_wizard -->|"initializes modules"| node_moduleapis
node_moduleapis -.->|"communicates"| node_anaconda
node_errors -->|"offers report"| node_bugzilla
node_errors -.->|"exits or recovers"| node_installation

click node_app "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/app.jsx"
click node_wizard "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/AnacondaWizard.jsx"
click node_contexts "https://github.com/rhinstaller/anaconda-webui/blob/main/src/contexts/Common.jsx"
click node_localization "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/localization/InstallationLanguage.jsx"
click node_network "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/network/NetworkConfiguration.jsx"
click node_software "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/software/SoftwareSelection.jsx"
click node_source "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/source/InstallationSource.jsx"
click node_datetime "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/datetime/DateAndTime.jsx"
click node_accounts "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/users/Accounts.jsx"
click node_review "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/review/ReviewConfiguration.jsx"
click node_storageui "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/storage/installation-method/InstallationScenario.jsx"
click node_storagecheck "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx"
click node_storagereview "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/storage/StorageReview.jsx"
click node_storagehook "https://github.com/rhinstaller/anaconda-webui/blob/main/src/hooks/Storage.jsx"
click node_storageactions "https://github.com/rhinstaller/anaconda-webui/blob/main/src/actions/storage-actions.js"
click node_storageapi "https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage.js"
click node_devicetree "https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage_devicetree.js"
click node_diskselection "https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage_disks_selection.js"
click node_partitioning "https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage_partitioning.js"
click node_moduleapis "https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/boss.js"
click node_installation "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/installation/InstallationProgress.jsx"
click node_errors "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/error/Error.jsx"
click node_bugzilla "https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/error/BugzillaReport.jsx"

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_app,node_wizard,node_contexts,node_installer toneBlue
class node_localization,node_network,node_software,node_source,node_datetime,node_accounts,node_review toneAmber
class node_storageui,node_storagecheck,node_storagereview,node_storagehook,node_storageactions toneMint
class node_storageapi,node_devicetree,node_diskselection,node_partitioning,node_moduleapis toneRose
class node_installation,node_errors,node_bugzilla,node_anaconda toneIndigo
```

## Components

### Application shell

- [Application entry](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/app.jsx): `src/components/app.jsx`
- [Setup wizard](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/AnacondaWizard.jsx): `src/components/AnacondaWizard.jsx`
- [Shared contexts](https://github.com/rhinstaller/anaconda-webui/blob/main/src/contexts/Common.jsx): `src/contexts/Common.jsx`

### Installation setup

- [Language and keyboard](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/localization/InstallationLanguage.jsx): `src/components/localization/InstallationLanguage.jsx`
- [Network setup](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/network/NetworkConfiguration.jsx): `src/components/network/NetworkConfiguration.jsx`
- [Software selection](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/software/SoftwareSelection.jsx): `src/components/software/SoftwareSelection.jsx`
- [Install source](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/source/InstallationSource.jsx): `src/components/source/InstallationSource.jsx`
- [Date and time](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/datetime/DateAndTime.jsx): `src/components/datetime/DateAndTime.jsx`
- [User accounts](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/users/Accounts.jsx): `src/components/users/Accounts.jsx`
- [Configuration review](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/review/ReviewConfiguration.jsx): `src/components/review/ReviewConfiguration.jsx`

### Storage planning

- [Storage scenarios](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/storage/installation-method/InstallationScenario.jsx): `src/components/storage/installation-method/InstallationScenario.jsx`
- [Storage validation](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx): `src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx`
- [Storage review](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/storage/StorageReview.jsx): `src/components/storage/StorageReview.jsx`
- [Storage state and planning](https://github.com/rhinstaller/anaconda-webui/blob/main/src/hooks/Storage.jsx): `src/hooks/Storage.jsx`
- [Storage actions](https://github.com/rhinstaller/anaconda-webui/blob/main/src/actions/storage-actions.js): `src/actions/storage-actions.js`

### Anaconda services

- [Storage D-Bus client](https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage.js): `src/apis/storage.js`
- [Device tree API](https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage_devicetree.js): `src/apis/storage_devicetree.js`
- [Disk selection API](https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage_disks_selection.js): `src/apis/storage_disks_selection.js`
- [Partitioning API](https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/storage_partitioning.js): `src/apis/storage_partitioning.js`
- [Installer module APIs](https://github.com/rhinstaller/anaconda-webui/blob/main/src/apis/boss.js): `src/apis/boss.js`

### Completion and support

- [Installation progress](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/installation/InstallationProgress.jsx): `src/components/installation/InstallationProgress.jsx`
- [Error reporting](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/error/Error.jsx): `src/components/error/Error.jsx`
- [Bug reporting](https://github.com/rhinstaller/anaconda-webui/blob/main/src/components/error/BugzillaReport.jsx): `src/components/error/BugzillaReport.jsx`

### Other components

- **Installer user**
- **Anaconda services**

## Connections

- Installer user → Application entry: opens
- Application entry → Setup wizard: renders (evidence: `src/components/app.jsx`)
- Application entry → Shared contexts: provides (evidence: `src/components/app.jsx`)
- Application entry → Error reporting: renders (evidence: `src/components/app.jsx`)
- Setup wizard → Shared contexts: uses (evidence: `src/components/AnacondaWizard.jsx`)
- Setup wizard → Language and keyboard: hosts
- Setup wizard → Network setup: hosts
- Setup wizard → Software selection: hosts
- Setup wizard → Install source: hosts
- Setup wizard → Storage scenarios: hosts
- Setup wizard → Date and time: hosts
- Setup wizard → User accounts: hosts
- Setup wizard → Configuration review: hosts
- Setup wizard → Installation progress: hosts
- Storage scenarios → Storage state and planning: uses (evidence: `src/components/storage/installation-method/InstallationScenario.jsx`)
- Storage scenarios → Storage actions: dispatches (evidence: `src/components/storage/installation-method/InstallationScenario.jsx`)
- Storage validation → Storage actions: dispatches (evidence: `src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx`)
- Storage validation → Partitioning API: applies storage (evidence: `src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx`)
- Storage validation → Disk selection API: reads disks (evidence: `src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx`)
- Storage validation → Storage review: renders (evidence: `src/components/storage/cockpit-storage-integration/CheckStorageDialog.jsx`)
- Storage review → Storage state and planning: reads planned state (evidence: `src/components/storage/StorageReview.jsx`)
- Storage state and planning → Device tree API: queries device data (evidence: `src/hooks/Storage.jsx`)
- Storage state and planning → Partitioning API: creates partitioning (evidence: `src/hooks/Storage.jsx`)
- Storage state and planning → Disk selection API: selects usable disks
- Storage actions → Device tree API: reads device tree (evidence: `src/actions/storage-actions.js`)
- Storage actions → Disk selection API: reads disk selection (evidence: `src/actions/storage-actions.js`)
- Storage actions → Partitioning API: reads partitioning (evidence: `src/actions/storage-actions.js`)
- Storage D-Bus client → Storage actions: dispatches updates (evidence: `src/apis/storage.js`)
- Device tree API → Storage D-Bus client: calls D-Bus (evidence: `src/apis/storage_devicetree.js`)
- Disk selection API → Storage D-Bus client: calls D-Bus (evidence: `src/apis/storage_disks_selection.js`)
- Partitioning API → Storage D-Bus client: calls D-Bus (evidence: `src/apis/storage_partitioning.js`)
- Storage D-Bus client → Anaconda services: communicates (evidence: `src/apis/storage.js`)
- Setup wizard → Installer module APIs: initializes modules (evidence: `src/components/AnacondaWizard.jsx`)
- Installer module APIs → Anaconda services: communicates
- Error reporting → Bug reporting: offers report (evidence: `src/components/error/Error.jsx`)
- Error reporting → Installation progress: exits or recovers
