v0.6.0 — Breaking: legacy JS-driver removed; AR-mode pixel-data ingest
Warning
Breaking changes. v0.6.0 retires the deprecated JS-driver non-AR path that was marked for removal in v0.5.0's Deprecated section. Default <Camera> hosts (no legacyDriver prop set) are unaffected — they were already on useFrameProcessorDriver. Hosts that opted into the legacy driver MUST migrate. See the migration guide in CHANGELOG.md.
Removed (breaking)
useIncrementalJSDriverhook +UseIncrementalJSDriverOptions/IncrementalJSDriverHandletypes.legacyDriver?: booleanprop on<Camera>.frameSourceMode: 'jsDriver'enum value — TS type narrowed to'arSession' | 'frameProcessor'.IncrementalStitcher.processFrameAtPathnative method on both iOS and Android.
Changed (breaking)
- Android
frameSourceModedefault:"jsDriver"→"arSession"for parity with iOS. Production<Camera>is unaffected (always passes the value explicitly).
Changed (non-breaking)
RNSARCameraView(AR mode) no longer eager-encodes a JPEG per ARCore frame. Migrated to the pixel-data path introduced for the Frame Processor in v0.5.1's F8.6 work. Expected gain on Galaxy A35: ~30-50 ms per accepted frame, with the dominant savings on rejected frames (no JPEG encode → no imread round-trip).
Removed (internal cleanup; no external API impact)
- F8.6 perf-diagnostic logs (
F8.6-route,F8.6-perf) introduced in v0.5.1 — F8.6 is now baked in for production. - ~245 LOC of orphaned native helpers dropped after
processFrameAtPathremoval (iOS:addBatchKeyframePath,isBatchKeyframeModegetter,decodeJpegToGrayscalePixelBuffer; Android:decodeJpegToGrayscale+GrayscaleFrame,isBatchKeyframeModegetter). - Stale comments referencing removed code paths swept across Kotlin / Swift / Obj-C / TS.
Migration
Default <Camera> hosts (no legacyDriver set)
No action required.
Hosts with legacyDriver={true} on <Camera>
Remove the prop:
// Before (v0.5.x)
<Camera legacyDriver={true} ... />
// After (v0.6.0)
<Camera ... />Hosts directly using useIncrementalJSDriver
Migrate to useFrameProcessorDriver. Handle shape ({ start, stop, frameProcessor, isRunning }) preserved. Gyro pose-synthesis convention (q = q_yaw * q_pitch * q_roll) is identical.
Raw NativeModules callers passing frameSourceMode: 'jsDriver'
Change to 'frameProcessor'. TS now rejects 'jsDriver' at compile time.
Verification
- iOS xcodebuild RNImageStitcherExample iphonesimulator26.5 — exit 0
- Android
:react-native-image-stitcher:compileDebugKotlin(JDK 17) — BUILD SUCCESSFUL - iPhone 17 Pro (real device) AR-mode capture —
durationMs: 5966, framesIncluded: 4, framesDropped: 0, stitchModeResolved: 'scans' - Adversarial code review (superpowers:code-reviewer) — SHIP IT AFTER FIXES; all fixes applied in 957848c
Full notes: CHANGELOG.md
Full Changelog: v0.5.1...v0.6.0