React Native DevTools
React Native DevTools is the primary debugger for React Native apps on a device or simulator. It combines Console, Sources, Network, Memory, and React Components / Profiler panels in one tool opened from the Expo CLI.
For Studio web preview in the browser, use Chrome DevTools and the React DevTools browser extension (React DevTools).
Overview
React Native DevTools merges capabilities from Chrome DevTools and React DevTools for apps running through Expo in development mode.
Platform support:
- ❌ Web preview (use Chrome DevTools / React DevTools)
- ✅ Expo Go / development build
- ❌ Release build (APK/IPA): use WavePulse
Open DevTools with j in the Expo CLI terminal after the app is running, or choose Open DevTools from the developer menu. Requires Google Chrome or Microsoft Edge.
For WaveMaker widgets, variables, and services on release installs, use WavePulse.
Requirements
- Browser: Google Chrome or Microsoft Edge
- App: Running with
npx expo startin development mode (exported or local project) - Hermes: Supported (default for current WaveMaker mobile stacks)
Available Panels
Console
View log messages, errors, and execute JavaScript commands.
Sources
View and debug JavaScript code with breakpoints.
Network
Monitor API calls and network requests.
Memory
Analyze memory usage and detect memory leaks.
Components (⚛️)
Inspect React components, props, and state (from React DevTools).
Profiler (⚛️)
Profile React component performance (from React DevTools).
Launching React Native DevTools
Prerequisites
- Run application using Expo CLI:
# Navigate to project directory
cd /path/to/exported/project
# Start Expo
npx expo start
- Connect device/simulator:
- Physical device: Scan QR code with Expo Go
- iOS Simulator: Press
iin terminal - Android Emulator: Press
ain terminal
Opening DevTools
Method 1: Keyboard shortcut
- Press
jin the terminal wherenpx expo startis running - React Native DevTools opens in Chrome or Edge
Method 2: Developer menu
- Open the developer menu:
- Terminal: Press
mwhere Expo is running, or - Physical device: Shake the device
- iOS Simulator:
Cmd+D, orCtrl+Cmd+Z - Android Emulator:
Cmd+M(Mac) orCtrl+M(Windows/Linux)
- Terminal: Press
- Select Open DevTools
See Expo Dev Tools for the full shortcut list.
Console Panel
Viewing Logs
Console shows all logs from your React Native application:
console.log('Info message');
console.warn('Warning message');
console.error('Error message');
console.info('Information');
console.debug('Debug message');
Filtering:
- Use filter buttons (Errors, Warnings, Info)
- Search box for text filtering
- Level-based filtering
If the Console is empty, set "enableLogs": true under preferences in src/main/webapp/wm_rn_config.json and restart the dev server. See Enabling logs in WaveMaker mobile app.
Executing JavaScript
Run JavaScript commands directly in the console to test and debug:
// Access global variables
App.Variables.selectedProduct
// Call functions
navigateToPage('Dashboard')
// Test expressions
2 + 2
// Access React Native modules
import { Platform } from 'react-native';
Platform.OS
Sources Panel
Debugging with Breakpoints
- Open Sources panel
- Press
Cmd/Ctrl+Pto search files - Open file containing code to debug
- Click line number to set breakpoint
- Interact with app to trigger breakpoint
Breakpoint Controls:
- Pause (F8) – Pause at next breakpoint
- Step Over (F10) – Execute current line, move to next
- Step Into (F11) – Step into function call
- Step Out (Shift + F11) – Step out of current function
- Continue (F8) – Resume execution
Watch Expressions
Monitor variables or expressions:
- Expand Watch section
- Click + to add expression
- Value updates as code executes
Network Panel
Monitoring Requests
Network panel shows all HTTP requests made by the application:
Request information:
- URL and method
- Status code
- Request/response headers
- Request/response body
- Timing information
- Size
Filtering:
- By request type (XHR, Fetch, WebSocket)
- By status code
- By URL pattern
- By size
Use cases:
- Debug API call failures
- Inspect request/response data
- Monitor API performance
- Check authentication headers
Memory Panel
Analyzing Memory Usage
Monitor memory consumption to detect leaks and optimize usage:
Features:
- Heap snapshots
- Allocation timeline
- Memory profiling
- Leak detection
Taking snapshots:
- Open Memory panel
- Click "Take snapshot"
- Interact with app
- Take another snapshot
- Compare snapshots to find leaks
Components Panel (⚛️)
Inherited from React DevTools, shows React component hierarchy.
Features:
- Component tree visualization
- Props and state inspection
- Edit props/state in real-time
- Search and filter components
Usage:
- Select component in tree
- View props, state, hooks in right panel
- Edit values to test behavior
- Filter to WaveMaker components: enter
^Wmin the component search/filter
Profiler Panel (⚛️)
Inherited from React DevTools, measures component render performance.
Features:
- Record component renders
- Flame graph visualization
- Ranked chart by render time
- Identify performance bottlenecks
Usage:
- Click Record button
- Interact with application
- Click Stop to finish
- Analyze render times and frequency
Element Inspector
Element Inspector allows hovering and selecting components to inspect them.
Enabling Element Inspector
Method 1: Dev Menu
- Open React Dev Menu (shake device /
Cmd+D/Cmd+M) - Select "Toggle Element Inspector"
Method 2: Expo CLI Options
- Press
shift+min terminal where Expo CLI is running - Select "Inspect elements"
Method 3: React Native DevTools
- Element Inspector can be toggled from Dev Menu accessed via DevTools
Using Element Inspector
- Enable Element Inspector
- Tap/click on any component in your app
- Component highlights with border
- Component details show in DevTools Components panel
- View props, state, and style information
Press ? in terminal where Expo CLI is running to view all available options. Press shift + m to see more tools including 'Inspect elements', 'Toggle performance monitor', and more.
Key Features
✅ Advantages:
- Debug native builds running on physical/virtual devices
- Test native features (camera, GPS, etc.)
- Real-time debugging with Expo CLI hot reload
- Unified debugging experience (combines Chrome + React DevTools)
- Element Inspector for visual component selection
- Works with
wm-reactnative syncfor live Studio changes
🎯 WaveMaker Integration:
- Debug while connected to Studio via
wm-reactnative sync - Make changes in Studio, see results on device
- Debug WaveMaker widget components
- Inspect widget props and state
- Monitor service variable calls in Network panel
Limitations:
- Requires Expo CLI and a dev client (Expo Go or development build)
- Chrome or Edge browser required
- Cannot debug release builds (APK/IPA); use WavePulse instead
Debugging with wm-reactnative sync
React Native DevTools works seamlessly with WaveMaker's live sync feature:
Setup
- Export React Native project from Studio
- Run
wm-reactnative syncto connect to Studio - Start Expo CLI
- Launch React Native DevTools (
jin terminal) - Make changes in Studio
- Changes reflect on device in real-time
- Debug using React Native DevTools
Benefits:
- Edit in Studio, debug on device
- Fast iteration cycle
- Test on real device during development
- Access to all DevTools features
Expo CLI Options
Press ? in Expo CLI terminal to see all options:
Common commands:
j– Open React Native DevToolsshift + m– More tools menur– Reload appm– Toggle React Dev Menui– Open iOS simulatora– Open Android emulatorw– Open in web browser
More tools (Shift + m):
- Inspect elements
- Toggle performance monitor
- Toggle element inspector
Older Expo workflows used a separate browser debugger or standalone React DevTools from the CLI menu. Current Expo CLI opens React Native DevTools (with Components and Profiler built in) via j or Open DevTools.
Best Practices
1. Keep DevTools Open During Development
// ✅ Good - Keep DevTools open for continuous monitoring
// Watch console for errors
// Monitor network requests
// Check component updates
// ❌ Bad - Opening DevTools only when bugs occur
2. Use Element Inspector Effectively
// ✅ Good - Use Element Inspector to quickly find components
// Toggle on, tap component, view details, toggle off
// ❌ Bad - Manually searching component tree
3. Clean Up Logs
// ✅ Good - Remove debug logs before committing
if (__DEV__) {
console.log('Debug info');
}
// ❌ Bad - Leaving debug logs in production code
console.log('Debug info');
4. Profile Performance Regularly
// ✅ Good - Profile during development
// Identify slow renders early
// Fix performance issues before they accumulate
// ❌ Bad - Only profiling when app feels slow
Troubleshooting
DevTools Won't Open
Solutions:
- Ensure Chrome or Edge is installed
- Confirm the app is running (
npx expo start) and pressjagain - Restart the dev server
- Clear Metro cache:
npx expo start --clear
Breakpoints Not Working
Solutions:
- Check source maps are enabled
- Reload app after setting breakpoints
- Use
debugger;statement as fallback
Element Inspector Not Responding
Solutions:
- Toggle Element Inspector off and on
- Reload application
- Check Dev Menu accessibility
Related Documentation
Other Debugging Tools:
- Expo Dev Tools – Developer menu and CLI shortcuts
- Chrome DevTools – Browser debugging for web preview
- React DevTools – React component inspection in web preview
- WavePulse – WaveMaker debugging tool
- Reactotron – Optional custom logging (exported projects)
Testing Documentation:
- Debugging Overview – All debugging tools and methods
- UI Testing Mobile – Mobile testing strategies
Build Documentation:
- Expo Builds – Expo EAS Build setup
- CLI Builds – Local builds with Expo CLI
- Set up WaveMaker project locally – Local export and sync
External Resources:
- React Native DevTools – Official documentation
- Expo debugging tools – Developer menu and
jshortcut - Metro Bundler – React Native bundler
Use React Native DevTools as your default on-device debugger (j in the terminal). Pair with WavePulse when you need WaveMaker-specific inspection or release builds.