Dynamic UI for Android and iOS
Build native app screens whose layout and logic change at runtime, controlled from the server. Users pick up the change on their next app open, without a new build or store review.
What is dynamic UI for mobile?
A static mobile UI is hardcoded in your app binary. If you want to change which components appear on a screen, reorder a feed, or add a promotional banner, you write code, submit a build, and wait for store review. That cycle takes days.
A dynamic UI decouples the what to show from the how to show it. Your server describes the layout: which components, in what order, with what properties. Your app receives that description and renders it using the native components already inside the binary.
Nativeblocks makes this work on native Android and iOS. You annotate your existing Jetpack Compose or SwiftUI components with @NativeBlock. Nativeblocks Studio and the CLI let you compose, version, and deploy dynamic layouts without touching the app binary.
Dynamic UI vs static UI for native apps
Same rendering engine, same design system. The only difference is who controls the layout.
| Static UI (hardcoded) | Dynamic UI (Nativeblocks) | |
|---|---|---|
| UI changes require new build | Always | Never for layout changes |
| Time to update in production | Days (store review) | Seconds (CLI deploy) |
| Rendering engine | Native (Compose / SwiftUI) | Native (Compose / SwiftUI) |
| Design system components | Your own | Your own |
| Offline support | Full (in the binary) | Full, cached on device |
| A/B test layouts | Not possible without a release | Built-in, percentage-based rollout |
What teams use dynamic UI for
Personalization, campaigns, A/B testing, and compliance. All without a new release.
Personalized home screens
Show different layouts to different users based on their segment, subscription tier, or behavior. The server decides which components appear and in what order.
Seasonal and promotional screens
Schedule a Black Friday banner to go live at midnight and disappear at 11:59 PM. Change the layout on the server, users see it on their next open.
A/B testing layout variants
Serve layout A to 50% of users and layout B to the other half. Measure conversions. Roll back the loser, promote the winner. All without a new build.
Market and locale-specific UI
Banking regulations differ by country. Enterprise customers need a different dashboard than free users. Serve each segment its own layout from the server.
How to build dynamic UI with Nativeblocks
From your terminal to every user's phone, in three steps.
Annotate your components
Add @NativeBlock to any component you want available in dynamic layouts. The compiler generates a typed wrapper.
// Available in dynamic layouts
@NativeBlock(
name = "Product Card",
keyType = "PRODUCT_CARD"
)
@Composable
fun ProductCard(
title: String,
price: Double
) { ... }
Deploy to a test group
Use the visual editor or the CLI DSL to build your screen. Deploy to a segment or a small rollout percentage first.
❯ nativeblocks frame deploy
--file product_page_v2
--segment premium_users
--tag v1.0
✓ Frame validated
✓ Deployed to 1% rollout
Ramp to 100%
Ramp from 1% to 100% as the numbers look good. Roll back in one click if something looks wrong.
❯ nativeblocks rollout set
--frame product_page_v2
--percentage 100
✓ Live for 100% of users
Make your native app UI dynamic
Keep Jetpack Compose and SwiftUI. Add server control. Deploy layout changes in seconds.
Open-source SDK · Free tier available · No credit card required