Skip to content

v0.6.0 — Breaking: legacy JS-driver removed; AR-mode pixel-data ingest

Choose a tag to compare

@bhargavkanda bhargavkanda released this 25 May 18:15
· 204 commits to main since this release

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)

  • useIncrementalJSDriver hook + UseIncrementalJSDriverOptions / IncrementalJSDriverHandle types.
  • legacyDriver?: boolean prop on <Camera>.
  • frameSourceMode: 'jsDriver' enum value — TS type narrowed to 'arSession' | 'frameProcessor'.
  • IncrementalStitcher.processFrameAtPath native method on both iOS and Android.

Changed (breaking)

  • Android frameSourceMode default: "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 processFrameAtPath removal (iOS: addBatchKeyframePath, isBatchKeyframeMode getter, decodeJpegToGrayscalePixelBuffer; Android: decodeJpegToGrayscale + GrayscaleFrame, isBatchKeyframeMode getter).
  • 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