# ahmedu007/react-native-nitro-zxing architecture

> Architecture diagram of the GitHub repository ahmedu007/react-native-nitro-zxing, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ahmedu007/react-native-nitro-zxing
- Repository: https://github.com/ahmedu007/react-native-nitro-zxing

## Overview

This is a React Native barcode-scanning library, not a standalone app. Its principal workflow configures a scanner, accepts VisionCamera frames or Nitro Image stills, decodes supported formats with zxing-cpp, and returns barcode values and coordinates. The graph covers the public API, native input adaptation, decoding, and result objects. Edges are limited to README statements and relationships visible in the supplied source excerpts or SOURCE INDEX; unsampled native registration and platform wiring are not expanded.

Main entry points: [`packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp`](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp) (Hybrid scanner), [`packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts`](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts) (Barcode result API), [`packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp`](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp) (ZXing decoder), [`packages/react-native-nitro-zxing/src/useBarcodeScanner.ts`](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/useBarcodeScanner.ts) (Scanner hook)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Public API"]
  node_hook["Scanner hook"]
  node_factory_ts["JS factory<br/>[factory.ts]"]
  node_scanner_spec["Scanner API"]
  node_factory_spec["Factory options"]
  node_format_types["Format types<br/>[BarcodeFormat.ts]"]
  node_value_types["Value types"]
  node_geometry_types["Geometry types<br/>[Rect.ts]"]
  node_point_type["Point type<br/>[Point.ts]"]
end

subgraph group_bridge["Native Scanner"]
  node_native_factory["Native factory"]
  node_scanner["Hybrid scanner"]
  node_frame_view["Frame adapter<br/>[FrameImageView.cpp]"]
end

subgraph group_decode["Decode Engine"]
  node_decoder["ZXing decoder<br/>[ZXingDecoder.cpp]"]
  node_downscaler["Image downscaler"]
  node_classifier["Value classifier"]
end

subgraph group_results["Barcode Results"]
  node_hybrid_barcode["Hybrid barcode<br/>[HybridBarcode.cpp]"]
  node_barcode_spec["Barcode result API<br/>[Barcode.nitro.ts]"]
end

node_developer(("Application code"))
node_camera["VisionCamera"]
node_image["Nitro Image"]
node_zxing["zxing-cpp"]

node_developer -->|"creates scanner"| node_hook
node_hook -->|"calls"| node_factory_ts
node_factory_ts -->|"requests hybrid"| node_native_factory
node_native_factory -->|"creates scanner"| node_scanner
node_developer -->|"scans frames or images"| node_scanner_spec
node_camera -.->|"provides frames"| node_scanner
node_image -->|"provides stills"| node_scanner
node_scanner -->|"adapts frames"| node_frame_view
node_scanner -->|"decodes input"| node_decoder
node_decoder -->|"reads barcodes"| node_zxing
node_decoder -->|"downscales pixels"| node_downscaler
node_decoder -->|"classifies values"| node_classifier
node_scanner -->|"wraps results"| node_hybrid_barcode
node_hybrid_barcode -->|"implements result"| node_barcode_spec
node_factory_spec -->|"uses formats"| node_format_types
node_barcode_spec -->|"reports format"| node_format_types
node_barcode_spec -->|"reports value type"| node_value_types
node_barcode_spec -->|"uses bounds"| node_geometry_types
node_barcode_spec -->|"uses corners"| node_point_type

click node_hook "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/useBarcodeScanner.ts"
click node_factory_ts "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/factory.ts"
click node_scanner_spec "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeScanner.nitro.ts"
click node_factory_spec "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeScannerFactory.nitro.ts"
click node_format_types "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeFormat.ts"
click node_value_types "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeValueType.ts"
click node_geometry_types "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Rect.ts"
click node_point_type "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Point.ts"
click node_native_factory "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcodeScannerFactory.cpp"
click node_scanner "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp"
click node_frame_view "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/FrameImageView.cpp"
click node_decoder "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp"
click node_downscaler "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/ImageDownscaler.cpp"
click node_classifier "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/BarcodeValueTypeClassifier.cpp"
click node_hybrid_barcode "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcode.cpp"
click node_barcode_spec "https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_hook,node_factory_ts,node_scanner_spec,node_factory_spec,node_format_types,node_value_types,node_geometry_types,node_point_type toneBlue
class node_native_factory,node_scanner,node_frame_view toneAmber
class node_decoder,node_downscaler,node_classifier toneMint
class node_hybrid_barcode,node_barcode_spec toneRose
class node_developer,node_camera,node_image,node_zxing toneIndigo
```

## Components

### Public API

- [Scanner hook](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/useBarcodeScanner.ts): `packages/react-native-nitro-zxing/src/useBarcodeScanner.ts`
- [JS factory](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/factory.ts): `packages/react-native-nitro-zxing/src/factory.ts`
- [Scanner API](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeScanner.nitro.ts): `packages/react-native-nitro-zxing/src/specs/BarcodeScanner.nitro.ts`
- [Factory options](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeScannerFactory.nitro.ts): `packages/react-native-nitro-zxing/src/specs/BarcodeScannerFactory.nitro.ts`
- [Format types](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeFormat.ts): `packages/react-native-nitro-zxing/src/specs/BarcodeFormat.ts`
- [Value types](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/BarcodeValueType.ts): `packages/react-native-nitro-zxing/src/specs/BarcodeValueType.ts`
- [Geometry types](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Rect.ts): `packages/react-native-nitro-zxing/src/specs/Rect.ts`
- [Point type](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Point.ts): `packages/react-native-nitro-zxing/src/specs/Point.ts`

### Native Scanner

- [Native factory](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcodeScannerFactory.cpp): `packages/react-native-nitro-zxing/cpp/HybridBarcodeScannerFactory.cpp`
- [Hybrid scanner](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp): `packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp`
- [Frame adapter](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/FrameImageView.cpp): `packages/react-native-nitro-zxing/cpp/FrameImageView.cpp`

### Decode Engine

- [ZXing decoder](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp): `packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp`
- [Image downscaler](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/ImageDownscaler.cpp): `packages/react-native-nitro-zxing/cpp/ImageDownscaler.cpp`
- [Value classifier](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/BarcodeValueTypeClassifier.cpp): `packages/react-native-nitro-zxing/cpp/BarcodeValueTypeClassifier.cpp`

### Barcode Results

- [Hybrid barcode](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/cpp/HybridBarcode.cpp): `packages/react-native-nitro-zxing/cpp/HybridBarcode.cpp`
- [Barcode result API](https://github.com/ahmedu007/react-native-nitro-zxing/blob/main/packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts): `packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts`

### Other components

- **Application code**
- **VisionCamera**
- **Nitro Image**
- **zxing-cpp**

## Connections

- Application code → Scanner hook: creates scanner (evidence: `packages/react-native-nitro-zxing/src/useBarcodeScanner.ts`)
- Scanner hook → JS factory: calls (evidence: `packages/react-native-nitro-zxing/src/useBarcodeScanner.ts`)
- JS factory → Native factory: requests hybrid (evidence: `packages/react-native-nitro-zxing/src/factory.ts`)
- Native factory → Hybrid scanner: creates scanner (evidence: `packages/react-native-nitro-zxing/cpp/HybridBarcodeScannerFactory.cpp`)
- Application code → Scanner API: scans frames or images (evidence: `packages/react-native-nitro-zxing/src/specs/BarcodeScanner.nitro.ts`)
- VisionCamera → Hybrid scanner: provides frames (evidence: `README.md`)
- Nitro Image → Hybrid scanner: provides stills
- Hybrid scanner → Frame adapter: adapts frames (evidence: `packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp`)
- Hybrid scanner → ZXing decoder: decodes input (evidence: `packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp`)
- ZXing decoder → zxing-cpp: reads barcodes (evidence: `packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp`)
- ZXing decoder → Image downscaler: downscales pixels (evidence: `packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp`)
- ZXing decoder → Value classifier: classifies values (evidence: `packages/react-native-nitro-zxing/cpp/ZXingDecoder.cpp`)
- Hybrid scanner → Hybrid barcode: wraps results (evidence: `packages/react-native-nitro-zxing/cpp/HybridBarcodeScanner.cpp`)
- Hybrid barcode → Barcode result API: implements result (evidence: `packages/react-native-nitro-zxing/cpp/HybridBarcode.cpp`)
- Factory options → Format types: uses formats (evidence: `packages/react-native-nitro-zxing/src/specs/BarcodeScannerFactory.nitro.ts`)
- Barcode result API → Format types: reports format (evidence: `packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts`)
- Barcode result API → Value types: reports value type (evidence: `packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts`)
- Barcode result API → Geometry types: uses bounds (evidence: `packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts`)
- Barcode result API → Point type: uses corners (evidence: `packages/react-native-nitro-zxing/src/specs/Barcode.nitro.ts`)
