⌘K
For Jetpack Compose & SwiftUI

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 buildAlwaysNever for layout changes
Time to update in productionDays (store review)Seconds (CLI deploy)
Rendering engineNative (Compose / SwiftUI)Native (Compose / SwiftUI)
Design system componentsYour ownYour own
Offline supportFull (in the binary)Full, cached on device
A/B test layoutsNot possible without a releaseBuilt-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.

ProductCard.kt

// 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.

terminal

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.

terminal

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