Canonical repository: github.com/get-milano/specs. The engines and sample apps live in github.com/get-milano/sdk.
Try the contract in the browser: the Milano Playground validates vocabularies and documents against these schemas and the reference checker, live.
Milano is a client-only, design-system-agnostic Document-Driven UI (DDUI) framework for SwiftUI and Compose. Document-driven rather than server-driven: Milano is agnostic of how the document is obtained. Milano targets UI toolkits, not operating systems: it is usable wherever SwiftUI runs (iPhone, iPad, macOS, watchOS) and wherever Compose runs (Android, desktop). The first sample apps target iOS and Android.
Milano consumes UI documents and defines the mechanics of document-driven UI: the document model, its expression language, its state and action models, and the runtimes that materialize documents into native UI (SwiftUI, Compose). The consumer defines everything else: the component vocabulary and its visual rendering. Documents carry structure and declarations only, never data values.
Milano is not server-driven UI (it never talks to a server), not a SaaS (there is nothing hosted, nothing to sign up for), and not a design system (it draws nothing).
Version 1.0 targets two capabilities: banners and interstitials, and simple document-defined forms. The same mechanics serve whole screens beyond those targets, such as user profile screens and intermediate screens like a catalog. Contract v1.0 is stable: the versioning and tolerance rules below are promises, relied on by the 1.0 SDK release, and changes ship as amendments that bump the contract version.
| # | Spec | Status |
|---|---|---|
| 00 | Foundations | Stable |
| 01 | Document model | Stable |
| 02 | Vocabulary schema | Stable |
| 03 | Expression language | Stable |
| 04 | State & actions | Stable |
| 05 | Conformance suite | Stable |
| 06 | Runtime API | Stable |
Worked examples for both v1.0 capabilities: Examples, with executable vectors in conformance/.
Every spec moves through three statuses:
- Beta: the content is being shaped. Anything may change, without trace.
- Review: the content is complete and precise. Changes require recording what changed and why in the spec's history.
- Stable: the spec is normative. Runtimes and conformance vectors may rely on it; changes happen only through an amendment that bumps the contract version.
This repository also renders as a website via GitHub Pages (Jekyll, just-the-docs theme); index.md is the site's landing page.
The specifications are licensed under CC BY 4.0: share and adapt freely, with credit to Ezequiel (Kimi) Aceto and the Milano project.
