Document-Driven UI for SwiftUI, Compose, and React. Define interface structure and behavior once in JSON; Milano validates it at the gate and renders it natively through your own components. Client-only and design-system-agnostic: your design system draws every pixel, and Milano guarantees that what reaches it is validated, typed, and behaviorally identical on every platform.
Milano is not server-driven UI (it never talks to a server), not a SaaS (nothing hosted, nothing to sign up for), and not a design system (it draws nothing).
- Playground · the published engine running in the browser: live state, expressions, dispatched actions you can complete, both observability streams. Nothing to install.
- Getting started · one promo banner from vocabulary to native UI, step by step, on every platform.
- Documentation · philosophy, guidelines, writing documents, expressions, guardrails, and the API references.
- Specifications · the contract itself: document model, vocabulary schema, expression language, state and actions, runtime API.
| Repository | What lives there |
|---|---|
| specs | The normative contract: specifications, JSON Schemas, the conformance suite (1,600+ vectors), and the reference tools. Engine-free, and the source of truth. |
| sdk | Three independent engines (Swift, Kotlin Multiplatform, TypeScript), the React binding, the milano CLI, the consumer docs, and sample apps for iOS, Android, desktop, and React Native. Every engine passes the full conformance suite; that is the definition of correct. |
| playground | The browser playground: the published engine, Monaco editors, and Material renderers. Also the worked example of the React binding. |
| get-milano.github.io | The site at get-milano.dev. |
- Swift / SwiftUI · Swift Package Manager:
https://github.com/get-milano/sdk.git - Kotlin / Compose · Maven Central:
dev.get-milano:engine-compose - TypeScript / React · npm:
@get-milano/core,@get-milano/react, and themilanoCLI as@get-milano/cli
Current versions and full setup are in Getting started.
