A new React Native iOS simulator.

No Mac, no XCode, no problem.A 100% web-based iOS simulator for React Native.
Makes agents 10x faster and simulators ∞ cheaper.
npm i -g sootsim

Compatibility

Core
99%
128 pixel-checks
Top 100
88%
88 of 100 native
Top 500
29%
146 of 500 native
top 500 native libraries by weekly downloads
verified
works
partial
not yet
native
all
Essentials(5 of 5)
react-native
the framework itself · 54 pixel-checked surfaces
react-native iosreact-native sootsim
97%
react-native-gesture-handler
DrawerLayout (passthrough noop), NativeViewGestureHandler still lacks native-scroll coupling and handlerTag semantics, cross-detector simultaneousWithExternalGesture/requireExternalGestureToFail, ForceTouch semantics are placeholder-only
99%
react-native-gesture-handler iosreact-native-gesture-handler sootsim
react-native-screens
freezeEnabled/enableFreeze (always false), statusBarStyle/Hidden/navigationBarColor/Hidden ignored, replaceAnimation differentiation, formSheet/pageSheet modal differences, integrated search bar placements
99%
react-native-screens iosreact-native-screens sootsim
react-native-keyboard-controller
per-frame keyboard progress events (smooth `onMove` requires SAB-backed shared values driven from the shell-side keyboard animation; deferred — see plans/real-worklets.md)
98%
react-native-keyboard-controller iosreact-native-keyboard-controller sootsim
react-native-reanimated
layout animation builders are exported but no enter/exit animation actually plays, useScrollViewOffset returns static 0, useAnimatedSensor static, useReducedMotion always false, useAnimatedKeyboard height tracking returns 0
98%
react-native-reanimated iosreact-native-reanimated sootsim
All Packages(166 of 202)
1-12 of 166
prev
1 / 14
next
expo-video
player.duration stays 0 (no timeupdate listener), player.currentTime not synced from element, statusChange/volumeChange/timeUpdate events not emitted, useEvent hook not exported, DRM support absent
100%
expo-video iosexpo-video sootsim
react-native-pager-view
overdrag (accepted but ignored), offscreenPageLimit (accepted but ignored), pageMargin, keyboardDismissMode, native scroll fidelity (momentum physics differ)
99%
react-native-pager-view iosreact-native-pager-view sootsim
@mozzius/expo-dynamic-app-icon
noop icon switching — correct for browser, useDynamicAppIcon hook is functional
100%
@react-native-async-storage/async-storage
full localStorage-backed implementation
100%
@react-native-community/checkbox
HTML checkbox input with accentColor tinting
100%
@react-native-community/datetimepicker
HTML date/time/datetime-local input; Android imperative API stubbed
100%
@react-native-masked-view/masked-view
engine-level masked-view node with canvaskit saveLayer + BlendMode.DstIn alpha compositing
100%
@react-native-picker/picker
HTML select element with full Picker API including Picker.Item, modes, focus/blur
100%
@welldone-software/why-did-you-render
intentional noop — wdyr mutates React internals and crashes sootsim's bridged React
100%
expo-glass-effect
liquid glass via CanvasKit _liquidGlass style descriptor; hooks and availability covered
100%
expo-linear-gradient
CanvasKit gradient shader via _gradientColors style prop, full API
100%
expo-sms
SMS not available on web; isAvailableAsync returns false, sendSMSAsync returns cancelled (correct)
100%
1-12 of 166
prev
1 / 14
next
verified
works
partial
not yet