Wrapping an Existing App

SootSim works with existing React Native apps without app code changes. Start the app the way you already do, then connect to its dev server with sootsim open after the global install.

Basic usage

Start your app normally:

terminal

# expo
expo start
# bare react-native / metro
react-native start
# one
bun dev

Then connect SootSim to the running dev server:

terminal

sootsim open 8081

If you omit the port, sootsim open scans for likely React Native dev servers and lets you pick one.

Checking compatibility

Before you wire a project into SootSim, scan its dependencies:

terminal

sootsim compat

The scan reports:

  • Full support: the common runtime surface works
  • Partial support: major APIs work, but some behavior is still missing
  • Auto-stub: the package resolves, but only through a basic fallback
  • Unsupported: the package still depends on native SDK behavior

Handling unsupported packages

Option 1: noop stub

For packages you do not need in the simulator:

import { defineConfig } from 'sootsim/config'
export default defineConfig({
modules: {
'react-native-analytics': 'noop',
},
})

Option 2: custom stub

For packages that need real behavior:

// stubs/my-camera.ts
export function takePicture() {
return { uri: 'https://placekitten.com/400/400' }
}
import { defineConfig } from 'sootsim/config'
export default defineConfig({
modules: {
'react-native-camera': { file: './stubs/my-camera.ts' },
},
})

Option 3: inline stub

For simple key-value packages:

import { defineConfig } from 'sootsim/config'
export default defineConfig({
modules: {
'react-native-config': {
inline: { API_URL: 'http://localhost:3000' },
},
},
})

Ready to build?

Run your React Native app in the browser. No simulators, no native toolchain, no waiting.

curl -fsSL https://sootsim.com/install.sh | sh