Repository structure
The repository separates the Rust UI engine from framework adapters and
applications. Rust applications depend on the engine and runtime crates they
need; TSX applications use the host and framework packages under packages/.
Top-level directories
| Path | Contents |
|---|---|
assets/fonts/ |
Fonts and licenses shared by engine tests and applications |
apps/gallery/ |
Solid and React TSX gallery, asset host, and QuickJS runner |
crates/ |
Rust engine, platform, and integration libraries |
mobile/android/ |
Gradle NativeActivity shell for the TSX gallery |
packages/ |
TypeScript host, Solid and React adapters, and shared widgets |
docs/ |
Architecture, contracts, platform limits, and contributor guides |
scripts/ |
Quality, profiling, packaging, release, and development tools |
tests/scripts/ |
Tests for repository automation |
Dependency direction
Rust applications TSX applications
| |
argui-runtime @argui/widgets
| @argui/react / @argui/solid
| |
| @argui/host
+-------------------+----------------------+
|
argui-host + argui-schema
|
ui + layout + renderer + platform
|
core + paint + text + animation + accessibilityDependencies point toward the engine. Lower Rust layers do not import
application or framework code. argui-runtime composes native Rust
applications; the TSX adapters submit host transactions through
argui-host and the shared schema. Both paths use the same retained UI and
rendering engine.
Crates
The “Depends on” column lists workspace dependencies, omitting optional entries when the purpose already names the integration.
| Crate | Purpose | Depends on |
|---|---|---|
argui-core |
Geometry, color, input, and shared identifiers | — |
argui-accessibility |
Semantic tree plus native/browser adapters | core |
argui-animation |
Timelines, interpolation, springs, and decay | core |
argui-inspect |
Renderer-independent inspection records | core |
argui-paint |
Ordered renderer-independent display list | core |
argui-media |
Stable media assets and optional image/SVG decoding | core, paint |
argui-platform |
Winit windows, input, clipboard, tray, and OS adapters | core, paint |
argui-text |
Shaping, bidi, fallback, cursor geometry, and glyphs | core |
argui-render |
WGPU surfaces, resources, batching, effects, and WGSL validation | core, paint, text |
argui-theme |
Theme tokens and appearance settings | core |
argui-ui |
Retained elements, styles, events, focus, and semantics | core, accessibility, animation, paint, text |
argui-layout |
Retained Taffy Flexbox and Grid adapter | core, paint, text, ui |
argui-effects |
Optional WGSL effect definitions | paint, render, ui |
argui-i18n |
Optional Fluent catalogs and locale negotiation | — |
argui-updater |
Signed update checks, downloads, and installation | — |
argui-webview |
Retained native WebViews and browser frames | core, layout, ui |
argui-runtime |
Models, scheduling, windows, layout, and rendering | engine and platform crates |
argui-host |
Native transaction host used by the TSX adapters | schema, ui, runtime |
argui-schema |
Shared element and transaction contract | core |
Publishable Rust engine crates use the root workspace release policy. The gallery's application-only Rust crates have independent manifests and are not part of the root Cargo workspace.
Target selection
| Target | Integration |
|---|---|
| Linux, Windows, macOS | Rust applications use argui-runtime and the needed engine crates |
| WebAssembly | Rust cdylib with a #[wasm_bindgen(start)] launcher |
| Android | argui-runtime/mobile/android feature; the repository gallery uses its QuickJS host and TSX bundles |
| iOS | argui-runtime/mobile/ios feature; applications provide their own native shell |
Desktop and Web implementations are selected by Cargo target configuration. Android and iOS entry features are separate and target-gated. This repository currently packages the Android gallery; it no longer contains an iOS sample application or Xcode project. Packaging details are in native mobile.
Choosing a location
- Put shared value types in
argui-coreonly when several lower layers need them and they carry no platform or GPU dependency. - Put immutable drawing descriptions in
argui-paint; put resource upload and shader execution inargui-render. - Put retained interaction behavior in
argui-ui; put framework-neutral TSX widget logic inpackages/widgets/src/sharedand Solid/React views in the matchingsolidandreactdirectories. - Put JavaScript host integration in
packages/hostand framework-specific rendering adapters inpackages/solidorpackages/react. - Put Winit and OS APIs in
argui-platform; route application-visible results throughargui-runtime. - Put runnable TSX demonstrations in
apps/gallery; keep engine behavior in its owning Rust crate.
Adding a cross-layer type is a design decision. Prefer translating it at the boundary over making a lower crate depend on a higher one.
Publication
python3 scripts/release.py package reads Cargo metadata, validates public
manifests, computes the dependency order, and compiles every archive. The CI
publisher uses the same order, skips versions already owned by the project, and
publishes crates in dependency order. Do not maintain a second hard-coded order
in docs.
See releases for the commit trigger and recovery procedure.