Modern QR scanner overlay and image decoder for React Native. This version is built on top of react-native-vision-camera for scanning and a lightweight native image decoder for QR codes.
yarn add react-native-qr-decode-image-camera react-native-vision-cameraor
npm install react-native-qr-decode-image-camera react-native-vision-cameracd ios
pod installAdd camera permission keys to Info.plist:
NSCameraUsageDescriptionNSPhotoLibraryUsageDescription(if you decode from gallery)
Ensure your app has camera permission in AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />import React, { useState } from "react";
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
import { QrScanner } from "react-native-qr-decode-image-camera";
export default function ScannerScreen() {
const [torch, setTorch] = useState(false);
return (
<View style={styles.container}>
<QrScanner
onRead={result => {
console.log("QR value:", result.data);
}}
torch={torch}
isRepeatScan={false}
renderBottomView={() => (
<TouchableOpacity
style={styles.bottomButton}
onPress={() => setTorch(value => !value)}
>
<Text style={styles.bottomText}>{torch ? "Torch On" : "Torch Off"}</Text>
</TouchableOpacity>
)}
/>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#000"
},
bottomButton: {
flex: 1,
alignItems: "center",
justifyContent: "center",
backgroundColor: "rgba(0,0,0,0.4)"
},
bottomText: {
color: "#fff"
}
});import { decodeImage } from "react-native-qr-decode-image-camera";
decodeImage(fileUri)
.then(value => {
console.log("QR value:", value);
})
.catch(error => {
console.warn("No QR code found", error);
});QRreader is still available as an alias for decodeImage.
onRead(function, required): called with{ data, rawValue, type, bounds, native }.isRepeatScan(boolean, defaultfalse): allow repeated scans.scanCooldownMs(number, default1200): throttle between scans when repeated scanning is enabled.cameraPosition(string, default"back"):"back"or"front".torch(boolean or"on" | "off", defaultfalse): torch state.zoom(number, default0): normalized zoom between0and1.isActive(boolean, defaulttrue): pause/resume camera.codeTypes(array, default["qr"]): barcode types for VisionCamera.requestPermissionOnMount(boolean, defaulttrue): auto-request camera permission.enablePinchToZoom(boolean, defaulttrue): enable pinch gesture.renderTopView/renderBottomView(function): custom overlay content.topViewStyle/bottomViewStyle(style): containers for custom overlays.notAuthorizedView/noCameraView(node): fallback views.vibrate(boolean, defaulttrue): vibrate on scan.
These control the scanning mask and animation:
maskColorcornerColorborderColorrectHeightrectWidthborderWidthcornerBorderWidthcornerBorderLengthcornerOffsetSizeisCornerOffsetbottomHeightscanBarAnimateTimescanBarColorscanBarImagescanBarHeightscanBarMarginhintTexthintTextStylehintTextPositionisShowScanBarfinderXfinderY
- This library uses
react-native-vision-camerafor scanning. Follow its setup guide if you need camera permissions or additional configuration.