Real React Native on the web.

No Mac, no XCode, no Simulator, no problem.A full-on React Native apps in a iOS simulator simulator on the web — no servers involved.
npm i -g sootbean

Develop instantly, anywhere.

SootSim installs in a minute, runs in your browser (or desktop with Electron), loads any Metro bundle with no setup at all, and supports hot reloads.

+Includes hundreds of polyfilled native dependencies so even if you use native UI you have no build time at all.
+No TestFlight review, no Apple Developer seat, no Expo Go install, no precompiled .ipa, no same-wifi constraint.
+Reviewers, PMs, designers, and clients click a link in Chrome. They tap through the real product, switch devices, toggle dark mode — no install, no account.

Preview every PR in 60 seconds.

SootSim runs directly from the Metro bundle, get a reviewable branch in under a minute instead of the 15-45 minutes TestFlight or an IPA-upload tool takes.

+Install the soot GitHub app on a repo. Every PR gets a sticky comment with a live session URL + a WebM of the smoke flow — before the native build even starts.
+No TestFlight review, no Apple Developer seat, no Expo Go install, no precompiled .ipa, no same-wifi constraint.
+Reviewers, PMs, designers, and clients click a link in Chrome. They tap through the real product, switch devices, toggle dark mode — no install, no account.

Give AI agents hands on your app.

SootSim is the first iOS development surface designed for coding agents as first-class users. Agents can crawl an app, generate flows, snapshot+diff the tree, tune a spring, and audit accessibility — without a mac, a simulator, or computer vision.

+Automatic — A DOM accessibility overlay mirrors every canvas node as a real <button>, <input>, <a>. Claude Code, Cursor, Codex, and any MCP-aware browser tool see and touch the app the same way they do a website.
+Powerful — The CLI exposes 28+ verbs and a full new simulator tab boots in under a second — tap, type, describe, tree, eval, perf. No Playwright, no screenshot OCR, no XCUITest. Nearly 100x faster than Chrome MCP, 10x faster than XCodeMCP.
+Smart — Automatic session locking per-agent for parallel use, see in-browser what agents are doing, smart accessibilty dumps with offscreen and hidden component knowledge.

Work on iOS from Windows, Linux, or a locked-down Mac.

Most professional developers run Windows and Linux. Bootcamp students, international teams, and enterprise shops are currently locked out of iOS development entirely. Break out of the Apple lock-in.

+Works in any browser, plus builds for every OS — Windows NSIS (installs without admin), Linux AppImage, macOS universal DMG. Same sootsim command, same CanvasKit rendering, same 13 iPhone models everywhere.
+~A few MB CLI works with your browser, or optional 200 MB Electron app vs 40 GB of Xcode + simulator runtimes. Works on MDM-locked corporate machines where Xcode installs get denied.
+Browser mode runs with zero install — open a URL on a Chromebook, a borrowed laptop, or a conference A/V desk. The only requirement is WebGL2 (with a CPU fallback if that's missing).

Run Detox and Maestro on Linux CI.

Replace the most expensive axis of mobile CI with commodity Linux minutes. Real device testing still matters for final sign-off, hardware sensors, and App Store validation — but 90% of coverage runs headlessly in the browser now.

+Drop-in Detox driver — existing import from 'detox' suites run against the canvas via Playwright on headless Chromium. No rewrites, no config churn.
+YAML flows are Maestro-compatible. sootsim flow start/keep/end records from a live session; --validate replays, --video captures proof, --profile reports per-frame timing.
+Built-in skills: a11y review, compat check, visual diff, gallery screenshots, perf transition profiling (layout / render / copy ms per frame). A 45-minute macOS simulator CI run collapses to 3 minutes on a $0.006/min Linux runner.

Embed a live iOS app anywhere.

This page is the reference implementation — what you see behind this dialog is a SootSim iframe running the Test Drive demo. Any company can drop the same embed on their site.

+Marketing hero, pricing page, interactive docs, sales email, support bug repro, onboarding walkthrough, portfolio demo, GitHub README — wherever an iframe fits.
+Runs clientside on the visitor's GPU via WebAssembly CanvasKit. Zero streaming latency, zero per-session cloud bill, zero precompiled IPA upload.
+URL params control device, theme, network condition, language, and region. Pre-seed a demo account, lock the home gesture, auto-reset after N minutes — the kiosk / support-repro / sales-link patterns all fall out of the same primitives.
Core engine

Real React. Real Yoga. Real Skia.

SootSim is a full React Native runtime inside the browser. A real react-reconciler builds a node tree, Yoga computes the same flexbox RN ships on device, and CanvasKit (Skia WASM) paints every pixel onto a single <canvas>. No DOM, no WebView, no fake web translation.

Layout and motion, engineered.

Not a layout loop. A scheduler.

+Tree and style versioning are split — animated frames resync only changed style properties. Average layout time dropped from 3.15 ms to 0.89 ms.
+One rAF pass steps every Animated, Reanimated, scroll spring, and screen transition — one repaint per frame.
+Stall detection snaps stuck ease-out tails to their destination so hit targets never sit at "97% arrived".

Gestures the way iOS means them.

The same arbitration UIKit uses to decide between a scroll and a button drag — reimplemented, not faked.

+Two-phase capture/bubble responder negotiation with termination requests and ghost-node guards.
+react-native-gesture-handler factory API: Pan, Tap, Pinch, Rotation, Fling, LongPress, Hover, plus Race / Simultaneous / Exclusive composition.
+Transform-aware, zoom-aware, pointerEvents-aware hit testing. Portal-first, so sheets and modals never leak to the tree below.

Scroll that feels right.

Momentum, deceleration, bounce-back, paging, and zoom physics live in the engine — not borrowed from the browser DOM.

+iOS rubber-band curve 1 − 1/((raw·0.55)/dim + 1) — not an approximation.
+Paging commits at 40% distance for deliberate drags; velocity projection for flicks.
+Pinch-to-zoom with focal-point pinning, pull-to-refresh, scroll-to-top via status bar tap.

Text with IME-grade detail.

CanvasKit paragraph layout handles multi-line wrap, three-mode ellipsis (head / middle / tail), full decoration set, and text shadow. A focused TextInput gets a 2.5 px blinking #007AFF cursor at real character offsets, selection highlight rects, drag handles with circles, and a 1.5× magnifier loupe when you drag a handle — because that's what iOS does.

Real visual effects.

Full CSS filter pipeline — blur, drop-shadow, brightness, contrast, saturate, hue-rotate, grayscale, sepia, invert — backed by CanvasKit image filters and 4×5 color matrices. Linear and radial gradients, RN 0.76 box-shadow with inset, Android elevation, dashed and dotted outlines, a DstIn masked-view path, backdrop blur, and a liquid glass SkSL shader that matches the iOS 26 aesthetic.

Reanimated, completely.

Third-party libraries that rely on deep Reanimated behavior work unmodified.

+useSharedValue, useAnimatedStyle, useDerivedValue, useAnimatedReaction with automatic dep tracking.
+withTiming, withSpring, withDecay, withSequence, withDelay, withRepeat, defineAnimation.
+.get(), .getValue(), .modify() all register with the dep collector. Closures re-capture per render — worklet semantics, not an approximation.

Native navigation, screens, libraries.

Any pure-JS library just works — 171 native-module stubs cover the packages that can't, and ~300 common pure-JS packages are validated on top. Most apps' package.json boots with zero overrides.

+react-native-screens with native-stack, ScreenStack, ScreenStackHeaderConfig, large titles, search bars, and transition presets — @react-navigation/native, /stack, /bottom-tabs, /drawer, /material-top-tabs run unmodified on top.
+@shopify/flash-list, react-native-pager-view, react-native-bottom-tabs, react-native-safe-area-context, react-native-keyboard-controller, @gorhom/bottom-sheet, react-native-screen-transitions.
+react-native-svg, react-native-vector-icons, @shopify/react-native-skia, react-native-mmkv, react-native-fast-image, lottie-react-native, react-native-maps, react-native-webview, react-native-vision-camera, moti.

Display P3 wide gamut.

The browser defaults to sRGB. SootSim targets the same color space your app runs in on a real iPhone.

+WebGL2 framebuffer promoted to RGBA16F via EXT_color_buffer_float.
+CanvasKit surface created in DISPLAY_P3, matching iPhone output.
+Feature-detected. Falls back to sRGB silently. GPU to CPU the same way.
iOS shell

13 devices. Real dimensions.

Not a frame around a viewport. A rendered phone.

+SE through iPhone 17 Pro Max — exact width, height, corner radius, status bar height, home indicator height, and Dynamic Island geometry.
+Physical Size mode reads the connected display's real millimetres from a native macOS sidecar, so the simulated device is the size of the actual device.
+Metallic inset-shadow bezel, interactive side buttons, SE home-button chrome, and a real shake animation.

The shell is all Skia.

Dynamic Island, status bar, keyboard, notifications, lock screen, and wallpaper — not one DOM node of chrome. The wallpaper is an SkSL mesh-gradient shader with 3-octave domain-warped fractal noise and film grain; Safari gets a full Canvas 2D reimplementation. Corners are drawn with an iOS continuous-corner squircle (Bézier, k=0.4465) applied to backgrounds, borders, shadows, clips, and images simultaneously.

Status bar aware of your app.

After the app draw pass and before portals, the engine samples pixels behind the clock and battery icons via readPixels, computes luminance in the correct color space, and flips status-bar icons between light and dark — at most once per second. Exactly what iOS does, implemented in Skia.

Home, switcher, transitions.

The multitasking gestures, not a card carousel.

+Home: 4×N grid, widget page, frosted dock, dual-signal paging — 40% distance or 0.6s velocity projection — with rubber-band at page edges.
+App launch springs from the tapped icon's tracked screen position; go-home reverses it and the home screen becomes interactive before the spring settles.
+App switcher uses iOS 17's fan layout with axis-locked drag, velocity-projected snap, and swipe-up-to-dismiss.

The Dynamic Island actually moves.

Four presentation states (collapsed, hint, mode, inspect) with bezier-timed morph, blur-slide label entrance, ring-mode shake, and a three-step tap bounce. A ring/silent button lives on the bezel — tap to hint, hold to switch. The bell appears next to the clock when the ringer is on.

Built-in apps.

Photos with date-grouped grid, hero thumbnail→fullscreen transition using non-uniform scale with an overflow clip (the Apple technique), pinch and double-tap zoom, center-crop dismiss. Control Center with 2×2 connectivity card, vertical brightness/volume sliders, and glass quick actions. Live Clock with world cities, Alarm, Stopwatch, Timer. Settings, Camera, Native UI catalog, Sheets, Tabs, Keyboard — and ConnectRN, the Expo Go-style dev server picker.

Browser + Electron shell

Runs in a Web Worker by default.

Your app thread and the browser's main thread are different threads.

+Reconciler, Yoga, CanvasKit, animations, gestures, and storage execute off-main-thread on an OffscreenCanvas transferred from the host.
+Host pumps vsync; worker streams ImageBitmap frames back on demand for recording and CI.
+Full document, navigator, location, history shim inside the worker, with main-thread authoritative storage sync.

Drop into any dev server.

Point SootSim at Expo, vxrn, One, or Metro — dev server discovery probes localhost ports, reads manifests, and resolves the right bundle URL without configuration. Two integration paths: the vite sootsim() plugin wires the whole stack in one call, or withSootsim() metro middleware serves a pre-built shell at /__soot/ with zero vite runtime required.

Bundles run without rewriting.

A non-configurable setter trap on globalThis.__d and __r intercepts Metro's CJS registry before any factory runs, so native-module stubs are injected transparently. 171 native-module stubs cover React Native internals, most of the Expo SDK, and common third-party native SDKs. Pure-JS libraries — @gorhom/bottom-sheet, gifted-chat, awesome-gallery — run unmodified through the real RN primitives.

CLI wired to the engine.

Built so multiple coding agents can drive different sessions in parallel without stepping on each other.

+A WebSocket bridge on :7668 connects every tab and every terminal. sootsim open, tap, type, describe, tree, eval, perf, and 20+ more verbs round-trip in milliseconds — no Playwright, no screenshot OCR.
+Per-terminal session files keyed on the agent's session id prevent collisions. sootsim list shows [in use] and last-active time.
+sootsim claim takes a 60-second exclusive lease; --force steals. Hidden-tab writes warn before firing.

The canvas is accessible.

A DOM overlay mirrors every node with real semantic elements — <button>, <a>, <input>, <h2>, <nav> — with full ARIA. Screen readers, Chrome DevTools, and AI browser tools read the canvas directly. Agent mode upgrades ScrollView to <div>, TextInput to <input>, Pressable to <button>, forwarding events back to the engine.

Test, record, ship.

Inspection tools that talk to the engine, not to a pixel buffer.

+Drop-in Detox driver — existing import from 'detox' suites run against the canvas without a rewrite.
+YAML flows with flow start / keep / end draft mode, --validate replay, --video capture, --profile frame timing.
+Built-in skills for a11y review, compat check, visual diff, gallery screenshots, and perf transition profiling. sootsim debug snapshot + diff shows exactly what changed in layout, transform, or opacity between two moments.

Electron desktop, same canvas.

Frameless transparent window with custom 60fps resize and drag, four scale modes (Physical / Point Accurate / Pixel Accurate / Fit), a macOS tray that scans for running dev servers every 5 seconds, OTA updates that install silently on quit, a sootsim:// deep-link protocol, and a shared native menu that renders identically in the browser shell.

All (195)
Core React Native (13)
Navigation (11)
Animation & Gestures (5)
Storage & Data (10)
Media (17)
UI Libraries (42)
Expo SDK (36)
Analytics & Monitoring (17)
Platform (44)
showing 195 of 195
Core React Native13
@react-native-clipboard/clipboardFull
>=1.0.0
100%
navigator.clipboard based
@react-native-masked-view/masked-viewFull
>=0.2.0
100%
engine-level masked-view node type with canvaskit saveLayer + BlendMode.DstIn alpha compositing
react-native-fast-imagePartial
>=8.0.0
80%
renders <img> element
react-native-gesture-handlerFull
>=2.30.0
100%
tap, pan, pinch, rotation, fling, long press, race, manual, simultaneous
react-native-keyboard-controllerFull
>=1.0.0
100%
keyboard avoiding, toolbar, aware scroll, gesture area, state hooks
react-native-nitro-modulesFull
>=0.30.0
100%
proxy-based noop framework for JSI modules
react-native-reanimatedFull
>=4.0.0
100%
shared values with live-value shape, timing/spring/decay, interpolate, layout animations, SharedTransition builders, createAnimatedComponent, withClamp, frame callbacks
react-native-safe-area-contextFull
>=4.0.0
100%
full support
react-native-screensFull
>=4.0.0
100%
screen container, stack, header config, full navigation props
react-native-shareFull
>=9.0.0
100%
navigator.share, file sharing, urls, email/mailto fallback
react-native-svgFull
>=13.0.0
100%
full SVG: shapes, paths, text, gradients, defs, clipPath, mask, pattern
react-native-view-shotStub
>=3.0.0
30%
noop returning empty result
react-native-webviewFull
>=11.0.0
100%
real iframe, postMessage, JS injection, loading/error states, scroll control
Navigation11
@callstack/react-native-bottom-tabsPartial
>=0.1.0
90%
tab bar with badge, labeled, haptic, scrollEdge
react-native-bottom-tabsPartial
>=6.0.0
90%
tab bar with badge, labeled, haptic, scrollEdge
react-native-drawer-layoutPartial
>=3.0.0
90%
pure JS drawer, uses reanimated + gesture-handler (both stubbed)
react-native-ios-context-menuPartial
>=1.0.0
90%
long-press/right-click dropdown with menu items, onPressMenuItem callback
react-native-ios-utilitiesPartial
>=4.0.0
90%
RNIWrapperView, RNIContextMenuView, RNIDetachedView, types, color utils
react-native-modalFull
>=11.0.0
100%
pure JS, uses Animated + View overlay
react-native-pager-viewPartial
>=6.0.0
90%
CSS scroll-snap pages, setPage via ref, onPageSelected/onPageScroll callbacks
react-native-screen-transitionsPartial
>=1.0.0
90%
shared element transitions noop — components pass through children
react-native-tab-viewPartial
>=3.0.0
90%
pure JS tab view with ScrollView web fallback
react-native-teleportFull
>=1.0.0
100%
portal via react context
solitoFull
>=4.0.0
100%
pure JS navigation abstraction — useRouter, useLink
Animation & Gestures5
lottie-react-nativeStub
>=5.0.0
30%
placeholder div, play/pause API
motiFull
>=0.20.0
100%
pure JS — composes reanimated (already stubbed)
react-native-animatableFull
>=1.0.0
100%
pure JS animations — Animated API
react-native-collapsibleFull
>=1.0.0
100%
pure JS expand/collapse — Animated API
react-native-workletsFull
>=0.1.0
100%
runOnJS/UI, WorkletRuntime, shared context
Storage & Data10
@bsky.app/react-native-mmkvFull
>=2.0.0
100%
alias to react-native-mmkv stub
@react-native-async-storage/async-storageFull
>=1.0.0
100%
full localStorage-backed implementation
@react-native-community/netinfoFull
>=9.0.0
100%
navigator.onLine based
expo-file-systemStub
>=15.0.0
30%
basic read/write stubs
expo-secure-storePartial
>=12.0.0
90%
localStorage with base64 obfuscation, async/sync API, biometric stub
expo-sqlitePartial
>=13.0.0
60%
in-memory async + sync database compat, context provider, Zero/Replicache-oriented statement support
react-native-fsFull
>=2.0.0
100%
localStorage file system, encoding support, crypto hash, fetch downloads
react-native-keychainPartial
>=8.0.0
80%
localStorage backed credentials
react-native-mmkvFull
>=2.0.0
100%
full localStorage-backed MMKV: typed get/set, hooks, listeners, recrypt, trim
react-native-nitro-cookiesFull
>=1.0.0
100%
document.cookie — get, set, remove, clearAll
Media17
@react-native-camera-roll/camera-rollStub
>=5.0.0
30%
noop, returns empty results
expo-audioPartial
>=0.1.0
80%
HTML5 Audio playback, MediaRecorder recording, hooks
expo-avPartial
>=13.0.0
90%
real HTML5 Audio playback, Video with imperative API, MediaRecorder recording
expo-cameraPartial
>=14.0.0
50%
CameraView placeholder, permission hooks, enums
expo-document-pickerPartial
>=12.0.0
90%
file input picker, multiple, type filter
expo-imagePartial
>=1.0.0
90%
Image + ImageBackground + useImage + ImageRef, recyclingKey, cachePolicy
expo-image-manipulatorStub
>=11.0.0
30%
noop manipulateAsync returning input uri
expo-image-pickerPartial
>=14.0.0
80%
file input picker, base64, multi-select
expo-media-libraryPartial
>=15.0.0
50%
noop permissions and asset queries
expo-videoPartial
>=1.0.0
70%
VideoView with HTML5 video, useVideoPlayer hook
expo-video-thumbnailsStub
>=8.0.0
30%
noop getThumbnailAsync returns empty result
react-native-compressorStub
>=1.0.0
30%
noop, returns input URI unchanged
react-native-image-crop-pickerPartial
>=0.40.0
70%
file input picker, openPicker/openCamera/openCropper
react-native-image-pickerPartial
>=5.0.0
70%
launch functions resolve with didCancel
react-native-image-zoom-viewerFull
>=3.0.0
100%
pure JS zoom — PanResponder + Image
react-native-videoPartial
>=5.0.0
70%
HTML5 video element
react-native-vision-cameraStub
>=3.0.0
30%
noop camera, permission hooks
UI Libraries42
@expo/uiPartial
>=0.1.0
90%
Button, Switch, Picker, Slider, SegmentedControl, TextField, Checkbox, ColorPicker, ProgressView
@floating-ui/react-nativeFull
>=0.10.0
100%
pure JS positioning — uses RN layout
@gorhom/bottom-sheetFull
>=5.0.0
100%
snap points, backdrop, imperative API, footer, keyboard behavior
@gorhom/portalFull
>=1.0.0
100%
pure JS portal — React context based
@legendapp/listFull
>=1.0.0
100%
pure JS — composes flash-list (already stubbed)
@mattermost/react-native-paste-inputPartial
>=0.3.0
80%
textarea with real clipboard paste event handling
@miblanchard/react-native-sliderPartial
>=2.0.0
80%
alias to @react-native-community/slider stub
@react-native-community/blurFull
>=4.0.0
100%
CSS backdrop-filter blur + webkit prefix, BlurView + VibrancyView
@react-native-menu/menuPartial
>=0.7.0
90%
MenuView renders real ios-style canvas menu: actions, subactions, checked state, destructive + disabled attributes, onPressAction, shouldOpenOnLongPress
@react-native-vector-icons/fontawesome6-proFull
>=12.0.0
100%
pure JS glyph maps + font files
@shopify/flash-listPartial
>=1.0.0
80%
renders as FlatList equivalent
@shopify/react-native-skiaStub
>=0.1.0
30%
Canvas placeholder, noop drawing primitives
burntPartial
>=0.1.0
90%
toast via Notification API, alert via console, dismissAllAlerts, custom icon
expo-blurPartial
>=12.0.0
90%
backdrop-filter blur, experimentalBlurMethod, BlurTint types
expo-glass-effectFull
>=0.1.0
100%
liquid glass via CanvasKit, useGlassEffect hook
expo-linear-gradientFull
>=12.0.0
100%
canvaskit gradient shader, full API
expo-liquid-glass-viewPartial
>=0.1.0
80%
liquid glass via CanvasKit shaders
expo-mesh-gradientPartial
>=0.1.0
90%
canvas 2D radial gradients at mesh points, CSS fallback
react-native-calendarsFull
>=1.0.0
100%
pure JS calendar — View + Text, no native code
react-native-confirmation-code-fieldFull
>=7.0.0
100%
pure JS code input — TextInput cells
react-native-country-picker-modalFull
>=2.0.0
100%
pure JS country picker — FlatList + Modal
react-native-draggable-flatlistFull
>=3.0.0
100%
pure JS — composes gesture-handler + reanimated (both stubbed)
react-native-dropdown-pickerFull
>=5.0.0
100%
pure JS dropdown — View + ScrollView + TouchableOpacity
react-native-gifted-chatFull
>=2.0.0
100%
pure JS chat UI — FlatList + TextInput
react-native-linear-gradientPartial
>=2.0.0
90%
canvaskit gradient shader via sootsim
react-native-markdown-displayFull
>=7.0.0
100%
pure JS markdown → RN components (View, Text, Image)
react-native-paperPartial
>=5.0.0
80%
pure JS Material Design — uses RN primitives + reanimated + svg + safe-area
react-native-pdfPartial
>=6.0.0
50%
placeholder view, no real PDF rendering in canvas
react-native-progressFull
>=5.0.0
100%
pure JS progress bars — SVG + Animated
react-native-qrcode-svgFull
>=6.0.0
100%
pure JS QR generator using SVG
react-native-render-htmlFull
>=6.0.0
100%
pure JS HTML to RN components
react-native-select-dropdownFull
>=3.0.0
100%
pure JS — FlatList + TextInput + Modal
react-native-simple-toastFull
>=3.0.0
100%
DOM toast overlay with gravity + duration
react-native-size-mattersFull
>=0.3.0
100%
pure JS Dimensions scaling
react-native-step-indicatorFull
>=1.0.0
100%
pure JS step UI — View + Text
react-native-swiperFull
>=1.0.0
100%
pure JS carousel — ScrollView based
react-native-switchFull
>=2.0.0
100%
pure JS toggle — Animated + View
react-native-toast-messageFull
>=2.0.0
100%
pure JS toast overlay — View + Animated
react-native-uitextviewPartial
>=1.0.0
90%
div wrapper with selectable text
react-native-vector-iconsPartial
>=9.0.0
50%
span-based icon stubs, all icon sets
react-native-wheel-pickPartial
>=1.0.0
70%
HTML select and date/time input elements
zeegoPartial
>=3.0.0
90%
DropdownMenu + ContextMenu render via canvas ContextMenu: items, groups, checkbox, submenu, destructive, SF Symbol icon mapping, onSelect + onValueChange
Expo SDK36
expoPartial
>=49.0.0
70%
registerRootComponent, Constants, useAssets, useURL
expo-applicationPartial
>=5.0.0
80%
app metadata, vendor ID
expo-auth-sessionStub
>=5.0.0
30%
noop auth flow, useAuthRequest hook, makeRedirectUri
expo-background-taskFull
>=55.0.0
100%
noop — no browser background tasks
expo-build-propertiesFull
>=0.1.0
100%
build-time config plugin only, no runtime behavior
expo-calendarPartial
>=13.0.0
50%
noop calendar/event/reminder operations
expo-clipboardFull
>=4.0.0
100%
navigator.clipboard based
expo-constantsFull
>=14.0.0
100%
full stub
expo-contactsStub
>=13.0.0
30%
noop, returns empty results, permissions always granted
expo-cryptoPartial
>=12.0.0
90%
web crypto API, full digest algorithms, getRandomBytes
expo-dev-clientFull
>=1.0.0
100%
dev tooling — no runtime behavior
expo-deviceFull
>=6.0.0
100%
full device info, all async APIs
expo-fontFull
>=11.0.0
100%
web font loading
expo-hapticsFull
>=12.0.0
100%
no-op (no haptic hardware)
expo-intent-launcherFull
>=11.0.0
100%
noop (Android-only feature)
expo-keep-awakeFull
>=14.0.0
100%
noop (no wake lock in browser)
expo-linkingFull
>=5.0.0
100%
window.location based
expo-local-authenticationPartial
>=13.0.0
60%
authenticateAsync returns failure, hardware/enrolled stubs
expo-localizationFull
>=14.0.0
100%
navigator.language + Intl backed locale, timezone, RTL
expo-locationPartial
>=17.0.0
70%
navigator.geolocation, permissions always granted
expo-modules-corePartial
>=1.0.0
90%
EventEmitter, NativeModule, SharedObject, SharedRef, requireNativeModule/Optional, CodedError, permissions, Platform
expo-navigation-barFull
>=4.0.0
100%
noop (Android-only feature)
expo-notificationsFull
>=0.20.0
100%
browser Notification API, scheduling, channels, badge, handler
expo-printPartial
>=14.0.0
50%
noop print, mock printToFile
expo-screen-orientationPartial
>=7.0.0
90%
noop lock/unlock, orientation enums
expo-sensorsPartial
>=13.0.0
50%
mock sensor data, no real hardware
expo-sharingFull
>=12.0.0
100%
noop share sheet
expo-smsFull
>=12.0.0
100%
noop, isAvailable false on web
expo-splash-screenFull
>=0.17.0
100%
no-op
expo-status-barFull
>=2.0.0
100%
config component, no-op rendering
expo-store-reviewFull
>=8.0.0
100%
noop requestReview, isAvailable true
expo-system-uiFull
>=4.0.0
100%
noop background color management
expo-task-managerFull
>=11.0.0
100%
in-memory task registry, permissions
expo-tracking-transparencyFull
>=3.0.0
100%
always granted, isAvailable true
expo-updatesFull
>=0.20.0
100%
full noop update API, useUpdates, currentlyRunning
expo-web-browserFull
>=12.0.0
100%
window.open
Analytics & Monitoring17
@bitdrift/react-nativeStub
>=0.1.0
30%
noop analytics init/log/addField
@datadog/mobile-react-nativeStub
>=1.0.0
30%
noop SDK, logs, trace, rum, provider
@react-native-firebase/analyticsStub
>=18.0.0
30%
noop event logging
@react-native-firebase/appStub
>=18.0.0
30%
noop init
@react-native-firebase/messagingStub
>=18.0.0
30%
noop token/subscribe
@segment/analytics-react-nativeStub
>=2.0.0
30%
noop createClient, provider, hooks
@sentry/react-nativeFull
>=5.0.0
100%
full noop API surface — init, capture, scope, sessions, spans, metrics, trace
expo-insightsFull
>=55.0.0
100%
noop telemetry SDK
posthog-react-nativePartial
>=2.0.0
90%
full noop: provider, hooks, PostHog class, nav tracker, feature flags
react-native-adjustStub
>=4.0.0
30%
noop create/trackEvent, AdjustConfig/AdjustEvent/AdjustAdRevenue classes
react-native-amplitude-analyticsFull
>=0.2.0
100%
noop analytics
react-native-appsflyerStub
>=6.0.0
30%
noop initSdk/logEvent, console-logged events
react-native-branchStub
>=5.0.0
30%
noop subscribe/setIdentity, BranchEvent console-logged
react-native-code-pushStub
>=5.0.0
30%
noop codePush HOC, sync, checkForUpdate
react-native-fbsdk-nextStub
>=12.0.0
30%
noop LoginManager/AccessToken/Profile/AppEventsLogger/ShareDialog
react-native-mixpanelStub
>=1.0.0
30%
noop analytics class
react-native-onesignalStub
>=5.0.0
30%
noop initialize/login/logout, Notifications, InAppMessages, User
Platform44
@invertase/react-native-apple-authenticationStub
>=2.0.0
30%
noop performRequest/getCredentialState with mock credential
@mozzius/expo-dynamic-app-iconFull
>=1.0.0
100%
noop setAppIcon/getAppIcon, useDynamicAppIcon hook
@notifee/react-nativeStub
>=7.0.0
30%
noop channels, notifications, permissions
@react-native-community/checkboxFull
>=0.5.0
100%
HTML checkbox with accentColor + onValueChange
@react-native-community/datetimepickerFull
>=6.0.0
100%
HTML date/time/datetime-local input, open(), countdown
@react-native-community/geolocationPartial
>=3.0.0
80%
navigator.geolocation backed
@react-native-community/sliderPartial
>=4.0.0
80%
HTML range input element
@react-native-google-signin/google-signinStub
>=10.0.0
30%
noop configure/signIn/signOut with mock user
@react-native-picker/pickerFull
>=2.0.0
100%
HTML select element, Picker.Item, focus/blur refs
@stripe/stripe-react-nativeStub
>=0.20.0
30%
noop provider, hooks, CardField component
react-native-aes-cryptoFull
>=3.0.0
100%
Web Crypto API — AES-CBC/GCM, PBKDF2, SHA, HMAC, random
react-native-app-authFull
>=6.0.0
100%
browser OAuth via popup, PKCE, token refresh/revoke, register
react-native-background-timerFull
>=2.0.0
100%
wraps real setInterval/setTimeout
react-native-biometricsStub
>=3.0.0
30%
mock unavailable, no biometric hardware
react-native-blob-utilPartial
>=0.18.0
60%
browser fetch + IndexedDB fs operations
react-native-bootsplashFull
>=4.0.0
100%
real module runs; RNBootSplash turbo module provides getConstants/hide/isVisible
react-native-configFull
>=1.0.0
100%
proxy returning undefined for all keys
react-native-contactsStub
>=7.0.0
30%
noop, returns empty results
react-native-date-pickerPartial
>=5.0.0
80%
HTML date/time input, DatePickerModal
react-native-device-attestStub
>=0.1.0
30%
noop attestation (no hardware attestation in browser)
react-native-device-infoFull
>=10.0.0
100%
mock iPhone 16 Pro values, full getter set
react-native-document-pickerPartial
>=9.0.0
80%
browser file input, pick/pickSingle/isCancel
react-native-edge-to-edgeFull
>=1.0.0
100%
Android-only status bar config plugin
react-native-email-linkFull
>=1.0.0
100%
pure JS — uses Linking API for mailto:
react-native-exception-handlerPartial
>=2.0.0
80%
window.onerror + unhandledrejection wrappers
react-native-get-random-valuesFull
>=1.0.0
100%
noop, browser crypto.getRandomValues already exists
react-native-haptic-feedbackFull
>=1.0.0
100%
navigator.vibrate() with type-specific durations
react-native-iapStub
>=12.0.0
30%
noop purchase flow
react-native-in-app-reviewFull
>=4.0.0
100%
noop, resolves true
react-native-inappbrowser-rebornPartial
>=3.0.0
80%
window.open based
react-native-launch-argumentsFull
>=4.0.0
100%
empty args stub
react-native-localizeFull
>=2.0.0
100%
browser Intl-based locale, timezone, number format
react-native-logsFull
>=5.0.0
100%
pure JS console wrapper
react-native-mapsStub
>=1.0.0
40%
static placeholder, shape components render nothing
react-native-orientation-lockerFull
>=1.0.0
100%
noop lock/unlock, orientation constants
react-native-performancePartial
>=5.0.0
90%
browser Performance API wrapper
react-native-permissionsPartial
>=3.0.0
90%
always granted, full PERMISSIONS/RESULTS, openSettings, checkMultiple, requestMultiple, openPhotoPicker
react-native-purchasesStub
>=5.0.0
30%
noop purchase flow, mock empty data
react-native-pure-jwtFull
>=3.0.0
100%
Web Crypto JWT — decode, sign (HMAC-SHA256/384/512), verify
react-native-push-notificationPartial
>=8.0.0
70%
browser Notification API backed, scheduled notifications
react-native-quick-base64Full
>=2.0.0
100%
browser native btoa/atob
react-native-restartFull
>=0.0.1
100%
location.reload
react-native-splash-screenFull
>=3.0.0
100%
noop show/hide
react-native-zip-archiveStub
>=6.0.0
30%
noop zip/unzip, path constants
Undoing years of trauma.