# dqsjqian/aria architecture

> Architecture diagram of the GitHub repository dqsjqian/aria, 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/dqsjqian/aria
- Repository: https://github.com/dqsjqian/aria

## Overview

Aria is a cross-platform C++23 MVVM framework: application logic lives in toolkit-independent ViewModels, reactive properties derive and publish state, and BindingEngine connects that state to native views through platform adapters. The principal workflow is ViewModel state → reactive computation → binding → platform view; two-way bindings and the HTTP adapter also carry user edits back. The README documents async commands/coroutines, observable and derived lists, validation, forms, navigation, and runtime facilities. Several of those paths are represented by their public headers; wiring beyond the sampled implementation is not inferred.

Main entry points: [`modules/binding/include/aria/binding/view_adapter.hpp`](https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/view_adapter.hpp) (View Adapter Contract), [`modules/core/include/aria/property.hpp`](https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/property.hpp) (Property / Computed), [`modules/binding/include/aria/binding/view_model.hpp`](https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/view_model.hpp) (ViewModel), [`modules/adapters/http/src/http_adapter.cpp`](https://github.com/dqsjqian/aria/blob/main/modules/adapters/http/src/http_adapter.cpp) (HTTP Adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_reactive["Reactive Core"]
  node_property["Property / Computed<br/>[property.hpp]"]
  node_reactive_graph["Dependency Graph<br/>[graph.hpp]"]
  node_observable_list["Observable Lists"]
  node_derived_lists["Derived Lists<br/>[sorted_list.hpp]"]
end

subgraph group_application["Application Models"]
  node_viewmodel["ViewModel<br/>[view_model.hpp]"]
  node_command_validation["Commands &amp; Validation<br/>[validator.hpp]"]
  node_forms_navigation["Forms &amp; Navigation<br/>[form.hpp]"]
end

subgraph group_binding["Binding Layer"]
  node_binding_engine["BindingEngine<br/>[binding_engine.hpp]"]
  node_adapter_contract["View Adapter Contract<br/>[view_adapter.hpp]"]
end

subgraph group_platform["Platform Adapters"]
  node_qt_adapter["Qt6 Adapter<br/>[qt_adapter.cpp]"]
  node_appkit_adapter["AppKit Adapter<br/>[AppKitAdapter.hpp]"]
  node_uikit_adapter["UIKit Adapter<br/>[UIKitAdapter.hpp]"]
  node_jni_adapter["JNI Adapter<br/>[JniAdapter.cpp]"]
  node_http_adapter["HTTP Adapter<br/>[http_adapter.cpp]"]
  node_web_client["Browser SDK<br/>[aria_client.js]"]
end

subgraph group_services["Async Runtime"]
  node_async["Async Commands<br/>[async_command.hpp]"]
  node_dispatcher["Dispatcher<br/>[dispatcher.cpp]"]
  node_abi_signals["Shared Signals<br/>[signal.hpp]"]
end

node_developer(("Application Developer"))
node_user(("End User"))

node_developer -->|"defines"| node_viewmodel
node_user -->|"uses view"| node_qt_adapter
node_user -->|"uses view"| node_appkit_adapter
node_user -->|"uses view"| node_uikit_adapter
node_user -->|"uses view"| node_jni_adapter
node_viewmodel -->|"owns state"| node_property
node_property -->|"tracks dependencies"| node_reactive_graph
node_property -->|"notifies changes"| node_binding_engine
node_binding_engine -->|"calls"| node_adapter_contract
node_adapter_contract -->|"implemented by"| node_qt_adapter
node_adapter_contract -->|"implemented by"| node_appkit_adapter
node_adapter_contract -->|"implemented by"| node_uikit_adapter
node_adapter_contract -->|"implemented by"| node_jni_adapter
node_adapter_contract -->|"implemented by"| node_http_adapter
node_qt_adapter -->|"updates view"| node_user
node_appkit_adapter -->|"updates view"| node_user
node_uikit_adapter -->|"updates view"| node_user
node_jni_adapter -->|"updates view"| node_user
node_user -->|"sends edits"| node_http_adapter
node_http_adapter -->|"SSE state"| node_web_client
node_web_client -->|"REST edits"| node_http_adapter
node_observable_list -->|"supplies changes"| node_derived_lists
node_viewmodel -->|"uses"| node_command_validation
node_viewmodel -->|"uses"| node_forms_navigation
node_command_validation -->|"runs asynchronously"| node_async
node_async -->|"schedules work"| node_dispatcher
node_binding_engine -->|"marshals callbacks"| node_dispatcher
node_property -->|"publishes signals"| node_abi_signals

click node_viewmodel "https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/view_model.hpp"
click node_property "https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/property.hpp"
click node_reactive_graph "https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/reactive/graph.hpp"
click node_observable_list "https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/observable_list.hpp"
click node_derived_lists "https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/derived/sorted_list.hpp"
click node_command_validation "https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/validator.hpp"
click node_forms_navigation "https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/form.hpp"
click node_binding_engine "https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/binding_engine.hpp"
click node_adapter_contract "https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/view_adapter.hpp"
click node_qt_adapter "https://github.com/dqsjqian/aria/blob/main/modules/adapters/qt6/src/qt_adapter.cpp"
click node_appkit_adapter "https://github.com/dqsjqian/aria/blob/main/modules/adapters/appkit/include/aria/adapters/appkit/AppKitAdapter.hpp"
click node_uikit_adapter "https://github.com/dqsjqian/aria/blob/main/modules/adapters/uikit/include/aria/adapters/uikit/UIKitAdapter.hpp"
click node_jni_adapter "https://github.com/dqsjqian/aria/blob/main/modules/adapters/jni/src/JniAdapter.cpp"
click node_http_adapter "https://github.com/dqsjqian/aria/blob/main/modules/adapters/http/src/http_adapter.cpp"
click node_web_client "https://github.com/dqsjqian/aria/blob/main/modules/adapters/http/web-sdk/aria_client.js"
click node_async "https://github.com/dqsjqian/aria/blob/main/modules/async/include/aria/async/async_command.hpp"
click node_dispatcher "https://github.com/dqsjqian/aria/blob/main/modules/runtime/src/dispatcher.cpp"
click node_abi_signals "https://github.com/dqsjqian/aria/blob/main/modules/abi/include/aria/abi/signal.hpp"

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_property,node_reactive_graph,node_observable_list,node_derived_lists,node_user toneBlue
class node_viewmodel,node_command_validation,node_forms_navigation toneAmber
class node_binding_engine,node_adapter_contract toneMint
class node_qt_adapter,node_appkit_adapter,node_uikit_adapter,node_jni_adapter,node_http_adapter,node_web_client toneRose
class node_async,node_dispatcher,node_abi_signals,node_developer toneIndigo
```

## Components

### Reactive Core

- [Property / Computed](https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/property.hpp): `modules/core/include/aria/property.hpp`
- [Dependency Graph](https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/reactive/graph.hpp): `modules/core/include/aria/reactive/graph.hpp`
- [Observable Lists](https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/observable_list.hpp): `modules/core/include/aria/observable_list.hpp`
- [Derived Lists](https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/derived/sorted_list.hpp): `modules/core/include/aria/derived/sorted_list.hpp`

### Application Models

- [ViewModel](https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/view_model.hpp): `modules/binding/include/aria/binding/view_model.hpp`
- [Commands & Validation](https://github.com/dqsjqian/aria/blob/main/modules/core/include/aria/validator.hpp): `modules/core/include/aria/validator.hpp`
- [Forms & Navigation](https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/form.hpp): `modules/binding/include/aria/binding/form.hpp`

### Binding Layer

- [BindingEngine](https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/binding_engine.hpp): `modules/binding/include/aria/binding/binding_engine.hpp`
- [View Adapter Contract](https://github.com/dqsjqian/aria/blob/main/modules/binding/include/aria/binding/view_adapter.hpp): `modules/binding/include/aria/binding/view_adapter.hpp`

### Platform Adapters

- [Qt6 Adapter](https://github.com/dqsjqian/aria/blob/main/modules/adapters/qt6/src/qt_adapter.cpp): `modules/adapters/qt6/src/qt_adapter.cpp`
- [AppKit Adapter](https://github.com/dqsjqian/aria/blob/main/modules/adapters/appkit/include/aria/adapters/appkit/AppKitAdapter.hpp): `modules/adapters/appkit/include/aria/adapters/appkit/AppKitAdapter.hpp`
- [UIKit Adapter](https://github.com/dqsjqian/aria/blob/main/modules/adapters/uikit/include/aria/adapters/uikit/UIKitAdapter.hpp): `modules/adapters/uikit/include/aria/adapters/uikit/UIKitAdapter.hpp`
- [JNI Adapter](https://github.com/dqsjqian/aria/blob/main/modules/adapters/jni/src/JniAdapter.cpp): `modules/adapters/jni/src/JniAdapter.cpp`
- [HTTP Adapter](https://github.com/dqsjqian/aria/blob/main/modules/adapters/http/src/http_adapter.cpp): `modules/adapters/http/src/http_adapter.cpp`
- [Browser SDK](https://github.com/dqsjqian/aria/blob/main/modules/adapters/http/web-sdk/aria_client.js): `modules/adapters/http/web-sdk/aria_client.js`

### Async Runtime

- [Async Commands](https://github.com/dqsjqian/aria/blob/main/modules/async/include/aria/async/async_command.hpp): `modules/async/include/aria/async/async_command.hpp`
- [Dispatcher](https://github.com/dqsjqian/aria/blob/main/modules/runtime/src/dispatcher.cpp): `modules/runtime/src/dispatcher.cpp`
- [Shared Signals](https://github.com/dqsjqian/aria/blob/main/modules/abi/include/aria/abi/signal.hpp): `modules/abi/include/aria/abi/signal.hpp`

### Other components

- **Application Developer**
- **End User**

## Connections

- Application Developer → ViewModel: defines
- End User → Qt6 Adapter: uses view
- End User → AppKit Adapter: uses view
- End User → UIKit Adapter: uses view
- End User → JNI Adapter: uses view
- ViewModel → Property / Computed: owns state
- Property / Computed → Dependency Graph: tracks dependencies
- Property / Computed → BindingEngine: notifies changes
- BindingEngine → View Adapter Contract: calls
- View Adapter Contract → Qt6 Adapter: implemented by
- View Adapter Contract → AppKit Adapter: implemented by
- View Adapter Contract → UIKit Adapter: implemented by
- View Adapter Contract → JNI Adapter: implemented by
- View Adapter Contract → HTTP Adapter: implemented by
- Qt6 Adapter → End User: updates view
- AppKit Adapter → End User: updates view
- UIKit Adapter → End User: updates view
- JNI Adapter → End User: updates view
- End User → HTTP Adapter: sends edits
- HTTP Adapter → Browser SDK: SSE state
- Browser SDK → HTTP Adapter: REST edits
- Observable Lists → Derived Lists: supplies changes
- ViewModel → Commands & Validation: uses
- ViewModel → Forms & Navigation: uses
- Commands & Validation → Async Commands: runs asynchronously
- Async Commands → Dispatcher: schedules work
- BindingEngine → Dispatcher: marshals callbacks
- Property / Computed → Shared Signals: publishes signals
