Retool Mobile is a separate builder for iOS and Android native apps — it uses React Native components including Camera, Barcode Scanner, NFC, Signature Pad, and Geolocation that aren't available in the web editor. Download the Retool Mobile app from the App Store or Google Play to test and use your apps. Retool Mobile is distinct from making a Retool web app 'responsive.'
| Fact | Value |
|---|---|
| Tool | Retool |
| Difficulty | Beginner |
| Time required | 20-30 min |
| Compatibility | Retool Cloud and Self-hosted (mobile requires Business plan) |
| Last updated | March 2026 |
Retool Mobile vs Responsive Web: What's the Difference
Retool has two distinct paths for mobile usage: (1) Retool Mobile, which is a dedicated mobile app builder that generates native iOS/Android experiences using React Native components, and (2) responsive web apps, which are regular Retool apps that can be viewed in a mobile browser.
Retool Mobile provides components that only make sense on physical devices: Camera (photo capture), Barcode/QR Scanner (with hardware scanner support for Zebra and Proglove devices), NFC Reader, Signature Pad, and Geolocation. These components do not exist in the web builder. Retool Mobile also supports OTA (over-the-air) updates and offline mode on Business plans.
This tutorial covers Retool Mobile specifically — how to access the builder, build a simple mobile app, and deploy it to your team's devices.
Prerequisites
- A Retool organization on the Business plan (Retool Mobile requires Business+)
- An iOS or Android device with the Retool Mobile app installed (search 'Retool Mobile' in the App Store or Google Play)
- A connected resource (database or REST API) with data for your mobile app
- Admin or Editor access in your Retool org
Step-by-step guide
Access the Retool Mobile builder
From the Retool home page, click '+ New' and select 'Mobile App' (not 'App'). Alternatively, if you're in a regular app, you cannot switch it to a mobile app — you must create a new Mobile App from scratch. The mobile builder looks similar to the web editor but uses a phone-sized canvas (375px wide by default). The component panel on the left shows only mobile-compatible components, and many web-only components (like the Retool HTML component) are not available.
Expected result: Mobile builder opens with a phone-sized canvas. Component panel shows mobile-specific components.
Add components to the mobile canvas
The mobile canvas uses a vertical stack layout by default — components stack vertically from top to bottom. Drag components from the panel onto the canvas. Key mobile components: List View (scrollable item list), Scanner (camera-based barcode/QR reader), Signature Pad, Native Camera (capture photos), Location (get GPS coordinates), Text Input, Button, and Select. Mobile components snap to the full width of the canvas by default, which is appropriate for touch targets.
Expected result: Mobile app canvas shows stacked components in a vertical phone layout.
Connect mobile components to queries
Mobile queries work the same as web queries — create SQL or REST API queries in the Query panel and reference them in component properties. The key difference is that mobile apps often run offline or on poor connections, so design queries to be lightweight. A List View component bound to {{ getItems.data }} will display each item with configurable title and subtitle fields. Reference query columns in the List View Inspector: Title: {{ item.name }}, Subtitle: {{ item.status }}.
1-- Mobile-optimized query: limit columns and rows2SELECT id, name, status, created_at3FROM work_orders4WHERE assigned_to = {{ retoolContext.currentUser.email }}5 AND status IN ('pending', 'in_progress')6ORDER BY created_at DESC7LIMIT 100;Expected result: List View shows work orders with names and statuses from the query.
Configure the Camera or Barcode Scanner
Drag a Scanner component onto the canvas. The Scanner supports both camera-based QR/barcode scanning and USB/Bluetooth hardware scanners (Zebra, Honeywell, Proglove). In the Inspector, set the Scanner type: 'Camera' for device camera, or 'Keyboard wedge' for hardware scanners that simulate keyboard input. Set an event handler on 'On scan' to trigger a query using {{ scanner1.value }} — the scanned barcode value. For example, a SELECT query: WHERE barcode = {{ scanner1.value }}.
1// On scan event handler — JS Query2// Triggered when scanner1 reads a barcode3await getItemByBarcode.trigger({4 additionalScope: { barcode: scanner1.value }5});67// If item not found, show notification8if (!getItemByBarcode.data.length) {9 utils.showNotification({10 title: 'Not found',11 description: `No item found for barcode: ${scanner1.value}`,12 notificationType: 'warning',13 });14}Expected result: Scanning a barcode triggers the query and displays the matching item details.
Test your app on a real device
Save your mobile app. On your iOS or Android device, open the Retool Mobile app and log in with your Retool credentials. Your app will appear in the list of available apps. Tap it to open it. Changes you make in the mobile builder are reflected immediately in the device app when you save — no rebuild or deployment step needed during development. This live preview makes mobile development fast.
Expected result: Your mobile app appears in the Retool Mobile app and runs on the device with live data.
Use Geolocation in a mobile app
Drag a Location component onto the canvas (not visible to users — it runs in the background). In its Inspector, configure 'Detect location on page load' to ON. Reference the current location in queries or other components using {{ location1.coords.latitude }} and {{ location1.coords.longitude }}. For example, use these in a SQL query to find nearby items: WHERE ST_Distance(coordinates, ST_MakePoint({{ location1.coords.longitude }}, {{ location1.coords.latitude }})) < 1000.
Expected result: App captures device GPS coordinates. Queries can use the coordinates to filter or display location-aware data.
Publish and distribute the mobile app
When ready to deploy to your team, click 'Publish' in the mobile builder (same as web apps). Team members who have the Retool Mobile app installed and belong to your Retool org will automatically see the published app in their app list. To control which users see which apps, use Retool's standard permission system: Settings → Groups → assign the app to specific groups.
Expected result: Published app is visible to team members in the Retool Mobile app on their devices.
Complete working example
1// JS Query: processBarcodeScan2// Triggered by scanner1's 'On scan' event3// Looks up scanned item and handles not-found case45const barcode = scanner1.value;67if (!barcode || barcode.trim() === '') {8 utils.showNotification({9 title: 'Scan error',10 description: 'No barcode detected. Try again.',11 notificationType: 'error',12 });13 return;14}1516// Fetch item details for scanned barcode17await lookupItem.trigger({18 additionalScope: { scannedBarcode: barcode },19});2021const results = lookupItem.data;2223if (!results || results.length === 0) {24 utils.showNotification({25 title: 'Item not found',26 description: `Barcode '${barcode}' is not in the system.`,27 notificationType: 'warning',28 duration: 5,29 });30 return;31}3233// Store found item in temporary state for display34// Note: setValue is async — do not read immediately after35await foundItem.setValue(results[0]);3637utils.showNotification({38 title: 'Item found',39 description: results[0].name,40 notificationType: 'success',41});Common mistakes
Why it's a problem: Trying to make a Retool web app 'work on mobile' by resizing it instead of building a proper Mobile App
How to avoid: Retool web apps can be made responsive with a 12-column layout and 'Show on mobile' component settings, but they lack native mobile components. For field workers needing Camera or Scanner, build a dedicated Mobile App.
Why it's a problem: Using desktop-oriented components (Table, Module) in the mobile builder
How to avoid: The mobile builder has its own component set. Use List View instead of Table, and avoid embedding web-only Modules. Stick to the components in the mobile builder's component panel.
Why it's a problem: Forgetting to handle location permission denial in geolocation-dependent apps
How to avoid: Check {{ location1.coords.latitude !== null }} before using coordinates. Show a graceful message if location is unavailable, and provide a manual fallback input for the user to type their location.
Best practices
- Design mobile queries to return fewer columns and rows than web queries — mobile devices have less memory and slower connections
- Place action buttons at the bottom of the screen within thumb reach, following native mobile UX conventions
- Use the List View component for scrollable lists rather than the Table component — Table is designed for desktop
- Test on both iOS and Android devices as layout and permission flows can differ between platforms
- Design for offline scenarios: show a 'Last synced' timestamp and handle query failures gracefully with utils.showNotification()
- Use the Retool Mobile 'Groups' permission system to control which team roles see which mobile apps
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I'm building a Retool Mobile app for warehouse workers who need to scan barcodes to track item locations. I need: (1) a Scanner component configured for camera-based barcode scanning, (2) an 'On scan' event handler that triggers a SQL query 'lookupItem' with WHERE barcode = {{ scanner1.value }}, (3) a List View showing scan history from a temporary state array, (4) a button to mark an item as 'received' by running an UPDATE query. Write the JS Query for the scan handler including error notification and temporary state update.
Configure a Retool Mobile app with: a Scanner component with 'On scan' event triggering lookupItem query, a Text component showing {{ lookupItem.data[0].name ?? 'Scan a barcode' }}, a Location component capturing {{ location1.coords.latitude }} and {{ location1.coords.longitude }} for a nearby-items filter. Show the layout configuration for a bottom-anchored action button.
Frequently asked questions
Do I need to submit a Retool Mobile app to the App Store or Google Play?
No — you distribute Retool Mobile apps through the Retool Mobile container app, which is already on the App Store and Google Play. Your apps run inside the Retool Mobile container and are downloaded directly from your Retool org. This means no app store review process and instant OTA updates.
Is Retool Mobile included in my Retool plan?
Retool Mobile requires the Business plan or higher. The Free and Pro plans do not include mobile app building. Check your plan at Settings → Billing in your Retool org.
Can Retool Mobile apps work without an internet connection?
Offline mode for Retool Mobile is available on Business plans. When enabled, apps cache data locally and sync when connectivity is restored. Configure offline sync in the mobile app settings. Without offline mode, the app requires an active connection to load data.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation