


Server Driven UI framework for Flutter: Stac
By:
Sunil Kumar Muduli
22 May 2025
Flutter is well known for its fast development cycles and beautiful, high-performance apps. But it lacks when it comes to dynamically updating UI without pushing new app updates. To solve it, let's explore Stac, a Server-Driven UI (SDUI) framework for Flutter.

Rather than jumping into stac directly, let’s first discuss about UI approaches.
Client-Driven UI
In the general Client-Driven UI approach, the app’s UI is tightly coupled with its codebase. Essentially, the client (your app) handles everything, UI layouts, business logic, and rendering. Want to change button's look or add a new feature? You’ll need to update the app’s code, test it, and then push the update to the app stores. And then you have to wait for approvals from stores then wait for users to their apps.
Limitations of Client-Driven UI:
Slow Update Cycles: Even small UI changes need a complete update process.
Scalability Issues: Managing multiple platforms becomes a tidious work as every app has its own codebase.
Lack of Flexibility: Changes aren’t easy. You are depending on app store approvals and user behavior.
Server-Driven UI (SDUI)
In Server-Driven UI (SDUI) the server drives the UI, rather than the UI being hardcoded in the app itself. Instead of the client app determining what to render, it primarily focuses on how to render the components defined by the server.
working of Server-Driven UI:
The server defines the app’s UI (generaly in a lightweight format like JSON).
These definitions get recieved by the client (your app) and renders the UI.
And if you want to change the UI, just update the server, and the app shows them within no time. You don't have to send the app updates
Introducing Stac

Say Hello to Stac (formerly Mirai), the powerful Server-Driven UI (SDUI) framework built specifically for Flutter. With Stac, you can build stunning, cross-platform applications dynamically, using JSON to define your UI in real time.
Installing Stac:
First add the Stac library into the pubspec.yaml file of the Flutter project.
dependencies: stac: ^<latest-version>
To install the package run the below given command in your terminal:
flutter pub get
Import the Stac package in your Dart file:
import 'package:stac/stac.dart';
Initializing Stac:
In the main function, initialize Stac to set up the configurations needed, and make your app ready for rendering UI from JSON.
void main() async { await Stac.initialize(); runApp(const MyApp()); }
That’s it. Now that your app is SDUI packed you can use Stac.fromJson(), Stac.fromAsset() or Stac.fromNetwork() method to render UI.
Defining Stac JSONs:
Stac JSONs are designed to feel familiar, especially if you’ve worked with Flutter’s widget structure. Stac JSONs are the JSON equivalent of Flutter widgets. They have the same hierarchy and logic, but in a different format.
Here’s the magic: if you are able to write the Flutter widget tree, you can easily define a Stac JSON.
Let’s compare:
Flutter Widget | Stac JSON Equivalent |
---|---|
Column( children: [ Text("Hello, Stac!"), ElevatedButton( onPressed: () => print("Button Pressed"), child: Text("Click Me"), ), ], ) | { "type": "column", "children": [ { "type": "text", "data": "Hello, Stac!" }, { "type": "elevatedButton", "onPressed": { "action": "print", "message": "Button Pressed" }, "child": { "type": "text", "data": "Click Me" } } ] } |
Key Benefits of Stac:
Instant UI Updates: Skip the app updates and approvals from store. With SDUI, changes made on the server gets visible within no time, making sure your app stays updated at all the time.
Easy Personalization: Deliver personalized experiences to users by providing different UIs based on preferences, behaviors, or demographics, without changing client side code.
Simplified Maintenance: Manage your UI logic centrally on the server. This reduces the complexity of maintaining multiple app versions and keeps updates consistent across platforms.
Easy A/B Testing: Experiment with multiple UI versions in real-time by serving variant payloads directly from the server. Get insights and iterate faster without extra development cycles.
Reduced Development Overhead: Focus your efforts on backend logic while the server handles UI updates. This reduces client-side development, and makes your workflow more efficient.
Live Example:

Conclusion
Stac brings the power of Server-Driven UI to Flutter, solving the limitations of static, client-driven UI. With real-time UI updates, easy personalization, and reduced app update cycles, Stac becomes a game changer for building dynamic Flutter apps. If you're aiming for faster development, scalable UI management, and better user experiences, Stac is the future of Flutter UI development.
Frequently Asked Questions
Q. Is Stac suitable for production apps?
A. Yes. Stac is actively maintained and used in real-world Flutter applications. It enables dynamic UI updates without app store resubmissions, making it ideal for production environments where rapid iteration and flexibility are important.
Q. Can I integrate Stac with existing Flutter widgets?
A. Absolutely. Stac is designed to work seamlessly with standard Flutter widgets. You can blend server-driven components with your existing UI, allowing for a hybrid approach that leverages both dynamic and static elements.
Q. Does using Stac affect app performance?
A. Minimal impact. Stac processes lightweight JSON to render UI components, which has negligible effect on performance. However, ensure efficient JSON structures and network handling to maintain optimal app responsiveness.
Flutter is well known for its fast development cycles and beautiful, high-performance apps. But it lacks when it comes to dynamically updating UI without pushing new app updates. To solve it, let's explore Stac, a Server-Driven UI (SDUI) framework for Flutter.

Rather than jumping into stac directly, let’s first discuss about UI approaches.
Client-Driven UI
In the general Client-Driven UI approach, the app’s UI is tightly coupled with its codebase. Essentially, the client (your app) handles everything, UI layouts, business logic, and rendering. Want to change button's look or add a new feature? You’ll need to update the app’s code, test it, and then push the update to the app stores. And then you have to wait for approvals from stores then wait for users to their apps.
Limitations of Client-Driven UI:
Slow Update Cycles: Even small UI changes need a complete update process.
Scalability Issues: Managing multiple platforms becomes a tidious work as every app has its own codebase.
Lack of Flexibility: Changes aren’t easy. You are depending on app store approvals and user behavior.
Server-Driven UI (SDUI)
In Server-Driven UI (SDUI) the server drives the UI, rather than the UI being hardcoded in the app itself. Instead of the client app determining what to render, it primarily focuses on how to render the components defined by the server.
working of Server-Driven UI:
The server defines the app’s UI (generaly in a lightweight format like JSON).
These definitions get recieved by the client (your app) and renders the UI.
And if you want to change the UI, just update the server, and the app shows them within no time. You don't have to send the app updates
Introducing Stac

Say Hello to Stac (formerly Mirai), the powerful Server-Driven UI (SDUI) framework built specifically for Flutter. With Stac, you can build stunning, cross-platform applications dynamically, using JSON to define your UI in real time.
Installing Stac:
First add the Stac library into the pubspec.yaml file of the Flutter project.
dependencies: stac: ^<latest-version>
To install the package run the below given command in your terminal:
flutter pub get
Import the Stac package in your Dart file:
import 'package:stac/stac.dart';
Initializing Stac:
In the main function, initialize Stac to set up the configurations needed, and make your app ready for rendering UI from JSON.
void main() async { await Stac.initialize(); runApp(const MyApp()); }
That’s it. Now that your app is SDUI packed you can use Stac.fromJson(), Stac.fromAsset() or Stac.fromNetwork() method to render UI.
Defining Stac JSONs:
Stac JSONs are designed to feel familiar, especially if you’ve worked with Flutter’s widget structure. Stac JSONs are the JSON equivalent of Flutter widgets. They have the same hierarchy and logic, but in a different format.
Here’s the magic: if you are able to write the Flutter widget tree, you can easily define a Stac JSON.
Let’s compare:
Flutter Widget | Stac JSON Equivalent |
---|---|
Column( children: [ Text("Hello, Stac!"), ElevatedButton( onPressed: () => print("Button Pressed"), child: Text("Click Me"), ), ], ) | { "type": "column", "children": [ { "type": "text", "data": "Hello, Stac!" }, { "type": "elevatedButton", "onPressed": { "action": "print", "message": "Button Pressed" }, "child": { "type": "text", "data": "Click Me" } } ] } |
Key Benefits of Stac:
Instant UI Updates: Skip the app updates and approvals from store. With SDUI, changes made on the server gets visible within no time, making sure your app stays updated at all the time.
Easy Personalization: Deliver personalized experiences to users by providing different UIs based on preferences, behaviors, or demographics, without changing client side code.
Simplified Maintenance: Manage your UI logic centrally on the server. This reduces the complexity of maintaining multiple app versions and keeps updates consistent across platforms.
Easy A/B Testing: Experiment with multiple UI versions in real-time by serving variant payloads directly from the server. Get insights and iterate faster without extra development cycles.
Reduced Development Overhead: Focus your efforts on backend logic while the server handles UI updates. This reduces client-side development, and makes your workflow more efficient.
Live Example:

Conclusion
Stac brings the power of Server-Driven UI to Flutter, solving the limitations of static, client-driven UI. With real-time UI updates, easy personalization, and reduced app update cycles, Stac becomes a game changer for building dynamic Flutter apps. If you're aiming for faster development, scalable UI management, and better user experiences, Stac is the future of Flutter UI development.
Frequently Asked Questions
Q. Is Stac suitable for production apps?
A. Yes. Stac is actively maintained and used in real-world Flutter applications. It enables dynamic UI updates without app store resubmissions, making it ideal for production environments where rapid iteration and flexibility are important.
Q. Can I integrate Stac with existing Flutter widgets?
A. Absolutely. Stac is designed to work seamlessly with standard Flutter widgets. You can blend server-driven components with your existing UI, allowing for a hybrid approach that leverages both dynamic and static elements.
Q. Does using Stac affect app performance?
A. Minimal impact. Stac processes lightweight JSON to render UI components, which has negligible effect on performance. However, ensure efficient JSON structures and network handling to maintain optimal app responsiveness.
Flutter is well known for its fast development cycles and beautiful, high-performance apps. But it lacks when it comes to dynamically updating UI without pushing new app updates. To solve it, let's explore Stac, a Server-Driven UI (SDUI) framework for Flutter.

Rather than jumping into stac directly, let’s first discuss about UI approaches.
Client-Driven UI
In the general Client-Driven UI approach, the app’s UI is tightly coupled with its codebase. Essentially, the client (your app) handles everything, UI layouts, business logic, and rendering. Want to change button's look or add a new feature? You’ll need to update the app’s code, test it, and then push the update to the app stores. And then you have to wait for approvals from stores then wait for users to their apps.
Limitations of Client-Driven UI:
Slow Update Cycles: Even small UI changes need a complete update process.
Scalability Issues: Managing multiple platforms becomes a tidious work as every app has its own codebase.
Lack of Flexibility: Changes aren’t easy. You are depending on app store approvals and user behavior.
Server-Driven UI (SDUI)
In Server-Driven UI (SDUI) the server drives the UI, rather than the UI being hardcoded in the app itself. Instead of the client app determining what to render, it primarily focuses on how to render the components defined by the server.
working of Server-Driven UI:
The server defines the app’s UI (generaly in a lightweight format like JSON).
These definitions get recieved by the client (your app) and renders the UI.
And if you want to change the UI, just update the server, and the app shows them within no time. You don't have to send the app updates
Introducing Stac

Say Hello to Stac (formerly Mirai), the powerful Server-Driven UI (SDUI) framework built specifically for Flutter. With Stac, you can build stunning, cross-platform applications dynamically, using JSON to define your UI in real time.
Installing Stac:
First add the Stac library into the pubspec.yaml file of the Flutter project.
dependencies: stac: ^<latest-version>
To install the package run the below given command in your terminal:
flutter pub get
Import the Stac package in your Dart file:
import 'package:stac/stac.dart';
Initializing Stac:
In the main function, initialize Stac to set up the configurations needed, and make your app ready for rendering UI from JSON.
void main() async { await Stac.initialize(); runApp(const MyApp()); }
That’s it. Now that your app is SDUI packed you can use Stac.fromJson(), Stac.fromAsset() or Stac.fromNetwork() method to render UI.
Defining Stac JSONs:
Stac JSONs are designed to feel familiar, especially if you’ve worked with Flutter’s widget structure. Stac JSONs are the JSON equivalent of Flutter widgets. They have the same hierarchy and logic, but in a different format.
Here’s the magic: if you are able to write the Flutter widget tree, you can easily define a Stac JSON.
Let’s compare:
Flutter Widget | Stac JSON Equivalent |
---|---|
Column( children: [ Text("Hello, Stac!"), ElevatedButton( onPressed: () => print("Button Pressed"), child: Text("Click Me"), ), ], ) | { "type": "column", "children": [ { "type": "text", "data": "Hello, Stac!" }, { "type": "elevatedButton", "onPressed": { "action": "print", "message": "Button Pressed" }, "child": { "type": "text", "data": "Click Me" } } ] } |
Key Benefits of Stac:
Instant UI Updates: Skip the app updates and approvals from store. With SDUI, changes made on the server gets visible within no time, making sure your app stays updated at all the time.
Easy Personalization: Deliver personalized experiences to users by providing different UIs based on preferences, behaviors, or demographics, without changing client side code.
Simplified Maintenance: Manage your UI logic centrally on the server. This reduces the complexity of maintaining multiple app versions and keeps updates consistent across platforms.
Easy A/B Testing: Experiment with multiple UI versions in real-time by serving variant payloads directly from the server. Get insights and iterate faster without extra development cycles.
Reduced Development Overhead: Focus your efforts on backend logic while the server handles UI updates. This reduces client-side development, and makes your workflow more efficient.
Live Example:

Conclusion
Stac brings the power of Server-Driven UI to Flutter, solving the limitations of static, client-driven UI. With real-time UI updates, easy personalization, and reduced app update cycles, Stac becomes a game changer for building dynamic Flutter apps. If you're aiming for faster development, scalable UI management, and better user experiences, Stac is the future of Flutter UI development.
Frequently Asked Questions
Q. Is Stac suitable for production apps?
A. Yes. Stac is actively maintained and used in real-world Flutter applications. It enables dynamic UI updates without app store resubmissions, making it ideal for production environments where rapid iteration and flexibility are important.
Q. Can I integrate Stac with existing Flutter widgets?
A. Absolutely. Stac is designed to work seamlessly with standard Flutter widgets. You can blend server-driven components with your existing UI, allowing for a hybrid approach that leverages both dynamic and static elements.
Q. Does using Stac affect app performance?
A. Minimal impact. Stac processes lightweight JSON to render UI components, which has negligible effect on performance. However, ensure efficient JSON structures and network handling to maintain optimal app responsiveness.
Explore our services
Explore other blogs
Explore other blogs

let's get in touch
Have a Project idea?
Connect with us for a free consultation !
Confidentiality with NDA
Understanding the core business.
Brainstorm with our leaders
Daily & Weekly Updates
Super competitive pricing

let's get in touch
Have a Project idea?
Connect with us for a free consultation !
Confidentiality with NDA
Understanding the core business.
Brainstorm with our leaders
Daily & Weekly Updates
Super competitive pricing
DEFINITELY POSSIBLE
Our Services
Technologies
Crafted & maintained with ❤️ by our Smartees | Copyright © 2025 - Smartters Softwares PVT. LTD.
Our Services
Technologies
Created with ❤️ by our Smartees
Copyright © 2025 - Smartters Softwares PVT. LTD.