docs/content/docs/barcode-scanner.mdx
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
The Barcode Scanner allows detecting machine readable codes (like Barcodes or QR codes) using MLKit.
It ships a simple <CodeScanner /> view, a Barcode Scanner Frame Processor Plugin, and a Barcode Scanner CameraOutput via the react-native-vision-camera-barcode-scanner library.
Unlike the Object Output (which is iOS-only), the Barcode Scanner works on both iOS and Android.
[!DEPENDENCY] The Barcode Scanner requires react-native-vision-camera-barcode-scanner to be installed.
<Tabs items={["<CodeScanner /> (view)", "CameraOutput", "Frame Processor Plugin"]} groupId="barcode-api-style" persist>
<Tab value="<CodeScanner /> (view)">
The <CodeScanner /> view is a simple view component to scan Barcodes:
function App() {
const isFocused = useIsFocused()
return (
<CodeScanner
isActive={isFocused}
barcodeFormats={['all-formats']}
onBarcodeScanned={(barcodes) => {
console.log(`Scanned ${barcodes.length} barcodes!`)
}}
onError={(error) => {
console.error(`Error scanning barcodes:`, error)
}}
/>
)
}
function App() {
// [!code ++:9]
const barcodeOutput = useBarcodeScannerOutput({
barcodeFormats: ['all-formats'],
onBarcodeScanned(barcodes) {
console.log(`Scanned ${barcodes.length} barcodes!`)
},
onError(error) {
console.error(`Failed to scan barcodes!`, error)
}
})
return (
<Camera
style={{ flex: 1 }}
isActive={true}
device="back"
// [!code ++]
outputs={[barcodeOutput]}
/>
)
}
return ( <Camera style={{ flex: 1 }} isActive={true} device="back" outputs={[frameOutput]} /> ) }
</Tab>
</Tabs>
### Configuring Barcode Formats
The code example above are configured to detect **all** [`BarcodeFormat`](/api/react-native-vision-camera-barcode-scanner/type-aliases/BarcodeFormat)s.
To improve performance, you should narrow [`barcodeFormats`](/api/react-native-vision-camera-barcode-scanner/interfaces/BarcodeScannerOptions#barcodeformats) down to only the formats you need - for example [`'code-128'`](/api/react-native-vision-camera-barcode-scanner/type-aliases/BarcodeFormat) - which is a common Barcode Format, or [`'qr-code'`](/api/react-native-vision-camera-barcode-scanner/type-aliases/BarcodeFormat) for square QR codes.
### Test it
To verify your [`<CodeScanner />`](/api/react-native-vision-camera-barcode-scanner/views/CodeScanner) works, try scanning this example [`'code-128'`](/api/react-native-vision-camera-barcode-scanner/type-aliases/BarcodeFormat) Barcode:

> [!TIP]
> See ["A Barcode"](a-barcode) for more information about a [`Barcode`](/api/react-native-vision-camera-barcode-scanner/hybrid-objects/Barcode).