HotLayout — integrator documentation
HotLayout is server-driven UI: your team assembles a screen in a visual builder and publishes it as JSON, and your app draws it with a renderer package — so a screen changes without an app release.
This documentation is for the people who connect the two: the developer of the mobile or web app, the backend developer, and whoever reviews the integration for security.
Start here#
| If you are | Read |
|---|---|
| deciding whether this fits your product | Why |
| a Flutter developer | Quickstart for Flutter |
| a React or Next.js developer | Quickstart for React |
| an iOS developer (Swift, SwiftUI) | Quickstart for iOS |
| an Android developer (Kotlin, Jetpack Compose) | Quickstart for Android |
| a backend developer | Backend guide, then Delivery options |
| putting the builder into your own back-office | Embedding the builder |
| reviewing security | Delivery options for who can read what and how a webhook is verified; then The document is untrusted input for the web and The action catalog for mobile |
| writing a renderer for another platform | Widget reference and Compatibility policy |
Videos#
- Ship screens, not releases (2 min) — the product overview.
- What is server-driven UI? Explained in two minutes (2 min)
- Server-driven UI vs WebView vs over-the-air updates: how to change an app without a release (2 min)
- Where your users' data lives — HotLayout for banks and fintech (2 min)
- React quickstart — render a server-driven screen with one component (3 min)
- Actions, analytics and data in your code (3 min)
How the pieces fit#
builder ──publish──▶ document (JSON) + theme (JSON)
│
webhook to your backend, or a direct address
│
▼
your app: renderer( document, theme, data from your backend ) ──▶ screen| Piece | What it is | Who provides it |
|---|---|---|
| Builder | the editor in a browser where screens are assembled and published | used by your managers and designers |
| Document | one JSON file with a set of screens | published by the builder |
| Theme | one JSON file with the values of colors, spacing and text styles | published by the builder |
| Data dictionary | the list of data paths a screen may be bound to | agreed with your backend team |
| Data | the values at those paths for the current user | your backend, passed in by your app |
| Renderer | a package in your app that draws the document | hotlayout_flutter, @hotlayout/react, the native readers for iOS and Android |
The words mean the same on every page: a document is what is published, a renderer is the package that draws it, the host is your app around the renderer.
The packages#
| Platform | Install | Source |
|---|---|---|
| Flutter | flutter pub add hotlayout_flutter |
pub.dev · github.com/hotlayout/hotlayout-flutter |
| React | npm install @hotlayout/react |
npm · github.com/hotlayout/hotlayout-react |
Both are open source and draw the same JSON.
There are also native readers, which draw the same JSON too:
| Platform | Reader | Access |
|---|---|---|
| iOS | a Swift package, SwiftUI, iOS 16+ | on request, with a licence or a trial · Quickstart for iOS |
| Android | a Kotlin library, Jetpack Compose, API 26+ | on request, with a licence or a trial · Quickstart for Android |
The native readers are not open source and are not in a public registry; write to contact@hotlayout.com to ask for access.
All pages#
Decide
- Why — what the product does and what it deliberately does not do.
Integrate
- Quickstart for Flutter — from an empty app to a published screen on a phone.
- Quickstart for React — the same for a Vite or Next.js app.
- Quickstart for iOS — the native reader for Swift and SwiftUI (available on request).
- Quickstart for Android — the native reader for Kotlin and Jetpack Compose (available on request).
- Delivery options — how a published screen gets from the builder to your app: a signed webhook or a direct address.
- Backend guide — the data your backend returns, how to accept a publication, how to serve versions.
- Embedding the builder — the
<hotlayout-builder>element in your own back-office.
Understand
- Data dictionary — the fields and lists your backend promises to every screen.
- Theme — tokens, values and how a rebrand ships without a release.
- Localization and RTL — languages inside a document and right-to-left scripts.
Look up
- Widget reference — every widget and property, generated from the contract.
- Compatibility policy — what a renderer does with a document it does not fully understand.
- Contract changelog — what each contract version added.
The contracts#
Everything here rests on versioned artifacts. Each has its own version, because a rebrand does not add widgets and a new widget does not change a palette.
| Contract | Says | File | Current version |
|---|---|---|---|
| Screen schema | which widgets exist and what shape a node's style has | screen-schema.json |
9.19.0 |
| Theme | which tokens exist and what they mean | theme.json |
4.0.1 |
| Data dictionary | which data a screen may ask for, and in what shape | data-contract.json |
1.5.0 |
| Icon set | the drawing behind every icon name | icons.json |
1.0.0 |
| Version rule | how a renderer decides whether it understands a document | described in Compatibility policy | — |
The builder cannot produce a document that breaks the screen schema, and it checks every data binding against the dictionary before a publication leaves.
Where the files are. The four JSON files, and the shared tables of cases (fixtures/…) that other pages refer to, are in the repository of the Flutter package, in assets/contract — in the repository, not in the package you install from pub.dev or npm. A file name on these pages — screen-schema.json, fixtures/locale/locale-cases.json — is a path inside that folder. Your project's own data dictionary is downloaded from the admin; see Data dictionary.
Questions#
Write to contact@hotlayout.com.