Your backend
paints the screen.
Flow-UI turns JSON into native SwiftUI. Pages, widgets, actions and theming, all driven by your server. Open the docs, try the playground, and ship.

How the screen gets to the phone.
Flow-UI is a server driven UI framework for SwiftUI. Your backend sends JSON; the client renders native iOS screens. Teams also call this backend driven UI, API driven UI, or remote UI. Same split: the server describes the screen, SwiftUI paints it. No WebView, no HTML overlay, no App Store release to change a layout.
The contract is a page of sections of widgets. A component registry maps each type string to a SwiftUI view. Actions, sheets and mutations travel as data. The playground renders any payload you paste. Longer form lives on the blog: Server driven UI for SwiftUI.
Native where it counts.
Dynamic where it matters.
Open widget registry
One call registers a widget: the backend type string, its payload model, its SwiftUI view. No framework enums, no forks.
Pages that refuse to die
Unknown types and malformed payloads are contained with exact key path diagnostics. One bad widget never blanks a screen.
Actions as data
Taps carry declarative actions: toasts, sheets, API mutations, deeplinks. Handlers chain, so your router stays yours.
Backend controlled chrome
Margins, padding, corners, gradients, borders and widths all come from the response, applied in one fixed order.
Theming that plugs in
Hex colors with dark variants out of the box; design system tokens through one protocol. Light and dark for free.
Loading states built in
Shimmer, skeletons and gradients ship in the framework, per widget and per page, toggleable from the backend.
JSON in. Interface out.
The pipeline is deliberately small: decode through the registry, contain anything broken, render what remains. Every step is observable in the debug console.
Response
One JSON document describes the whole screen: sections, widgets, chrome and actions.
Registry
Each type string resolves to a registered widget. Your app extends the table in one line.
Native render
Real SwiftUI views with real gestures, scrolling and animation. No WebViews anywhere.
Unknown widget on the way? It drops to a labelled placeholder with its key path in diagnostics, and the rest of the page renders. Forward compatibility is the default.
Ship your next screen from the server.
One package, zero dependencies, iOS 17 and up. Free and open source under the MIT licence.


