# ramous19/omarchy-wireless-display architecture

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

- Interactive diagram: https://gitdiagram.com/ramous19/omarchy-wireless-display
- Repository: https://github.com/ramous19/omarchy-wireless-display

## Overview

Omarchy Wireless Display is a desktop Miracast source: users discover sinks, connect and negotiate a WFD session, then stream captured video; optional UIBC returns sink input to the desktop. The Quickshell panel and CLI are clients of a state-owning daemon. README documents duplicate/extend projection, manual sinks, diagnostics and input passthrough. The graph reflects documented capabilities where source excerpts were incomplete; persistence details and some internal wiring are not inferred.

Main entry points: [`lib/omarchycast/daemon.py`](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/daemon.py) (Cast daemon), [`lib/omarchycast/uibc.py`](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/uibc.py) (UIBC server), [`lib/omarchycast/doctor.py`](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/doctor.py) (Diagnostics), [`Panel.qml`](https://github.com/ramous19/omarchy-wireless-display/blob/master/Panel.qml) (Bar panel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User clients"]
  node_panel["Bar panel<br/>[Panel.qml]"]
  node_panel_model["Panel model<br/>[Model.js]"]
  node_qml_service["QML service<br/>[Service.qml]"]
  node_cli["CLI client<br/>[cli.py]"]
end

subgraph group_control["Daemon control"]
  node_daemon["Cast daemon<br/>[daemon.py]"]
  node_state["Cast state<br/>[state.py]"]
  node_doctor["Diagnostics<br/>[doctor.py]"]
end

subgraph group_casting["Miracast session"]
  node_discovery["Sink discovery<br/>[discovery.py]"]
  node_networkmanager["NetworkManager P2P"]
  node_p2p["P2P connection<br/>[p2p.py]"]
  node_helper["P2P helper"]
  node_sink(("Miracast sink"))
  node_rtsp["RTSP negotiation<br/>[rtsp.py]"]
  node_stream["Capture and stream<br/>[stream.py]"]
  node_capture_tools["Capture tools"]
end

subgraph group_input["Input return"]
  node_uibc["UIBC server<br/>[uibc.py]"]
  node_uinput["Virtual input<br/>[uinput.py]"]
  node_desktop_input[("Desktop input")]
end

node_user(("Desktop user"))

node_user -->|"controls"| node_panel
node_panel -->|"normalizes state"| node_panel_model
node_panel -->|"requests actions"| node_qml_service
node_user -->|"runs commands"| node_cli
node_qml_service -->|"invokes"| node_cli
node_cli -->|"sends RPC"| node_daemon
node_daemon -->|"updates state"| node_state
node_daemon -->|"scans peers"| node_discovery
node_discovery -->|"reads peers"| node_networkmanager
node_daemon -->|"connects peer"| node_p2p
node_p2p -->|"dispatches"| node_helper
node_helper -->|"configures P2P"| node_networkmanager
node_daemon -->|"negotiates session"| node_rtsp
node_rtsp -->|"exchanges RTSP"| node_sink
node_daemon -->|"starts stream"| node_stream
node_stream -->|"captures encodes"| node_capture_tools
node_stream -->|"streams RTP"| node_sink
node_daemon -->|"starts input server"| node_uibc
node_rtsp -->|"advertises port"| node_uibc
node_sink -->|"sends input"| node_uibc
node_uibc -->|"injects events"| node_uinput
node_uinput -->|"creates devices"| node_desktop_input
node_doctor -.->|"checks availability"| node_capture_tools
node_doctor -.->|"checks P2P"| node_networkmanager
node_doctor -.->|"checks access"| node_desktop_input

click node_panel "https://github.com/ramous19/omarchy-wireless-display/blob/master/Panel.qml"
click node_panel_model "https://github.com/ramous19/omarchy-wireless-display/blob/master/Model.js"
click node_qml_service "https://github.com/ramous19/omarchy-wireless-display/blob/master/Service.qml"
click node_cli "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/cli.py"
click node_daemon "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/daemon.py"
click node_state "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/state.py"
click node_doctor "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/doctor.py"
click node_discovery "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/discovery.py"
click node_p2p "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/p2p.py"
click node_helper "https://github.com/ramous19/omarchy-wireless-display/blob/master/setup/omarchy-cast-p2p-helper"
click node_rtsp "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/rtsp.py"
click node_stream "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/stream.py"
click node_uibc "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/uibc.py"
click node_uinput "https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/uinput.py"

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_panel,node_panel_model,node_qml_service,node_cli,node_user toneBlue
class node_daemon,node_state,node_doctor toneAmber
class node_discovery,node_networkmanager,node_p2p,node_helper,node_sink,node_rtsp,node_stream,node_capture_tools toneMint
class node_uibc,node_uinput,node_desktop_input toneRose
```

## Components

### User clients

- [Bar panel](https://github.com/ramous19/omarchy-wireless-display/blob/master/Panel.qml): `Panel.qml`
- [Panel model](https://github.com/ramous19/omarchy-wireless-display/blob/master/Model.js): `Model.js`
- [QML service](https://github.com/ramous19/omarchy-wireless-display/blob/master/Service.qml): `Service.qml`
- [CLI client](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/cli.py): `lib/omarchycast/cli.py`

### Daemon control

- [Cast daemon](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/daemon.py): `lib/omarchycast/daemon.py`
- [Cast state](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/state.py): `lib/omarchycast/state.py`
- [Diagnostics](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/doctor.py): `lib/omarchycast/doctor.py`

### Miracast session

- [Sink discovery](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/discovery.py): `lib/omarchycast/discovery.py`
- **NetworkManager P2P**
- [P2P connection](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/p2p.py): `lib/omarchycast/p2p.py`
- [P2P helper](https://github.com/ramous19/omarchy-wireless-display/blob/master/setup/omarchy-cast-p2p-helper): `setup/omarchy-cast-p2p-helper`
- **Miracast sink**
- [RTSP negotiation](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/rtsp.py): `lib/omarchycast/rtsp.py`
- [Capture and stream](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/stream.py): `lib/omarchycast/stream.py`
- **Capture tools**

### Input return

- [UIBC server](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/uibc.py): `lib/omarchycast/uibc.py`
- [Virtual input](https://github.com/ramous19/omarchy-wireless-display/blob/master/lib/omarchycast/uinput.py): `lib/omarchycast/uinput.py`
- **Desktop input**

### Other components

- **Desktop user**

## Connections

- Desktop user → Bar panel: controls
- Bar panel → Panel model: normalizes state
- Bar panel → QML service: requests actions
- Desktop user → CLI client: runs commands
- QML service → CLI client: invokes
- CLI client → Cast daemon: sends RPC
- Cast daemon → Cast state: updates state
- Cast daemon → Sink discovery: scans peers
- Sink discovery → NetworkManager P2P: reads peers
- Cast daemon → P2P connection: connects peer
- P2P connection → P2P helper: dispatches
- P2P helper → NetworkManager P2P: configures P2P
- Cast daemon → RTSP negotiation: negotiates session
- RTSP negotiation → Miracast sink: exchanges RTSP
- Cast daemon → Capture and stream: starts stream
- Capture and stream → Capture tools: captures encodes
- Capture and stream → Miracast sink: streams RTP
- Cast daemon → UIBC server: starts input server
- RTSP negotiation → UIBC server: advertises port
- Miracast sink → UIBC server: sends input
- UIBC server → Virtual input: injects events
- Virtual input → Desktop input: creates devices
- Diagnostics → Capture tools: checks availability
- Diagnostics → NetworkManager P2P: checks P2P
- Diagnostics → Desktop input: checks access
