{"_id":"@dariyd/react-native-text-recognition","_rev":"7-82eecdf605e16b84605546d7942bbfd2","name":"@dariyd/react-native-text-recognition","dist-tags":{"latest":"2.0.21"},"versions":{"2.0.15":{"name":"@dariyd/react-native-text-recognition","version":"2.0.15","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","_id":"@dariyd/react-native-text-recognition@2.0.15","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"dist":{"shasum":"6f4ef1b5e3b8b7ab16b3dc73dd67bb60c54d0d8d","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.15.tgz","fileCount":24,"integrity":"sha512-e9RSBLBtPx9Xul7NlPF/LZjqO/zIkp3Hxlbg0v1273oyO/+hiulsYEqrCXPhBOHTIXftYJwZ5nB+renSD//hJA==","signatures":[{"sig":"MEUCIQC7+YSM612PEuojbS6RiMQ5x88a0QfbgC0VqkpfC2EzXwIgLwNxWT59YGvQSdjOzJhtg6saabl0mGIfAhD2qYjhwuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8587005},"main":"index.js","title":"React Native Text Recognition","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"4b4c6910e5f57820343997d1d796a23e6baabf62","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"repository":{"url":"git+https://github.com/dariyd/react-native-text-recognition.git","type":"git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"_npmVersion":"10.8.2","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","directories":{},"_nodeVersion":"20.19.4","codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","android":{"javaPackageName":"com.reactnativetextrecognition"},"jsSrcsDir":"src"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","typescript":"^5.0.0","react-native":"^0.77.3"},"licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"_npmOperationalInternal":{"tmp":"tmp/react-native-text-recognition_2.0.15_1761647641832_0.692865756051696","host":"s3://npm-registry-packages-npm-production"}},"2.0.16":{"name":"@dariyd/react-native-text-recognition","version":"2.0.16","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","_id":"@dariyd/react-native-text-recognition@2.0.16","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"dist":{"shasum":"a83a589ee710840e03101ead5364da5c16376c51","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.16.tgz","fileCount":24,"integrity":"sha512-HzKiu2PSBszLMsmkp/RpdGmAEebrVIKPSgQyGeIFult3GbVfSjDppLOIDIqoXNESLrXF/xzNvj5wqeQXKc2rfA==","signatures":[{"sig":"MEUCIH5bvnvG7lnzOOx9WDmX/QS2baktkwX4pwpAYmmPwVI+AiEAiMJMPJOMoNUBSN/i13Ua4jScZvEyjZOj5l3wwl9Jomg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8587474},"main":"index.js","title":"React Native Text Recognition","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"2cd1049dde7c6ce82185c86d821b9e5ec662d246","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"repository":{"url":"git+https://github.com/dariyd/react-native-text-recognition.git","type":"git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"_npmVersion":"10.8.2","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","directories":{},"_nodeVersion":"20.19.4","codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","android":{"javaPackageName":"com.reactnativetextrecognition"},"jsSrcsDir":"src"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","typescript":"^5.0.0","react-native":"^0.77.3"},"licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"_npmOperationalInternal":{"tmp":"tmp/react-native-text-recognition_2.0.16_1761648031137_0.48288422893228766","host":"s3://npm-registry-packages-npm-production"}},"2.0.17":{"name":"@dariyd/react-native-text-recognition","version":"2.0.17","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","_id":"@dariyd/react-native-text-recognition@2.0.17","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"dist":{"shasum":"2231e6185a8233a6f0a5991c1056a3fe842f4b23","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.17.tgz","fileCount":24,"integrity":"sha512-jXYcrWGzu2TTWNrZ4BDhbcf+WDTeT7S14VdodBRyQdQqyZDCReLJVDrH4nvbN9rfk3XVpFrjWYImiOym1hBTNA==","signatures":[{"sig":"MEUCIGtojym6+7ZqCtAUjK6Ps2iXqBX9p0v7KF5uHRSML/97AiEAhP0g00SlCKS9m8/EBwt2C0Qo8HomFnslP/M3mMOSeVQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8587601},"main":"index.js","title":"React Native Text Recognition","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"4e981c6a4e8728120fa5454210b13674e46818c1","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"repository":{"url":"git+https://github.com/dariyd/react-native-text-recognition.git","type":"git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"_npmVersion":"10.8.2","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","directories":{},"_nodeVersion":"20.19.4","codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","android":{"javaPackageName":"com.reactnativetextrecognition"},"jsSrcsDir":"src"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","typescript":"^5.0.0","react-native":"^0.77.3"},"licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"_npmOperationalInternal":{"tmp":"tmp/react-native-text-recognition_2.0.17_1762860272344_0.5241728480650718","host":"s3://npm-registry-packages-npm-production"}},"2.0.18":{"name":"@dariyd/react-native-text-recognition","version":"2.0.18","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","_id":"@dariyd/react-native-text-recognition@2.0.18","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"dist":{"shasum":"a7f3e1c7003cc0f050590a5f6490abc4901b2936","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.18.tgz","fileCount":24,"integrity":"sha512-eqe4TamN5aF3YB8aIAGOQ1TFcFbI60FVZG4ALjb4QsFt7LhuMS7XBFhFuSYhKZEk7Txbbwfx0dck2iTcng9mhg==","signatures":[{"sig":"MEUCIHVavG20pFy1180E+dQNh0nErJsdQiPtVcSBDuVYROzTAiEAvgwnbyUeYNN//mqeNT1Synf+f4HXqIzPvPPyCNssohc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8587734},"main":"index.js","title":"React Native Text Recognition","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"c8fa21b3d6707e2f43c3f432fc191ba4369dd87b","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"repository":{"url":"git+https://github.com/dariyd/react-native-text-recognition.git","type":"git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"_npmVersion":"10.8.2","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","directories":{},"_nodeVersion":"20.19.4","codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","android":{"javaPackageName":"com.reactnativetextrecognition"},"jsSrcsDir":"src"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","typescript":"^5.0.0","react-native":"^0.77.3"},"licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"_npmOperationalInternal":{"tmp":"tmp/react-native-text-recognition_2.0.18_1762861230508_0.9017141557980037","host":"s3://npm-registry-packages-npm-production"}},"2.0.19":{"name":"@dariyd/react-native-text-recognition","version":"2.0.19","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","_id":"@dariyd/react-native-text-recognition@2.0.19","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"dist":{"shasum":"2222106d920cbe9d51995779e41e020360dd3dd1","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.19.tgz","fileCount":24,"integrity":"sha512-qjUNQzSTO/gS1XE0or0/FSm/Vx4EXKDs8BKfRMv6d5dNtiwH+HFk3wOB0jE4I+UYRPFVTCDpC6QW/D5VK7ZNiQ==","signatures":[{"sig":"MEQCICACE9cAGxAcfkok2kPKYtSj7rKJMO9WUYwzmyC+1Rz+AiBdZT3SHrIJQVU1OAk5etHe2RnPphkE69bVYepT6rBJSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8588006},"main":"index.js","title":"React Native Text Recognition","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"2aaf94b57bdf995f59f377dcdf4c89ed6f3becf8","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"repository":{"url":"git+https://github.com/dariyd/react-native-text-recognition.git","type":"git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"_npmVersion":"10.8.2","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","directories":{},"_nodeVersion":"20.19.4","codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","android":{"javaPackageName":"com.reactnativetextrecognition"},"jsSrcsDir":"src"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","typescript":"^5.0.0","react-native":"^0.77.3"},"licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"_npmOperationalInternal":{"tmp":"tmp/react-native-text-recognition_2.0.19_1762862059253_0.027848478181540015","host":"s3://npm-registry-packages-npm-production"}},"2.0.20":{"name":"@dariyd/react-native-text-recognition","version":"2.0.20","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","_id":"@dariyd/react-native-text-recognition@2.0.20","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"dist":{"shasum":"004eb567a2f0d0512935c77ec9adff2744b56123","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.20.tgz","fileCount":24,"integrity":"sha512-d01ue31IDDGrxCagWl5hRe86wv2Llvkc85k+5/IeLFyAcadSCmYUUuVOpuUkD0/3RgVaK8TGTRozGH1N0MTwvA==","signatures":[{"sig":"MEQCIG/F0TFELlUtXBalTzYnEhqRp7iZW7Gdojw3NhnrWJ02AiAcPKD2U5nyPZoZfLTOAev14ZQD+hc36waj9i2aPF5dBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8588006},"main":"index.js","title":"React Native Text Recognition","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"a891ab866c49fd759082b4935854fb6eb62f895d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"repository":{"url":"git+https://github.com/dariyd/react-native-text-recognition.git","type":"git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"_npmVersion":"10.8.2","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","directories":{},"_nodeVersion":"20.19.4","codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","android":{"javaPackageName":"com.reactnativetextrecognition"},"jsSrcsDir":"src"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","typescript":"^5.0.0","react-native":"^0.77.3"},"licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"_npmOperationalInternal":{"tmp":"tmp/react-native-text-recognition_2.0.20_1763722160656_0.1972586383783037","host":"s3://npm-registry-packages-npm-production"}},"2.0.21":{"name":"@dariyd/react-native-text-recognition","title":"React Native Text Recognition","version":"2.0.21","description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","main":"index.js","types":"index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/dariyd/react-native-text-recognition.git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","licenseFilename":"LICENSE","peerDependencies":{"react":">=18.2.0","react-native":">=0.77.3"},"devDependencies":{"react":"^18.3.1","react-native":"^0.77.3","typescript":"^5.0.0"},"engines":{"node":">=18"},"codegenConfig":{"name":"ReactNativeTextRecognitionSpec","type":"modules","jsSrcsDir":"src","android":{"javaPackageName":"com.reactnativetextrecognition"}},"_id":"@dariyd/react-native-text-recognition@2.0.21","gitHead":"0a1a21ef636d2e214eb78bdc22aa7b752e780b5f","bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"homepage":"https://github.com/dariyd/react-native-text-recognition#readme","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-OkZh7II7nmQWxhPVEqW0JFU38FK2NgO8R/NB9fG0SEdzxNOO7i/EZRSfviAR+Yh8IK4A/VeDpKM4O4KdV9RgvQ==","shasum":"213b87614ad39a67a0de60d98f77b987a8950b59","tarball":"https://registry.npmjs.org/@dariyd/react-native-text-recognition/-/react-native-text-recognition-2.0.21.tgz","fileCount":24,"unpackedSize":8589599,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDr1dHMnmQ8kR/VIivtXIs/cZcexxXLVsxiAN7p0k0XygIgRmzmbUE2BNpPfZ7iHQbH+MKgTNvNVQE301Jd0nmOCsY="}]},"_npmUser":{"name":"dariyd","email":"dariyd@gmail.com"},"directories":{},"maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-text-recognition_2.0.21_1788946863516_0.06421350018951122"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-28T10:34:01.754Z","modified":"2026-09-09T09:41:03.943Z","2.0.15":"2025-10-28T10:34:02.179Z","2.0.16":"2025-10-28T10:40:31.455Z","2.0.17":"2025-11-11T11:24:32.635Z","2.0.18":"2025-11-11T11:40:30.780Z","2.0.19":"2025-11-11T11:54:19.555Z","2.0.20":"2025-11-21T10:49:21.572Z","2.0.21":"2026-09-09T09:41:03.803Z"},"bugs":{"url":"https://github.com/dariyd/react-native-text-recognition/issues"},"author":{"name":"dariyd","email":"dariyd@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/dariyd/react-native-text-recognition#readme","keywords":["react-native","ocr","text-recognition","vision","ml-kit","pdf","text-detection","image-to-text","vision-api","multi-language","ios","android","turbomodules","fabric","new-architecture"],"repository":{"type":"git","url":"git+https://github.com/dariyd/react-native-text-recognition.git","baseUrl":"https://github.com/dariyd/react-native-text-recognition"},"description":"Advanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.","maintainers":[{"name":"dariyd","email":"dariyd@gmail.com"}],"readme":"# react-native-text-recognition\n\nAdvanced OCR text recognition for React Native with Vision API (iOS) and ML Kit (Android). Supports multi-language recognition, PDF files, and both old and new React Native architectures.\n\n[![npm version](https://badge.fury.io/js/@dariyd%2Freact-native-text-recognition.svg)](https://badge.fury.io/js/@dariyd%2Freact-native-text-recognition)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Features\n\n- 🎯 **Smart Defaults**: Automatically detects file types (PDF/image) and applies optimal settings - no configuration needed!\n- 📱 **Cross-platform**: iOS 13+ and Android 21+\n- 🚀 **New Architecture Ready**: Full TurboModule support on iOS, Bridge compatibility on Android (works with both old and new arch)\n- 🔤 **Multi-language Support**: Recognizes text in 100+ languages with automatic detection\n- 📄 **PDF Support**: High-quality PDF text extraction (400 DPI by default) on both platforms\n- 🎯 **Flexible Results**: Get text with bounding boxes, confidence scores, and coordinates\n- 🔍 **Recognition Levels**: Automatic smart defaults, or choose between word, line, or block level\n- ⚡ **Modern APIs**: \n  - iOS: Uses VNRecognizeTextRequestRevision3 (iOS 16+) with automatic fallback\n  - Android: Uses Google ML Kit Text Recognition v2\n- 📊 **Rich Metadata**: Get page numbers, dimensions, and hierarchical text structure\n\n## Demo\n\nSee the library in action:\n\n| iOS Demo | Android Demo |\n|----------|--------------|\n| ![iOS Demo](./assets/ios_demo.gif) | ![Android Demo](./assets/android_demo.gif) |\n\nThe demo shows:\n- 📷 Selecting images from gallery and files\n- 📄 Processing PDF documents\n- 🔍 Real-time OCR with bounding boxes\n- 📊 Displaying recognized text with confidence scores\n- 🌐 Multi-language support (English, Italian, Ukrainian, etc.)\n\n## Installation\n\n```bash\nnpm install @dariyd/react-native-text-recognition\n```\n\nor with yarn:\n\n```bash\nyarn add @dariyd/react-native-text-recognition\n```\n\n### iOS Setup\n\nInstall pods:\n\n```bash\ncd ios && pod install && cd ..\n```\n\n**Important for iOS:** The library requires iOS 13.0 or higher. If you encounter build errors, ensure your `ios/Podfile` has:\n\n```ruby\nplatform :ios, '13.0'\n```\n\n**Optional:** Add camera permission to your `Info.plist` (only if scanning from camera):\n\n```xml\n<key>NSCameraUsageDescription</key>\n<string>We need access to your camera to scan documents</string>\n<key>NSPhotoLibraryUsageDescription</key>\n<string>We need access to your photo library to select images</string>\n```\n\n### Android Setup\n\nThe module automatically includes ML Kit dependencies. No additional setup required.\n\n**Important for Android:** Ensure your `android/build.gradle` has:\n\n```gradle\nbuildscript {\n    ext {\n        minSdkVersion = 21\n        compileSdkVersion = 35\n        targetSdkVersion = 35\n    }\n}\n```\n\n**Optional:** Add permissions to your `AndroidManifest.xml` (only if scanning from camera or accessing storage):\n\n```xml\n<uses-permission android:name=\"android.permission.CAMERA\" />\n<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n```\n\n### New Architecture Support\n\n**iOS:** ✅ **Full TurboModule support** (automatically detected)\n**Android:** ✅ **Bridge mode with full compatibility** (works with `newArchEnabled=true`)\n\nThe library works seamlessly with React Native's new architecture:\n- iOS uses native TurboModules implementation\n- Android uses the stable Bridge API (fully compatible with new architecture apps)\n\nNo special configuration needed - just install and use! 🎉\n\n## Requirements\n\n- **React Native**: 0.77.3 or higher\n- **React**: 18.2.0 or higher\n- **iOS**: \n  - Minimum: iOS 13.0\n  - Recommended: iOS 16.0+ (for VNRecognizeTextRequestRevision3 - best accuracy)\n  - Note: Automatically uses best available API for each iOS version\n- **Android**: \n  - Min SDK: API 21 (Android 5.0)\n  - Target SDK: API 35 (Android 15)\n  - Compile SDK: API 35\n\n## Usage\n\n### Basic Usage - Just Works! 🎯\n\nThe library automatically detects file types and applies optimal settings:\n\n```javascript\nimport { recognizeText } from '@dariyd/react-native-text-recognition';\n\n// Works for both images and PDFs with smart defaults\nconst result = await recognizeText('file:///path/to/image.jpg');\nconst pdfResult = await recognizeText('file:///path/to/document.pdf');\n\nconsole.log(result.fullText); // All recognized text\nconsole.log(result.pages); // Detailed page-by-page results\n```\n\n**Smart defaults behind the scenes:**\n- 📄 **PDFs**: 400 DPI + line recognition + auto language\n- 🖼️ **Images**: Word recognition + auto language\n\n### With Options\n\n```javascript\n// Auto-detect languages (iOS 16+ recommended)\nconst result = await recognizeText('file:///path/to/image.jpg', {\n  languages: [], // Empty array = auto-detect on iOS 16+\n  recognitionLevel: 'word',\n});\n\n// PDFs are automatically optimized (400 DPI + line recognition)\nconst result = await recognizeText('file:///path/to/document.pdf');\n// That's it! Or customize if needed:\nconst customResult = await recognizeText('file:///path/to/document.pdf', {\n  languages: ['en', 'es'],  // Language hints (optional, auto-detects by default)\n  maxPages: 10,             // Limit number of pages\n  pdfDpi: 600,              // Higher quality (optional, 400 is default)\n});\n\n// Access detailed results\nresult.pages.forEach((page) => {\n  console.log(`Page ${page.pageNumber}:`);\n  page.elements.forEach((element) => {\n    console.log(`  Text: ${element.text}`);\n    console.log(`  Confidence: ${element.confidence}`);\n    console.log(`  BoundingBox:`, element.boundingBox);\n  });\n});\n```\n\n### Legacy API (Backward Compatible)\n\n```javascript\nimport { detectText } from '@dariyd/react-native-text-recognition';\n\n// Old API still works\nconst result = await detectText('file:///path/to/image.jpg');\nconsole.log(result.detectedWords);\n```\n\n### Check Availability\n\n```javascript\nimport { isAvailable, getSupportedLanguages } from '@dariyd/react-native-text-recognition';\n\nconst available = await isAvailable();\nconsole.log('Text recognition available:', available);\n\nconst languages = await getSupportedLanguages();\nconsole.log('Supported languages:', languages);\n```\n\n## PDF Recognition - Smart Defaults\n\n**The library automatically detects PDFs and applies optimized settings!** No configuration needed.\n\n### Automatic PDF Optimization:\n- ✅ **400 DPI rendering** (high quality)\n- ✅ **Line-level recognition** (better for PDFs than word-level)\n- ✅ **Auto language detection** (iOS 16+)\n\n```javascript\n// PDFs are automatically optimized - just call recognizeText!\nconst result = await recognizeText(pdfUri);\n// Behind the scenes: 400 DPI + line recognition + auto language\n```\n\n### How It Works:\n\nThe library detects the file extension and automatically applies the best settings:\n\n| File Type | Recognition Level | DPI | Notes |\n|-----------|------------------|-----|-------|\n| **PDF** | `line` (auto) | 400 | Optimized for documents |\n| **Image** (jpg, png) | `word` (auto) | N/A | Optimized for photos |\n\n**You can still override any setting:**\n\n```javascript\nconst result = await recognizeText(pdfUri, {\n  recognitionLevel: 'word',  // Override to word-level\n  pdfDpi: 600,              // Override to higher DPI\n  languages: ['en', 'it'],  // Override auto-detect\n});\n```\n\n### Advanced: Need Even Higher Quality?\n\nFor PDFs with very small text, you can increase the DPI:\n\n```javascript\nconst result = await recognizeText(pdfUri, {\n  pdfDpi: 600,  // Even higher quality (slower)\n  languages: [],\n});\n```\n\n**DPI Guidelines:**\n- **400 DPI**: High quality for most documents ✅ **(default)**\n- **600+ DPI**: Very small text or maximum quality (slower)\n\n### Troubleshooting: Scanned PDFs\n\n### 1. **Enable Preprocessing for Scanned PDFs**\n\nIf your PDF is a scanned image (not digital text), enable preprocessing:\n\n```javascript\nconst result = await recognizeText(scannedPdfUri, {\n  pdfDpi: 400,\n  preprocessImages: true,  // Grayscale + contrast boost\n  recognitionLevel: 'line', // Better for scanned documents\n});\n```\n\n**⚠️ Warning**: Don't use `preprocessImages: true` for clean digital PDFs - it will REDUCE accuracy!\n\n### 2. **Adjust Recognition Level**\n\n- `'word'` (default): Best for most documents\n- `'line'`: Better for scanned PDFs or low-quality images\n- `'block'`: Faster but less detailed\n\n### 3. **Complete Example for Scanned PDFs**\n\n```javascript\n// Scanned/Low-quality PDF\nconst result = await recognizeText(scannedPdfUri, {\n  languages: ['en', 'it'], // Language hints help\n  pdfDpi: 500,             // Even higher for scans (optional)\n  recognitionLevel: 'line', // Better for scans\n  preprocessImages: true,   // Enable for scanned PDFs\n});\n```\n\n**Note:** Most digital PDFs work perfectly at the default 400 DPI without any configuration!\n\n### Common Issues:\n\n| Problem | Solution |\n|---------|----------|\n| Text is jumbled/wrong | Try `pdfDpi: 600` or `recognitionLevel: 'line'` |\n| Missing text | Enable `preprocessImages: true` for scanned PDFs |\n| Scanned PDF not working | Set `preprocessImages: true` and `recognitionLevel: 'line'` |\n| Slow processing | Default is optimized; reduce to `pdfDpi: 300` if needed |\n\n## API Reference\n\n### `recognizeText(fileUrl, options?, callback?)`\n\nMain method to recognize text from images or PDFs.\n\n**Parameters:**\n- `fileUrl` (string): Local file URL (file://, content://, or http(s)://)\n- `options` (object, optional): Recognition options\n  - `languages` (string[]): Language hints (e.g., ['en', 'es'])\n  - `recognitionLevel` ('word' | 'line' | 'block'): Level of text segmentation\n  - `useFastRecognition` (boolean): Use fast mode (lower accuracy, faster)\n  - `maxPages` (number): For PDFs, maximum pages to process\n  - `pdfDpi` (number): For PDFs, DPI for rendering (default: 300)\n- `callback` (function, optional): Callback for compatibility\n\n**Returns:** `Promise<TextRecognitionResult>`\n\n### Result Structure\n\n```typescript\ninterface TextRecognitionResult {\n  success: boolean;\n  error?: boolean;\n  errorMessage?: string;\n  pages?: RecognizedPage[];\n  totalPages?: number;\n  fullText?: string;\n}\n\ninterface RecognizedPage {\n  pageNumber: number;\n  dimensions: {\n    width: number;\n    height: number;\n  };\n  elements: RecognizedTextElement[];\n  fullText: string;\n}\n\ninterface RecognizedTextElement {\n  text: string;\n  confidence: number; // 0-1\n  level: 'word' | 'line' | 'block';\n  boundingBox: {\n    x: number; // Normalized 0-1\n    y: number; // Normalized 0-1\n    width: number; // Normalized 0-1\n    height: number; // Normalized 0-1\n    absoluteBox?: {\n      x: number; // Pixels\n      y: number; // Pixels\n      width: number; // Pixels\n      height: number; // Pixels\n    };\n  };\n  language?: string;\n}\n```\n\n### Other Methods\n\n- `detectText(imageUrl, callback?)`: Legacy method for backward compatibility\n- `isAvailable()`: Check if text recognition is available\n- `getSupportedLanguages()`: Get list of supported language codes\n\n## Automatic Language Detection\n\nThe SDK supports automatic language detection - **you don't need to specify languages**:\n\n### iOS 16+\n✅ **Fully automatic** - Detects and recognizes 100+ languages automatically\n- Set `languages: []` or omit the option entirely\n- Automatically detects: Latin, CJK (Chinese/Japanese/Korean), Arabic, Hebrew, Cyrillic, Indic scripts, and more\n- Perfect for mixed-language documents\n- Uses `automaticallyDetectsLanguage` with `VNRecognizeTextRequestRevision3`\n\n```javascript\n// Will auto-detect English, Chinese, Arabic, etc.\nconst result = await recognizeText(imageUri, {\n  languages: [], // Auto-detect\n});\n```\n\n### iOS 13-15\n⚠️ **Limited auto-detection** - Works best with common scripts\n- Defaults to English + common European languages\n- May need language hints for non-Latin scripts\n\n### Android\n⚠️ **Script-based** - Better with language hints\n- Defaults to Latin script recognizer\n- For Chinese/Japanese/Korean/Devanagari: provide language hints\n\n### When to Specify Languages?\n\n**Specify languages for:**\n- ✅ Better accuracy when you know the language(s)\n- ✅ Faster processing (skips detection)\n- ✅ Non-Latin scripts on older iOS or Android\n\n**Use auto-detection for:**\n- ✅ Unknown language documents\n- ✅ Mixed-language content\n- ✅ iOS 16+ with maximum flexibility\n\n```javascript\n// Known languages = better accuracy\nconst result = await recognizeText(imageUri, {\n  languages: ['it', 'en'], // Italian + English\n});\n\n// Unknown languages = auto-detect\nconst result = await recognizeText(imageUri, {\n  languages: [], // Let SDK detect\n});\n```\n\n## Supported Languages\n\n### iOS (Vision API)\n\n**iOS 16+ (VNRecognizeTextRequestRevision3)** - 100+ languages including:\n- Latin scripts: English, Spanish, French, German, Italian, Portuguese, Dutch, Swedish, etc.\n- Chinese (Simplified & Traditional)\n- Japanese\n- Korean\n- Arabic\n- Hebrew\n- Thai\n- Vietnamese\n- Russian, Ukrainian\n- Hindi, Bengali\n- And 90+ more languages\n\n**iOS 13-15 (Automatic fallback)** - 20+ languages including:\n- English, French, Italian, German, Spanish, Portuguese\n- Chinese (Simplified & Traditional)\n- Japanese, Korean\n- Russian\n- Limited coverage compared to iOS 16+\n\n**Note:** The library automatically uses the best available API for your iOS version.\n\n### Android (ML Kit)\n- Latin script (English, Spanish, French, German, Italian, Portuguese, etc.)\n- Chinese (Simplified & Traditional)\n- Japanese\n- Korean\n- Devanagari (Hindi, Sanskrit, Marathi, Nepali)\n- Arabic\n- Thai\n- Vietnamese\n\n## Platform Differences\n\nWhile both platforms provide similar functionality, there are some differences:\n\n### iOS\n- Uses native Vision framework\n- VNRecognizeTextRequestRevision3 on iOS 16+ for best results\n- Automatic fallback to earlier revisions on older iOS versions\n- Native PDF support via PDFKit\n- Provides confidence scores for recognized text\n\n### Android\n- Uses Google ML Kit Text Recognition\n- Multiple specialized recognizers for different scripts\n- PDF rendering via PDF Box Android\n- Confidence scores not available (returns 1.0)\n- Requires Google Play Services\n\n## React Native New Architecture\n\nThis module requires **React Native 0.77.3 or higher** and is **fully compatible** with the new architecture.\n\n### iOS\n✅ **Native TurboModule implementation**\n- Automatically detected when `RCT_NEW_ARCH_ENABLED=1`\n- Seamless fallback to Bridge mode on old architecture\n- Uses VNRecognizeTextRequestRevision3 on iOS 16+ for best accuracy\n- Automatically falls back to earlier revisions on iOS 13-15\n\n### Android\n✅ **Bridge mode with full compatibility**\n- Uses stable Bridge API (ReactPackage)\n- Works seamlessly with `newArchEnabled=true` (new arch apps)\n- Works with `newArchEnabled=false` (old arch apps)\n- Full backward compatibility with React Native's interop layer\n\n**Why Bridge mode on Android?**\nReact Native 0.60+ provides excellent interoperability between Bridge and TurboModule APIs. Bridge modules work perfectly in new architecture apps without any issues or performance penalties for this use case.\n\n## Examples\n\n### Recognize Text from Image\n\n```javascript\nimport { recognizeText } from '@dariyd/react-native-text-recognition';\n\nconst recognizeImage = async (imagePath) => {\n  try {\n    const result = await recognizeText(imagePath, {\n      languages: ['en'],\n      recognitionLevel: 'word',\n    });\n\n    if (result.success) {\n      console.log('Full text:', result.fullText);\n      \n      // Get all words with their positions\n      result.pages[0].elements.forEach((word) => {\n        console.log(`\"${word.text}\" at position:`, word.boundingBox);\n      });\n    }\n  } catch (error) {\n    console.error('Recognition failed:', error);\n  }\n};\n```\n\n### Extract Text from PDF\n\n```javascript\nimport { recognizeText } from '@dariyd/react-native-text-recognition';\n\nconst extractPdfText = async (pdfPath) => {\n  try {\n    const result = await recognizeText(pdfPath, {\n      languages: ['en', 'es'],\n      recognitionLevel: 'line',\n      maxPages: 5, // Process first 5 pages\n      pdfDpi: 200, // Lower DPI for faster processing\n    });\n\n    if (result.success) {\n      console.log(`Processed ${result.pages.length} of ${result.totalPages} pages`);\n      \n      result.pages.forEach((page) => {\n        console.log(`\\nPage ${page.pageNumber + 1}:`);\n        console.log(page.fullText);\n      });\n    }\n  } catch (error) {\n    console.error('PDF processing failed:', error);\n  }\n};\n```\n\n### Multi-language Recognition\n\n```javascript\nconst result = await recognizeText('file:///path/to/multilingual.jpg', {\n  languages: ['en', 'zh', 'ja', 'ko'], // English, Chinese, Japanese, Korean\n  recognitionLevel: 'block',\n});\n```\n\n## Troubleshooting\n\n### iOS Issues\n\n**\"VNRecognizeTextRequest failed\"**\n- Ensure the image file exists and is readable\n- Check that the URL scheme is correct (file://)\n- Verify iOS version is 13.0 or higher\n\n**PDF recognition not working**\n- PDF support requires iOS 11.0+\n- Ensure the PDF is not encrypted or password-protected\n\n### Android Issues\n\n**\"ML Kit not available\"**\n- Ensure Google Play Services is installed\n- Check minimum SDK version is 21+\n- Verify internet connection for first-time model download\n\n**Out of memory with PDFs**\n- Reduce `pdfDpi` option (try 150-200 instead of 300)\n- Process fewer pages using `maxPages` option\n- Process pages one at a time in a loop\n\n## Performance Tips\n\n1. **Choose appropriate DPI**: For PDFs, 300 DPI provides excellent quality but is slower. Use 150-200 for faster processing.\n2. **Limit pages**: Use `maxPages` option when you don't need the entire PDF.\n3. **Use fast recognition**: Set `useFastRecognition: true` for real-time scenarios (iOS only).\n4. **Recognition level**: 'block' is fastest, 'word' provides most detail.\n5. **Language hints**: Providing specific languages improves accuracy and speed.\n\n## Comparison with Other Solutions\n\n| Feature | This Library | react-native-mlkit | react-native-text-detector |\n|---------|-------------|-------------------|---------------------------|\n| iOS Support | ✅ Vision API | ❌ | ✅ |\n| Android Support | ✅ ML Kit v2 | ✅ ML Kit | ✅ |\n| PDF Support | ✅ | ❌ | ❌ |\n| Multi-language | ✅ 100+ | ✅ | ⚠️ Limited |\n| Bounding Boxes | ✅ | ✅ | ✅ |\n| New Architecture | ✅ iOS | ❌ | ❌ |\n| TypeScript | ✅ | ⚠️ Partial | ❌ |\n| Active Maintenance | ✅ | ⚠️ | ❌ |\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT © [dariyd](https://github.com/dariyd)\n\n## Acknowledgments\n\n- iOS implementation inspired by [react-native-image-picker](https://github.com/react-native-image-picker/react-native-image-picker)\n- Android implementation uses [Google ML Kit](https://developers.google.com/ml-kit)\n- Reference architecture from [react-native-document-scanner](https://github.com/dariyd/react-native-document-scanner)\n\n## Related Projects\n\n- [react-native-document-scanner](https://github.com/dariyd/react-native-document-scanner) - Document scanning with VisionKit and ML Kit\n- [react-native-vision-camera](https://github.com/mrousavy/react-native-vision-camera) - Camera library for React Native\n","readmeFilename":"README.md"}