Server-driven UI for Flutter
Change your app’s screens without shipping a release
Design screens in the browser and publish them. Your Flutter app renders them live with the open-source Stac package, and you can roll back in one click.
{
"type": "scaffold",
"appBar": {
"type": "appBar",
"title": {
"type": "text",
"data": "Summer sale"
}
},
"body": {
"type": "padding",
"padding": {
"left": 16,
"top": 16,
"right": 16,
"bottom": 16
},
"child": {
"type": "column",
"crossAxisAlignment": "start",
"children": [
{
"type": "text",
"data": "20% off everything until Sunday."
},
{
"type": "elevatedButton",
"child": {
"type": "text",
"data": "Shop now"
},
"onPressed": {
"actionType": "none"
}
}
]
}
}
}import 'package:flutter/material.dart';
import 'package:stac/stac.dart';
class SummerSaleScreen extends StatelessWidget {
const SummerSaleScreen({super.key});
@override
Widget build(BuildContext context) {
return Stac.fromNetwork(
context: context,
request: StacNetworkRequest(
url: 'https://sdui.in/api/v1/screens/summer_sale?apiKey=sdui_your_project_key',
method: Method.get,
),
loadingWidget: (context) => const Center(child: CircularProgressIndicator()),
errorWidget: (context, error) => const Center(child: Text('Could not load this screen')),
);
}
}How it works
Three steps from idea to every phone
No app-store review, no forced update. Your app keeps its own navigation, auth and logic.
- Step 1
Design
Build the screen in the visual editor, or edit its Stac JSON directly. Both views edit the same draft.
- Step 2
Publish
Publishing validates the screen against the Stac 1.5 contract and stores an immutable version.
- Step 3
Render
Your Flutter app loads the screen with Stac.fromNetwork. Changes typically reach users within a minute.
Features
Built for teams that ship Flutter apps
Visual and code editing
Drag widgets onto a device frame, or switch to Code view. Edits sync both ways.
Validated before it ships
Unknown widgets, bad enum values and unreadable colours are caught at publish, not on a customer’s phone.
Versions and rollback
Every publish is a numbered version. Roll back or unpublish a screen in one click.
Stable screen URLs
Renaming a screen never changes its URL. Changing a URL is an explicit action with a warning.
Cached at the edge
Screens requested by URL with an apiKey are served from the CDN with ETags, so those app launches rarely touch the database.
Read-only API keys
Each project has a publishable key that can only read published screens. Rotate it with a 7-day grace period.
Start with one screen
The free plan includes one project with three screens. Add Stac to your app and publish your first screen in an afternoon.