RORK LABJP
MAX — Rork Max builds native Swift apps instead of React Native, supporting iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and iMessageNATIVE — It reaches AR/LiDAR, Metal 3D, widgets, Dynamic Island, Live Activities, HealthKit, NFC, and on-device Core MLPUBLISH — Two-click App Store publishing sharply shortens the submission work for solo developersSWIFT — Describe your app in plain English and Rork generates working code for iOS, Android, and webGROWTH — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — It is free to start, with paid plans from $25/month and Rork Max at $200/monthMAX — Rork Max builds native Swift apps instead of React Native, supporting iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and iMessageNATIVE — It reaches AR/LiDAR, Metal 3D, widgets, Dynamic Island, Live Activities, HealthKit, NFC, and on-device Core MLPUBLISH — Two-click App Store publishing sharply shortens the submission work for solo developersSWIFT — Describe your app in plain English and Rork generates working code for iOS, Android, and webGROWTH — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — It is free to start, with paid plans from $25/month and Rork Max at $200/month
Articles/Dev Tools
Dev Tools/2026-06-29Advanced

Rork × Vision Camera v4: A Production-Grade Camera Stack with QR, OCR, and ML Inference

Wire React Native Vision Camera v4 into a Rork project end-to-end — frame processors, ML inference, QR/OCR, plus battery and thermal tuning, a real-device test matrix, store review, and a staged rollout.

Vision CameraReact Native202Rork501Frame ProcessorMLKitQR CodeOCREAS Build14

Premium Article

Pulling a camera feature from "it kind of works" to "I can ship this to the App Store" is one of the slowest gauntlets in any Rork project. Over the past year I shipped four camera-heavy apps, and every time I migrated the prototype off Expo Camera I lost half a day to two days debugging the same handful of problems.

Vision Camera v4 makes life harder before it makes it better. The moment you commit to it, you sign up for a four-way knot of EAS Custom Dev Client, Worklets, iOS AVAudioSession, and Android Camera2. Get one of them wrong and you'll see a black screen on a real iPhone, while the simulator runs fine. Or QR scanning works, then audio recording crashes the process the next time you tap record.

This guide walks through wiring Vision Camera v4 into a Rork project, real-time QR/barcode detection, ML inference inside frame processors, and the photo and video settings I actually keep in production. Every pitfall in the article is one I personally hit and solved, so you can skip the long way around.

Why Vision Camera v4 instead of Expo Camera

Most Rork templates ship with Expo Camera, and for a basic QR scanner or a one-shot photo, it's perfectly enough. The reason this article uses Vision Camera v4 is that anything serious — anything that needs per-frame work — runs into the limits of Expo Camera fast.

I think about the choice with three questions:

  • Do I need per-frame access in JS? QR scanning, OCR, and on-device ML inference all need this. Vision Camera v4 lets you do it inside Worklets without blocking the UI thread.
  • Do I need fine-grained capture control? Things like HDR, ISO, exposure, and focus distance — if you want to tune them like a real camera app, v4 is far easier than Expo Camera.
  • Do I need to adapt the format per device? Locking everything to 4K@60fps will torch low-end Androids. Vision Camera v4's getCameraDevice exposes formats so you can pick at runtime.

If you only need a single QR scan or a single still photo, stay on Expo Camera — you'll save build time and headaches. The trade-off is sharp: don't pay the v4 tax unless you need frame-level work.

Adding Vision Camera v4 to a Rork project: the EAS Custom Dev Client step

Vision Camera v4 ships native modules, so it can't run in Expo Go. After you export from Rork, you need an EAS Custom Dev Client. This is the first wall most teams hit.

# 1. Install Vision Camera and friends
npx expo install react-native-vision-camera
npx expo install react-native-worklets-core
npx expo install vision-camera-code-scanner
 
# 2. Add a Custom Dev Client profile in eas.json
# 3. Build the dev client
eas build --profile development --platform ios
eas build --profile development --platform android

If you forget react-native-worklets-core, the very first frame processor mount throws JSI is not available. I tripped on this on day one. Vision Camera v4 assumes Worklets, so install them as a pair, always.

Add the plugin block to app.json. The microphone copy is read by App Store reviewers, so be specific.

{
  "expo": {
    "plugins": [
      [
        "react-native-vision-camera",
        {
          "cameraPermissionText": "We use the camera to scan QR codes and documents.",
          "enableCodeScanner": true,
          "enableLocation": false,
          "enableMicrophonePermission": true,
          "microphonePermissionText": "We use the microphone to record audio with video clips."
        }
      ]
    ]
  }
}

On the EAS side, bump the build timeout to 60 minutes for builds that include Vision Camera. The default 30 minutes timed out on me a few times.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
A time-based frame-throttling pattern that keeps long camera sessions cool and battery-friendly
A real-device test matrix and the App Store / Play Store review checklist for camera apps
A measurement-driven case study that cut a scanning app's power draw by ~40%
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-05-11
Rork vs Expo CLI: What the Build Experience Actually Feels Like — A 12-Year Indie Dev Perspective
A hands-on comparison of Rork and Expo CLI build workflows from a developer with 12 years of indie app experience and 50M+ cumulative downloads. Honest take on where Rork creates friction for CLI-savvy developers — and where it genuinely wins.
Dev Tools2026-05-06
Adding Expo Dev Client to Your Rork App — The First Move When Native Modules Stop Working in Expo Go
The moment you add react-native-mmkv or RevenueCat to a Rork app, Expo Go stops launching it. Here's how to set up Expo Dev Client (a custom development build) and the three pitfalls I've actually walked into.
Dev Tools2026-05-02
Adding Native Modules to Rork-Generated Apps: A Practical Guide to Expo Prebuild
When your Rork prototype needs a native SDK or custom module, Expo Prebuild is the bridge to production. This practical guide walks through the limits of Managed Workflow and the actual commands for moving toward Bare Workflow.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →