Generative UI,
native on every platform.
An agent sends A2UI JSON. Exponential UI paints it natively on web, iOS, Android and desktop, in your theme.



The model decides what to show. The platform decides how it looks.
A2UI: UI as data, never code. The client renders it with its own components.
- 01
The agent writes A2UI
A flat list of components, a data model and the actions it wants back. The catalog prompt teaches all 70 components in ~6.2k tokens.
- 02
Your host routes it
Messages in over JSONL, SSE, WebSocket or MCP; data sources bound; only the functions your policy allows run; actions go back.
- 03
A renderer paints it natively
React, SwiftUI, Compose or gpui, with the platform's own views, in your theme, from one shared layout.
One surface, four native toolkits.
@exponential-at/ui-reactThe reference renderer: real CSS on shadcn and Radix, themes compiled to scoped variables, the TypeScript reducer.The React guide iOS + macOSSwiftUIExponentialUINative SwiftUI views at the frames the Rust core lays out; text measured in batches through the UniFFI facade.The SwiftUI guide AndroidJetpack Composeat.exponential:ui-composeThe Compose twin of the SwiftUI painter on the same Rust core. No WebView, Android 8 and later.The Jetpack Compose guide Desktopgpuiexponential-ui-gpuiThe Rust core in-process, painted by gpui on macOS, Windows and Linux. No HTML, no webview.The gpui guide Why Exponential UI
One catalog
70 components, layout to charts, with shadcn's names and variants. A2UI basic surfaces map onto it unchanged.
Native everywhere
No webviews, no downloaded code. One Rust core lays out iOS, Android and desktop; the web matches its frames.
Themable at runtime
One JSON file of tokens and recipes, loaded at runtime by every renderer.
Extensible
New components as an extension catalog: a painter per platform, or a macro with none.
Conformance-tested
24 suites, 1,660 cases, replayed by every renderer in CI, third-party ones too.
Open source
Apache-2.0: catalog, themes, host API and all four renderers.
Packages
One ui-v* tag publishes all of them at one version. Nothing is published yet: install from the repository as each guide shows.
| Package | Registry | What | Until it is published |
|---|---|---|---|
@exponential-at/ui | npm | The catalog, themes, TypeScript reducer, host API and conformance suite. | bun samples/exponential-ui/pack-local.ts packs the tarball |
@exponential-at/ui-react | npm | The React renderer. | the same tarballs, installed with npm |
exponential-ui | crates.io | The Rust core: reducer, themes, taffy layout, layers, lists. | a path or git dependency on the repo |
exponential-ui-ffi | bundled | The UniFFI facade. It ships inside the Swift and Kotlin artifacts, so you never install it on its own. | built by build-ios.sh / build-android.sh |
exponential-ui-gpui | crates.io (later) | The gpui painter. It stays a git dependency until gpui itself is on crates.io. | a path or git dependency on the repo |
ExponentialUI | SwiftPM | The SwiftUI painter (iOS 17, macOS 14), from github.com/Niach/exponential-ui-swift. | the package by path, after build-ios.sh |
at.exponential:ui-compose | Maven Central | The Compose painter (minSdk 26), with ui-compose-primitives. | publishToMavenLocal, then mavenLocal() |
@exponential-at on npm, the crate name, Niach/exponential-ui-swift, the at.exponential Maven namespace). Release runbookExponential runs on it
Exponential is a host like any other: its issue rows, run rows and chips are the first extension catalog; its Devices screen is a template package the web app and the desktop IDE both render.