In-app messages that engage
Design visual messages with the drag-and-drop editor, trigger them on events, and render them natively on iOS and Android. Buttons communicate with the native layer via a JavaScript bridge.
Design once, render natively
In-app messages are built with the same Visual Builder you use for landing pages. The SDK fetches the message HTML and renders it in a native WebView. Button actions (close, navigate, deep link) communicate with the native layer through a JavaScript bridge.
- Drag-and-drop editor: Use the Visual Builder's 12 components to design your message
- Native WebView: Messages render in a platform-native WebView on both iOS and Android
- JavaScript bridge: Buttons trigger native actions (close, navigate to screen, open URL) via the bridge
- No app update: Change message content server-side without shipping a new app version
Show the right message at the right time
Trigger messages on events, target specific audiences, and control frequency.
Event Triggers
Trigger messages on SDK events like app open, screen view, or custom events you define. The SDK checks for eligible messages on each trigger and displays the highest-priority match.
Audience Targeting
Link messages to audience segments built from your analytics data. Show onboarding tips to new users, promotions to power users, or win-back messages to inactive users.
Frequency Control
Set maximum display count per user and minimum interval between displays. Messages can also have start and end dates for time-limited campaigns.
Buttons that talk to your app
Each button in an in-app message can trigger a native action through the JavaScript bridge. Close the message, navigate to a specific screen, open an external URL, or trigger a deep link. The bridge works on both iOS (WKWebView) and Android (WebView).
close
Dismiss the message
navigate
Go to a screen in the app
deeplink
Open a deep link URI
url
Open an external URL in browser
// Button action in Visual Builder { "action": "navigate", "screen": "/profile/settings", "data": { "tab": "notifications" } } // SDK receives via JS bridge TolinkuBridge.onAction(action => { if (action.type === "navigate") { router.push(action.screen) } })
Test and optimize
A/B test different message designs and measure engagement.
A/B Test Messages
Create multiple message variants with different copy, images, or button layouts. Split traffic with configurable weights and track which variant drives more engagement via custom events and click tracking.
Cross-Platform Consistency
The same message HTML renders identically on iOS and Android. Design once in the Visual Builder, and both platforms receive the same experience. The JavaScript bridge API is consistent across both SDKs.
Send your first in-app message
Design a message in the Visual Builder and assign it to a trigger. No app update required.