{"id":4653,"url":"https://github.com/teslamotors/react-native-camera-kit","last_synced_at":"2026-10-19T07:28:05.779Z","repository":{"id":38854947,"uuid":"56147761","full_name":"teslamotors/react-native-camera-kit","owner":"teslamotors","description":"A high performance, easy to use, rock solid camera library for React Native apps.","archived":false,"fork":false,"pushed_at":"2026-08-03T22:12:29.000Z","size":14697,"stargazers_count":2710,"open_issues_count":113,"forks_count":635,"subscribers_count":190,"default_branch":"master","last_synced_at":"2026-10-11T06:54:21.451Z","etag":null,"topics":["android","camera","ios","react-native"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teslamotors.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2016-04-13T11:56:29.000Z","updated_at":"2026-10-10T23:36:42.000Z","dependencies_parsed_at":"2026-08-08T05:48:02.869Z","dependency_job_id":null,"html_url":"https://github.com/teslamotors/react-native-camera-kit","commit_stats":{"total_commits":769,"total_committers":79,"mean_commits":9.734177215189874,"dds":0.6618985695708712,"last_synced_commit":"619617346393d40950a5079aa97dc5c348f78a7b"},"previous_names":["wix/react-native-camera-kit"],"tags_count":117,"template":false,"template_full_name":null,"purl":"pkg:github/teslamotors/react-native-camera-kit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teslamotors%2Freact-native-camera-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teslamotors%2Freact-native-camera-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teslamotors%2Freact-native-camera-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teslamotors%2Freact-native-camera-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teslamotors","download_url":"https://codeload.github.com/teslamotors/react-native-camera-kit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teslamotors%2Freact-native-camera-kit/sbom","scorecard":{"id":874904,"data":{"date":"2025-08-11","repo":{"name":"github.com/teslamotors/react-native-camera-kit","commit":"29e58736337b18345e88e5d3803a19f7e34680e1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":9,"reason":"7 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":5,"reason":"Found 9/18 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/linter.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linter.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/linter.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linter.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/teslamotors/react-native-camera-kit/linter.yml/master?enable=pin","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: android/gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: example/android/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"18 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-m5qc-5hw7-8vg7","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-mpg4-rc92-vx8v","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T05:36:43.969Z","repository_id":38854947,"created_at":"2025-08-24T05:36:43.969Z","updated_at":"2025-08-24T05:36:43.969Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38351602,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","camera","ios","react-native"],"created_at":"2024-01-05T20:17:19.144Z","updated_at":"2026-10-19T07:28:05.768Z","avatar_url":"https://github.com/teslamotors.png","language":"Swift","funding_links":[],"categories":["Components","Uncategorized","Swift","Other","User Interface"],"sub_categories":["Media","Uncategorized","Mathematics","Mobile","Image \u0026 Camera"],"readme":"\u003ch1 align=\"center\"\u003e\n    🎈 React Native Camera Kit\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  A \u003cstrong\u003ehigh performance, easy to use, rock solid\u003c/strong\u003e\u003cbr\u003e\n  camera library for React Native apps.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/teslamotors/react-native-camera-kit/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"React Native Camera Kit is released under the MIT license.\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.org/package/react-native-camera-kit\"\u003e\n    \u003cimg src=\"https://badge.fury.io/js/react-native-camera-kit.svg\" alt=\"Current npm package version.\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cimg src=\"images/screenshot.jpg\"/\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ch3\u003eCross Platform (iOS and Android)\u003c/h3\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ch3\u003eOptimized for performance and high photo capture rate\u003c/h3\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ch3\u003eQR / Barcode scanning support\u003c/h3\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ch3\u003eFace detection support\u003c/h3\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ch3\u003eCamera preview support in iOS simulator\u003c/h3\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Installation (RN \u003e 0.60)\n\n```bash\nyarn add react-native-camera-kit\n```\n\n```bash\ncd ios \u0026\u0026 pod install \u0026\u0026 cd ..\n```\n\nAndroid:\n[Review your Kotlin configuration](./docs/kotlin.md) to ensure it's compatible with this library.\n\n## Permissions\n\nYou must use a separate library for prompting the user for permissions before rendering the `\u003cCamera .../\u003e` component.  \nWe recommend zoontek's library, react-native-permissions:\nhttps://github.com/zoontek/react-native-permissions#ios-flow\n\n**If you fail to prompt for permission, the camera will appear blank / black.**\n\n### Why no permissions API?\n\nConceptually, permissions are simple: Granted / Denied.  \nHowever, in reality it's not that simple due to privacy enhancements on iOS and Android.\n\n[Here's an example diagram from react-native-permissions's README](https://github.com/zoontek/react-native-permissions#ios-flow), which illustrates the complexity of the user-experience, which we don't want to duplicate in a camera library:\n\n```\n   ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n   ┃ check(PERMISSIONS.IOS.CAMERA) ┃\n   ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n                   │\n       Is the feature available\n           on this device ?\n                   │           ╔════╗\n                   ├───────────║ NO ║──────────────┐\n                   │           ╚════╝              │\n                ╔═════╗                            ▼\n                ║ YES ║                 ┌─────────────────────┐\n                ╚═════╝                 │ RESULTS.UNAVAILABLE │\n                   │                    └─────────────────────┘\n           Is the permission\n             requestable ?\n                   │           ╔════╗\n                   ├───────────║ NO ║──────────────┐\n                   │           ╚════╝              │\n                ╔═════╗                            ▼\n                ║ YES ║                  ┌───────────────────┐\n                ╚═════╝                  │ RESULTS.BLOCKED / │\n                   │                     │ RESULTS.LIMITED / │\n                   │                     │  RESULTS.GRANTED  │\n                   ▼                     └───────────────────┘\n          ┌────────────────┐\n          │ RESULTS.DENIED │\n          └────────────────┘\n                   │\n                   ▼\n  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n  ┃ request(PERMISSIONS.IOS.CAMERA) ┃\n  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n                   │\n         Does the user accept\n            the request ?\n                   │           ╔════╗\n                   ├───────────║ NO ║──────────────┐\n                   │           ╚════╝              │\n                ╔═════╗                            ▼\n                ║ YES ║                   ┌─────────────────┐\n                ╚═════╝                   │ RESULTS.BLOCKED │\n                   │                      └─────────────────┘\n                   ▼\n          ┌─────────────────┐\n          │ RESULTS.GRANTED │\n          └─────────────────┘\n```\n\nIn earlier versions of react-native-camera-kit, permissions were provided with an API, but for the above reasons, these APIs will be removed.\n\n#### Android\n\nAdd the following uses-permission to your `AndroidManifest.xml` (usually found at: `android/src/main/`)\n\n```java\n\u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/\u003e\n```\n\n#### iOS\n\nAdd the following usage descriptions to your `Info.plist` (usually found at: `ios/PROJECT_NAME/`)\n\n```xml\n\u003ckey\u003eNSCameraUsageDescription\u003c/key\u003e\n\u003cstring\u003eFor taking photos\u003c/string\u003e\n\n\u003ckey\u003eNSPhotoLibraryUsageDescription\u003c/key\u003e\n\u003cstring\u003eFor saving photos\u003c/string\u003e\n```\n\n## Running the example project\n\n- `yarn bootstrap`\n- `yarn example ios` or `yarn example android`\n\n## Components\n\n### Camera\n\nBarebones camera component if you need advanced/customized interface\n\n```ts\nimport { Camera, CameraType } from 'react-native-camera-kit';\n```\n\n```tsx\n\u003cCamera\n  ref={(ref) =\u003e (this.camera = ref)}\n  cameraType={CameraType.Back} // front/back(default)\n  flashMode=\"auto\"\n/\u003e\n```\n\n#### Barcode / QR Code Scanning\n\nAdditionally, the Camera can be used for barcode scanning\n\n```tsx\n\u003cCamera\n  ...\n  // Barcode props\n  scanBarcode={true}\n  onReadCode={(event) =\u003e Alert.alert('QR code found')} // optional\n  showFrame={true} // (default false) optional, show frame with transparent layer (qr code or barcode will be read on this area ONLY), start animation for scanner, that stops when a code has been found. Frame always at center of the screen\n  laserColor='red' // (default red) optional, color of laser in scanner frame\n  frameColor='white' // (default white) optional, color of border of scanner frame\n/\u003e\n```\n\n#### Face Detection\n\nDetect faces in real time. iOS uses Apple Vision; Android uses Google ML Kit.\n\n\u003e **Android requires a Google Play Store device**\n\n```tsx\n\u003cCamera\n  ...\n  faceDetectionEnabled={true}\n  faceDetectionThrottleMs={100} // optional, default 100ms\n  onFaceDetected={(event) =\u003e {\n    // event.nativeEvent.faces: FaceData[]\n    // each face: { id, yaw, pitch, roll, boundsX, boundsY, boundsWidth, boundsHeight }\n  }}\n  // Android only — track MLKit face module download progress\n  onFaceDetectionInstallStatus={(event) =\u003e {\n    // event.nativeEvent.state: FaceDetectionInstallState\n    // 'pending' | 'downloading' | 'installing' | 'ready' | 'failed' | 'unavailable'\n  }}\n/\u003e\n```\n\n##### Android: pre-download the ML Kit model\n\nThis library depends on the unbundled `play-services-mlkit-face-detection` variant — the model is downloaded by Google Play Services rather than bundled in the APK. By default the download happens on first use, and `onFaceDetectionInstallStatus` reports the progress.\n\nTo have Play Services [pre-download the model in the background after the app is installed](https://developers.google.com/ml-kit/tips/installation-paths#how_to_download_models), add this to your app's `AndroidManifest.xml`:\n\n```xml\n\u003capplication ...\u003e\n  \u003cmeta-data\n      android:name=\"com.google.mlkit.vision.DEPENDENCIES\"\n      android:value=\"face\" /\u003e\n\u003c/application\u003e\n```\n\n\u003e **Note:** Requires Google Play Services on the device. On devices without Google Play Services, `onFaceDetectionInstallStatus` fires once with `'unavailable'`.\n\n### Camera Props (Optional)\n\n| Props                           | Type                                   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n| ------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `ref`                           | Ref                                    | Reference on the camera view                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| `style`                         | StyleProp\\\u003cViewStyle\u003e                  | Style to apply on the camera view                                                                                                                                                                                                                                                                                                                                                                                                                          |\n| `flashMode`                     | `'on'`/`'off'`/`'auto'`                | Camera flash mode. Default: `auto`                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| `focusMode`                     | `'on'`/`'off'`                         | Camera focus mode. Default: `on`                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| `zoomMode`                      | `'on'`/`'off'`                         | Enable the pinch to zoom gesture. Default: `on`. If `on`, you must pass `zoom` as `undefined` or avoid setting `zoomMode` to allow pinch to zoom                                                                                                                                                                                                                                                                                                           |\n| `zoom`                          | `number`                               | Control the zoom. Default: `1.0`                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| `maxZoom`                       | `number`                               | Maximum zoom allowed (but not beyond what camera allows). Default: `undefined` (camera default max)                                                                                                                                                                                                                                                                                                                                                        |\n| `onZoom`                        | Function                               | Callback when user makes a pinch gesture, regardless of what the `zoom` prop was set to. Returned event contains `zoom`. Ex: `onZoom={(e) =\u003e console.log(e.nativeEvent.zoom)}`.                                                                                                                                                                                                                                                                            |\n| `torchMode`                     | `'on'`/`'off'`                         | Toggle flash light when camera is active. Default: `off`                                                                                                                                                                                                                                                                                                                                                                                                   |\n| `cameraType`                    | CameraType.Back/CameraType.Front       | Choose what camera to use. Default: `CameraType.Back`                                                                                                                                                                                                                                                                                                                                                                                                      |\n| `onOrientationChange`           | Function                               | Callback when physical device orientation changes. Returned event contains `orientation`. Ex: `onOrientationChange={(event) =\u003e console.log(event.nativeEvent.orientation)}`. Use `import { Orientation } from 'react-native-camera-kit'; if (event.nativeEvent.orientation === Orientation.PORTRAIT) { ... }` to understand the new value                                                                                                                  |\n| `allowedBarcodeTypes`           | string[]                               | Limits which barcode formats can be detected. Ex: `['code-128', 'code-39', 'code-93', 'codabar', 'ean-13', 'ean-8', 'itf', 'upc-a', 'upc-e', 'pdf-417', 'aztec', 'data-matrix', 'code-128']`. If empty or omitted, all supported formats are scanned.                                                                                                                                                                                                      |\n| **Android only**                |\n| `onError`                       | Function                               | Android only. Callback when camera fails to initialize. Ex: `onError={(e) =\u003e console.log(e.nativeEvent.errorMessage)}`.                                                                                                                                                                                                                                                                                                                                    |\n| `shutterPhotoSound`             | `boolean`                              | Android only. Enable or disable the shutter sound when capturing a photo. Default: `true`                                                                                                                                                                                                                                                                                                                                                                  |\n| **iOS only**                    |\n| `ratioOverlay`                  | `'int:int'`                            | Show a guiding overlay in the camera preview for the selected ratio. Does not crop image as of v9.0. Example: `'16:9'`                                                                                                                                                                                                                                                                                                                                     |\n| `ratioOverlayColor`             | Color                                  | Any color with alpha. Default: `'#ffffff77'`                                                                                                                                                                                                                                                                                                                                                                                                               |\n| `resetFocusTimeout`             | `number`                               | Dismiss tap to focus after this many milliseconds. Default `0` (disabled). Example: `5000` is 5 seconds.                                                                                                                                                                                                                                                                                                                                                   |\n| `resetFocusWhenMotionDetected`  | Boolean                                | Dismiss tap to focus when focus area content changes. Native iOS feature, see documentation: https://developer.apple.com/documentation/avfoundation/avcapturedevice/1624644-subjectareachangemonitoringenabl?language=objc). Default `true`.                                                                                                                                                                                                               |\n| `resizeMode`                    | `'cover' / 'contain'`                  | Determines the scaling and cropping behavior of content within the view. `cover` (resizeAspectFill on iOS) scales the content to fill the view completely, potentially cropping content if its aspect ratio differs from the view. `contain` (resizeAspect on iOS) scales the content to fit within the view's bounds without cropping, ensuring all content is visible but may introduce letterboxing. Default behavior depends on the specific use case. |\n| `scanThrottleDelay`             | `number`                               | Duration between scan detection in milliseconds. Default 2000 (2s)                                                                                                                                                                                                                                                                                                                                                                                         |\n| `maxPhotoQualityPrioritization` | `'balanced'` / `'quality'` / `'speed'` | [iOS 13 and newer](https://developer.apple.com/documentation/avfoundation/avcapturephotooutput/3182995-maxphotoqualityprioritization). `'speed'` provides a 60-80% median capture time reduction vs 'quality' setting. Tested on iPhone 6S Max (66% faster) and iPhone 15 Pro Max (76% faster!). Default `balanced`                                                                                                                                        |\n| `iOsDeferredStart`              | `boolean`                              | iOS 26+ only. Enables `AVCaptureOutput.deferredStartEnabled` when supported to get the preview visible faster. Default `true`. When enabled, the first capture can be delayed by a few hundred milliseconds. Ignored on Android and on older iOS versions.                                                                                                                                                                                                 |\n| `onCaptureButtonPressIn`        | Function                               | Callback when iPhone capture button is pressed in or Android volume or camera button is pressed in. Ex: `onCaptureButtonPressIn={() =\u003e console.log(\"volume button pressed in\")}`                                                                                                                                                                                                                                                                           |\n| `onCaptureButtonPressOut`       | Function                               | Callback when iPhone capture button is released or Android volume or camera button is released. Ex: `onCaptureButtonPressOut={() =\u003e console.log(\"volume button released\")}`                                                                                                                                                                                                                                                                                |\n| **Barcode only**                |\n| `scanBarcode`                   | `boolean`                              | Enable barcode scanner. Default: `false`                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| `showFrame`                     | `boolean`                              | Show frame in barcode scanner. Default: `false`                                                                                                                                                                                                                                                                                                                                                                                                            |\n| `barcodeFrameSize`              | `object`                               | Frame size of barcode scanner. Default: `{ width: 300, height: 150 }`                                                                                                                                                                                                                                                                                                                                                                                      |\n| `laserColor`                    | Color                                  | Color of barcode scanner laser visualization. Default: `red`                                                                                                                                                                                                                                                                                                                                                                                               |\n| `frameColor`                    | Color                                  | Color of barcode scanner frame visualization. Default: `yellow`                                                                                                                                                                                                                                                                                                                                                                                            |\n| `onReadCode`                    | Function                               | Callback when scanner successfully reads barcode. Returned event contains `codeStringValue`. Default: `null`. Ex: `onReadCode={(event) =\u003e console.log(event.nativeEvent.codeStringValue)}`                                                                                                                                                                                                                                                                 |\n| **Face detection**              |\n| `faceDetectionEnabled`          | `boolean`                              | Enable real-time face detection. Default: `false`                                                                                                                                                                                                                                                                                                                                                                                                          |\n| `faceDetectionThrottleMs`       | `number`                               | Minimum milliseconds between `onFaceDetected` emits. Default: `100`                                                                                                                                                                                                                                                                                                                                                                                        |\n| `onFaceDetected`                | Function                               | Callback while face detection is active, with one entry per detected face (empty array if none).                                                                                                                                                                                                                             |\n| `onFaceDetectionInstallStatus`  | Function                               | **Android only.** Callback while the MLKit face detection module is being downloaded by Google Play Services. See [Android: pre-download the ML Kit model](#android-pre-download-the-ml-kit-model) above to skip the first-run download.                                                                                                                        |\n\n### Imperative API\n\n_Note: Must be called on a valid camera ref_\n\n#### capture()\n\nCapture image as JPEG.\n\nA temporary file is created. You _must_ move this file to a permanent location (e.g. the app's 'Documents' folder) if you need it beyond the current session of the app as it may be deleted when the user leaves the app. You can move files by using a file system library such as [react-native-fs](https://github.com/itinance/react-native-fs) or [expo-filesystem](https://docs.expo.io/versions/latest/sdk/filesystem/).\n(On Android we currently have an unsupported `outputPath` prop but it's subject to change at any time).\n\nNote that the reason you're getting a URL despite it being a file is because Android 10+ encourages URIs. To keep things consistent regardless of settings or platform we always send back a URI.\n\n```ts\nconst { uri } = await this.camera.capture();\n// uri = 'file:///data/user/0/com.myorg.myapp/cache/ckcap123123123123.jpg'\n```\n\nIf you want to store it permanently, here's an example using [react-native-fs](https://github.com/itinance/react-native-fs):\n\n```ts\nimport RNFS from 'react-native-fs';\n// [...]\nlet { uri } = await this.camera.capture();\nif (uri.startsWith('file://')) {\n  // Platform dependent, iOS \u0026 Android uses '/'\n  const pathSplitter = '/';\n  // file:///foo/bar.jpg =\u003e /foo/bar.jpg\n  const filePath = uri.replace('file://', '');\n  // /foo/bar.jpg =\u003e [foo, bar.jpg]\n  const pathSegments = filePath.split(pathSplitter);\n  // [foo, bar.jpg] =\u003e bar.jpg\n  const fileName = pathSegments[pathSegments.length - 1];\n\n  await RNFS.moveFile(filePath, `${RNFS.DocumentDirectoryPath}/${fileName}`);\n  uri = `file://${destFilePath}`;\n}\n```\n\n## Using with Expo\n\nIf you are using Expo Managed Workflow, you can use this library with a third-party plugin `expo-react-native-camera-kit`.\n\n[See more here](https://github.com/avantstay/expo-react-native-camera-kit)\n\n## Contributing\n\n- Pull Requests are welcome, if you open a pull request we will do our best to get to it in a timely manner\n- Pull Request Reviews are even more welcome! we need help testing, reviewing, and updating open PRs\n- If you are interested in contributing more actively, please contact us.\n\n## License\n\nThe MIT License.\n\nSee [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteslamotors%2Freact-native-camera-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteslamotors%2Freact-native-camera-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteslamotors%2Freact-native-camera-kit/lists"}