# Architecture

AURA separates interface descriptions from application services. The scene graph and runtime remain in C++.

## One format, two paths

`aurac` translates `.aura` into C++ at build time. The dynamic loader builds the same files at runtime. Your application uses the same typed interface in both modes. Shared schemas and rules keep both paths consistent.

## The layers

| Module | Responsibility |
|---|---|
| aura-lang / aurac | Language, parser, schema and C++ generator |
| aura-ui | Scene graph, layout, text, input, animations and media |
| aura-core | Bindings, tasks, timers, processes, data formats and devices |
| aura-net | HTTP(S), servers, sessions, TLS and cryptography |
| aura-script | JavaScript and Lua with a shared C++ API and limits |
| aura-remote | Screenshots, events and scene data over HTTP |
| aura-preview | Preview, headless rendering and editor protocol |
| aura-webview | Optional Chromium/CEF inside the scene graph |

## The application context

The UI receives images, translations, theme values and other application data through `aura::ui::Context`. A custom context connects the framework to your application. AURA itself knows nothing about kiosk-specific orders or products.

## Threads and lifetimes

The scene graph belongs on the UI thread. Background work delivers results through `aura::post()` or `TaskRunner`; observable values keep bindings current. The [application documentation](application.md) and [lifetime rules](state-bindings.md) explain the details.

## Rendering

Skia draws 2D graphics and text. SDL3 handles windows, input and the GL context. Headless PNG output enables visual tests without a window. The [graphics documentation](graphics.md) explains rendering, layout and background work.

## Build options

UI, networking, scripting and WebView can be configured separately. WebView requires CEF and is disabled by default. See [Build and tools](build-tools.md) and [WebView](webview.md).
