# lingyired/status-trio architecture

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

- Interactive diagram: https://gitdiagram.com/lingyired/status-trio
- Repository: https://github.com/lingyired/status-trio

## Overview

Status Trio is a native macOS status app that combines battery, Wi-Fi, and audio state in a configurable menu-bar and/or Dock icon, with interactive popovers and settings. The principal workflow is system-state collection, snapshot presentation, then user interaction with detailed panels and controls. Bluetooth audio can affect the icon and Bluetooth devices have their own panel; battery details and network link details are separate stages. The README documents additional capabilities not visible in the sampled source, so those branches are represented at their supported enclosing paths.

Main entry points: [`Sources/StatusTrioCore/Store/SystemStatusStore.swift`](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Store/SystemStatusStore.swift) (Status store), [`Sources/StatusTrioCore/UI/StatusBarController.swift`](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/StatusBarController.swift) (Menu-bar status), [`Sources/StatusTrioCore/UI/Settings/SettingsWindowController.swift`](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/Settings/SettingsWindowController.swift) (Settings window), [`Sources/StatusTrioCore/UI`](https://github.com/lingyired/status-trio/tree/main/Sources/StatusTrioCore/UI) (Status panels)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App lifecycle"]
  node_entry["App entry<br/>[main.swift]"]
  node_core["Core coordinator"]
  node_updater["App updater"]
end

subgraph group_monitoring["Status monitoring"]
  node_status["Status store"]
  node_wifi["Wi-Fi monitoring<br/>[WiFiMonitor.swift]"]
  node_battery["Battery monitoring"]
  node_volume["Volume monitoring"]
  node_bluetooth["Bluetooth devices"]
  node_network["Network details"]
  node_battery_details["Battery details"]
end

subgraph group_presentation["Status presentation"]
  node_statusbar["Menu-bar status"]
  node_popover["Status popover"]
  node_panels["Status panels"]
  node_renderer["Icon renderer"]
  node_dock["Dock icon"]
end

subgraph group_preferences["Settings and onboarding"]
  node_settings_store["Settings store"]
  node_settings_ui["Settings window"]
  node_onboarding["Icon guide"]
end

subgraph group_audio["Audio controls"]
  node_audio_controls["Audio controls"]
  node_audio_devices["Output devices"]
end

node_user(("User"))
node_services["System services"]

node_user -->|"launches"| node_entry
node_entry -->|"starts"| node_core
node_core -->|"coordinates"| node_status
node_services -->|"provides state"| node_wifi
node_services -->|"provides state"| node_battery
node_services -->|"provides state"| node_volume
node_services -->|"provides state"| node_bluetooth
node_wifi -->|"publishes status"| node_status
node_battery -->|"publishes status"| node_status
node_volume -->|"publishes status"| node_status
node_bluetooth -->|"publishes devices"| node_status
node_network -->|"reads link state"| node_services
node_user -->|"opens popover"| node_statusbar
node_status -->|"supplies snapshot"| node_statusbar
node_statusbar -->|"renders icon"| node_renderer
node_statusbar -->|"presents"| node_popover
node_popover -->|"shows sections"| node_panels
node_panels -->|"requests details"| node_battery_details
node_battery_details -->|"reads power data"| node_services
node_panels -->|"requests link details"| node_network
node_status -->|"supplies snapshot"| node_dock
node_dock -->|"renders icon"| node_renderer
node_settings_ui -->|"updates preferences"| node_settings_store
node_settings_store -->|"configures display"| node_statusbar
node_settings_store -->|"configures display"| node_dock
node_settings_ui -->|"shows options"| node_user
node_user -->|"views guide"| node_onboarding
node_user -->|"adjusts volume"| node_audio_controls
node_audio_controls -->|"selects device"| node_audio_devices
node_audio_devices -->|"controls audio"| node_services
node_settings_ui -.->|"checks updates"| node_updater

click node_entry "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrio/main.swift"
click node_core "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/StatusTrioCore.swift"
click node_status "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Store/SystemStatusStore.swift"
click node_wifi "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/WiFiMonitor.swift"
click node_battery "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/BatteryMonitor.swift"
click node_volume "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/VolumeMonitor.swift"
click node_bluetooth "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/BluetoothDeviceController.swift"
click node_network "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/NetworkConnectionMonitor.swift"
click node_battery_details "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/BatteryDetailsController.swift"
click node_statusbar "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/StatusBarController.swift"
click node_popover "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/StatusPopoverView.swift"
click node_panels "https://github.com/lingyired/status-trio/tree/main/Sources/StatusTrioCore/UI"
click node_renderer "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/Icon/StatusIconRenderer.swift"
click node_dock "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/App/AppIconController.swift"
click node_settings_store "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Settings/SettingsStore.swift"
click node_settings_ui "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/Settings/SettingsWindowController.swift"
click node_onboarding "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/OnboardingWindowController.swift"
click node_audio_controls "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/VolumeControlsView.swift"
click node_audio_devices "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Audio/CoreAudioOutputController.swift"
click node_updater "https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/App/UpdaterManager.swift"

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_entry,node_core,node_updater,node_user toneBlue
class node_status,node_wifi,node_battery,node_volume,node_bluetooth,node_network,node_battery_details toneAmber
class node_statusbar,node_popover,node_panels,node_renderer,node_dock toneMint
class node_settings_store,node_settings_ui,node_onboarding toneRose
class node_audio_controls,node_audio_devices,node_services toneIndigo
```

## Components

### App lifecycle

- [App entry](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrio/main.swift): `Sources/StatusTrio/main.swift`
- [Core coordinator](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/StatusTrioCore.swift): `Sources/StatusTrioCore/StatusTrioCore.swift`
- [App updater](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/App/UpdaterManager.swift): `Sources/StatusTrioCore/App/UpdaterManager.swift`

### Status monitoring

- [Status store](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Store/SystemStatusStore.swift): `Sources/StatusTrioCore/Store/SystemStatusStore.swift`
- [Wi-Fi monitoring](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/WiFiMonitor.swift): `Sources/StatusTrioCore/Monitoring/WiFiMonitor.swift`
- [Battery monitoring](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/BatteryMonitor.swift): `Sources/StatusTrioCore/Monitoring/BatteryMonitor.swift`
- [Volume monitoring](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/VolumeMonitor.swift): `Sources/StatusTrioCore/Monitoring/VolumeMonitor.swift`
- [Bluetooth devices](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/BluetoothDeviceController.swift): `Sources/StatusTrioCore/Monitoring/BluetoothDeviceController.swift`
- [Network details](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/NetworkConnectionMonitor.swift): `Sources/StatusTrioCore/Monitoring/NetworkConnectionMonitor.swift`
- [Battery details](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Monitoring/BatteryDetailsController.swift): `Sources/StatusTrioCore/Monitoring/BatteryDetailsController.swift`

### Status presentation

- [Menu-bar status](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/StatusBarController.swift): `Sources/StatusTrioCore/UI/StatusBarController.swift`
- [Status popover](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/StatusPopoverView.swift): `Sources/StatusTrioCore/UI/StatusPopoverView.swift`
- [Status panels](https://github.com/lingyired/status-trio/tree/main/Sources/StatusTrioCore/UI): `Sources/StatusTrioCore/UI`
- [Icon renderer](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/Icon/StatusIconRenderer.swift): `Sources/StatusTrioCore/UI/Icon/StatusIconRenderer.swift`
- [Dock icon](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/App/AppIconController.swift): `Sources/StatusTrioCore/App/AppIconController.swift`

### Settings and onboarding

- [Settings store](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Settings/SettingsStore.swift): `Sources/StatusTrioCore/Settings/SettingsStore.swift`
- [Settings window](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/Settings/SettingsWindowController.swift): `Sources/StatusTrioCore/UI/Settings/SettingsWindowController.swift`
- [Icon guide](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/OnboardingWindowController.swift): `Sources/StatusTrioCore/UI/OnboardingWindowController.swift`

### Audio controls

- [Audio controls](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/UI/VolumeControlsView.swift): `Sources/StatusTrioCore/UI/VolumeControlsView.swift`
- [Output devices](https://github.com/lingyired/status-trio/blob/main/Sources/StatusTrioCore/Audio/CoreAudioOutputController.swift): `Sources/StatusTrioCore/Audio/CoreAudioOutputController.swift`

### Other components

- **User**
- **System services**

## Connections

- User → App entry: launches
- App entry → Core coordinator: starts
- Core coordinator → Status store: coordinates
- System services → Wi-Fi monitoring: provides state
- System services → Battery monitoring: provides state
- System services → Volume monitoring: provides state
- System services → Bluetooth devices: provides state
- Wi-Fi monitoring → Status store: publishes status
- Battery monitoring → Status store: publishes status
- Volume monitoring → Status store: publishes status
- Bluetooth devices → Status store: publishes devices
- Network details → System services: reads link state
- User → Menu-bar status: opens popover
- Status store → Menu-bar status: supplies snapshot
- Menu-bar status → Icon renderer: renders icon
- Menu-bar status → Status popover: presents
- Status popover → Status panels: shows sections
- Status panels → Battery details: requests details
- Battery details → System services: reads power data
- Status panels → Network details: requests link details
- Status store → Dock icon: supplies snapshot
- Dock icon → Icon renderer: renders icon
- Settings window → Settings store: updates preferences
- Settings store → Menu-bar status: configures display
- Settings store → Dock icon: configures display
- Settings window → User: shows options
- User → Icon guide: views guide
- User → Audio controls: adjusts volume
- Audio controls → Output devices: selects device
- Output devices → System services: controls audio
- Settings window → App updater: checks updates
