{"id":26086930,"url":"https://github.com/pspdfkit/react-native","last_synced_at":"2026-04-30T19:01:13.110Z","repository":{"id":48264411,"uuid":"64770659","full_name":"PSPDFKit/react-native","owner":"PSPDFKit","description":"React Native library for PSPDFKit for iOS, Android and Windows UWP.","archived":false,"fork":false,"pushed_at":"2026-04-26T00:01:21.000Z","size":47775,"stargazers_count":204,"open_issues_count":32,"forks_count":75,"subscribers_count":18,"default_branch":"master","last_synced_at":"2026-04-26T02:10:30.118Z","etag":null,"topics":["android","ios","pdf-document","pspdfkit","react-native","xcode"],"latest_commit_sha":null,"homepage":"https://pspdfkit.com/blog/2016/react-native-module/","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PSPDFKit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"dco":null,"cla":null}},"created_at":"2016-08-02T15:49:39.000Z","updated_at":"2026-04-22T17:15:30.000Z","dependencies_parsed_at":"2026-04-02T06:03:34.543Z","dependency_job_id":"62a0333a-1746-469e-900d-7907705dc37a","html_url":"https://github.com/PSPDFKit/react-native","commit_stats":{"total_commits":765,"total_committers":23,"mean_commits":33.26086956521739,"dds":0.6758169934640523,"last_synced_commit":"6592f8f58f980439c95e95136805f82886a9bf61"},"previous_names":[],"tags_count":169,"template":false,"template_full_name":null,"purl":"pkg:github/PSPDFKit/react-native","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSPDFKit%2Freact-native","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSPDFKit%2Freact-native/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSPDFKit%2Freact-native/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSPDFKit%2Freact-native/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PSPDFKit","download_url":"https://codeload.github.com/PSPDFKit/react-native/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSPDFKit%2Freact-native/sbom","scorecard":{"id":107066,"data":{"date":"2025-08-11","repo":{"name":"github.com/PSPDFKit/react-native","commit":"5bfda83fd0f2dffda8e270c1979f84ecc3288f16"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":5,"reason":"6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: samples/Catalog/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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"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":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"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-15T11:17:52.408Z","repository_id":48264411,"created_at":"2025-08-15T11:17:52.408Z","updated_at":"2025-08-15T11:17:52.408Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32473805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","ios","pdf-document","pspdfkit","react-native","xcode"],"created_at":"2025-03-09T07:18:58.443Z","updated_at":"2026-04-30T19:01:08.088Z","avatar_url":"https://github.com/PSPDFKit.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nutrient React Native SDK\n\n![Nutrient React Native SDK](https://github.com/PSPDFKit/react-native/blob/master/article-header.png?raw=true)\n\nThis library requires a valid license of the Nutrient SDK. Licenses are per platform.\n\nWork with a React Native PDF viewer SDK engineered for the best possible user and developer experience. Whether you need high-fidelity PDF rendering, annotation tools, digital signatures, or form filling, our React Native PDF SDK gives you complete control over PDF viewing and editing within your app.\n\n### Nutrient\n\nThe [Nutrient SDK](https://nutrient.io/) is a framework that allows you to view, annotate, sign, and fill PDF forms on iOS, Android, Windows, macOS, and Web.\n\n[Nutrient Collaboration ](https://www.nutrient.io/sdk/solutions/collaboration) adds real-time collaboration features to seamlessly share, edit, and annotate PDF documents.\n\n# Support, Issues and License Questions\n\nNutrient offers support for customers with an active SDK license via https://support.nutrient.io/hc/en-us/requests/new.\n\nAre you evaluating our SDK? That's great, we're happy to help out! The Nutrient React Native SDK is a commercial product and requires the purchase of a license key when used in production. By default, this library will initialize in demo mode, placing a watermark on each PDF and limiting usage to 60 minutes.\n\nTo purchase a license for production use, please reach out to us via https://www.nutrient.io/sdk/contact-sales.\n\nTo initialize the Nutrient React Native SDK using a license key, call either of the following before using any other Nutrient SDK APIs or features:\n\nTo set the license key for both Android and iOS, use:\n\n```\nNutrient.setLicenseKeys('YOUR_REACT_NATIVE_ANDROID_LICENSE_KEY_GOES_HERE', 'YOUR_REACT_NATIVE_IOS_LICENSE_KEY_GOES_HERE');\n```\n\nTo set the license key for the currently running platform, use:\n\n```\nNutrient.setLicenseKey('YOUR_REACT_NATIVE_LICENSE_KEY_GOES_HERE');\n```\n\n### Requirements\n\n- A [development environment](https://reactnative.dev/docs/environment-setup) for running React Native projects using the React Native CLI. If you’re using Expo, [check out our blog post](https://www.nutrient.io/blog/how-to-use-pspdfkit-for-react-native-with-expo/) on the topic.\n\n#### iOS\n\n- The [latest stable version of Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12)\n- The [latest stable version of CocoaPods](https://github.com/CocoaPods/CocoaPods/releases). If you don’t already have CocoaPods installed, follow the [CocoaPods installation guide](https://guides.cocoapods.org/using/getting-started.html#installation) to install CocoaPods on your Mac.\n\n#### Android\n\n- The [latest stable version of Android Studio](https://developer.android.com/studio)\n- The [Android NDK](https://developer.android.com/studio/projects/install-ndk)\n- An [Android Virtual Device](https://developer.android.com/studio/run/managing-avds.html) or a hardware device\n\n### Installation\n\nThe Nutrient React Native SDK dependency is installed from the GitHub repository and not the `npm` registry. To install the Nutrient React Native SDK, run `yarn add @nutrient-sdk/react-native` in your project directory or `npm install @nutrient-sdk/react-native` if you’re using `npm`.\n\n### Getting Started\n\nSee our [Getting Started on React Native guide](https://www.nutrient.io/getting-started/react-native/?react-native-platform=android-ios\u0026project=new-project) to integrate the SDK into your new or existing application, or follow the steps below:\n\n1. In the terminal app, change the current working directory to the location you wish to save your project. In this example, we’ll use the `~/Documents` directory:\n\n   ```bash\n   cd ~/Documents\n   ```\n\n1. Create the React Native project by running the following command:\n\n   ```bash\n   npx @react-native-community/cli init NutrientDemo\n   ```\n\n1. In the terminal app, change the location of the current working directory inside the newly created project:\n\n   ```bash\n   cd NutrientDemo\n   ```\n\n1. Add the Nutrient React Native SDK:\n\n   ```bash\n   yarn add @nutrient-sdk/react-native\n   ```\n\n1. Install all the dependencies for the project:\n\n   ```bash\n   yarn install\n   ```\n\n1. Open your project's `build.gradle` file:\n\n   ```bash\n   open android/build.gradle\n   ```\n\n1. Add the Nutrient repository to download the Nutrient SDK:\n\n    ```diff\n      allprojects {\n        repositories {\n          mavenLocal()\n    +     maven {\n    +         url 'https://my.nutrient.io/maven/'\n    +     }\n        }\n      }\n    ```\n\n1. Open the app’s build.gradle file:\n\n    ```diff\n    ...\n      android {\n    -  compileSdkVersion rootProject.ext.compileSdkVersion\n    +  compileSdkVersion 35\n    ...\n      defaultConfig {\n        applicationId \"com.nutrientdemo\"\n    -     minSdkVersion rootProject.ext.minSdkVersion\n    +     minSdkVersion 21\n          targetSdkVersion rootProject.ext.targetSdkVersion\n          versionCode 1\n          versionName \"1.0\"\n      }\n    }\n    ...\n    ```\n\n1. Open your project’s Podfile:\n\n   ```bash\n   open ios/Podfile\n   ```\n\n1. Update the minimum iOS platform version in the Podfile:\n\n    ```diff\n    ...\n    - platform :ios, min_ios_version_supported\n    + platform :ios, '16.0'\n    ...\n    ```\n\n1. Change the location of the current working directory to the `ios` folder:\n\n   ```bash\n   cd ios\n   ```\n\n1. Install the CocoaPods dependencies:\n\n   ```bash\n   pod install\n   ```\n\n1. Open your project’s Workspace in Xcode:\n\n   ```bash\n   open NutrientDemo.xcworkspace\n   ```\n\n1. Make sure the deployment target is set to 16.0 or higher:\n\n   ![deployment-target](./screenshots/deployment-target.png)\n\n1. Change View controller-based status bar appearance to `YES` in your project’s `Info.plist`:\n\n   ![view-controller-based-status-bar-appearance](./screenshots/view-controller-based-status-bar-appearance.png)\n\n1. Add the PDF document you want to display to your application by dragging it into your project. On the dialog that’s displayed, select Finish to accept the default integration options. You can use \u003ca href=\"https://www.nutrient.io/downloads/pspdfkit-ios-quickstart-guide.pdf\" download=\"Document.pdf\"\u003ethis QuickStart Guide PDF\u003c/a\u003e as an example.\n\n   ![drag-and-drop-document](./screenshots/drag-and-drop-document.png)\n\n1. Change the location of the current working directory back to the root project folder:\n\n   ```bash\n   cd ..\n   ```\n\n1. Create the `assets` directory:\n\n   ```bash\n   mkdir android/app/src/main/assets\n   ```\n\n1. Copy a PDF document into your Android assets directory:\n\n   ```bash\n   cp ~/Downloads/Document.pdf android/app/src/main/assets/Document.pdf\n   ```\n\n1. Open your `App.tsx` file:\n\n   ```bash\n   open App.tsx\n   ```\n\n1. Replace the entire contents of `App.tsx` with the following code snippet:\n\n    ```typescript\n    import React, {Component} from 'react';\n    import {Platform} from 'react-native';\n    import NutrientView from '@nutrient-sdk/react-native';\n    import { NativeModules } from 'react-native';\n\n    const Nutrient = NativeModules.Nutrient;\n    Nutrient.setLicenseKey(null);\n\n    const DOCUMENT =\n      Platform.OS === 'ios' ? 'Document.pdf' : 'file:///android_asset/Document.pdf';\n    export default class NutrientDemo extends Component\u003c{}\u003e {\n      render() {\n        var pdfRef: React.RefObject\u003cNutrientView | null\u003e = React.createRef();\n        return (\n          \u003cNutrientView\n            document={DOCUMENT}\n            configuration={{\n              showThumbnailBar: 'scrollable',\n              pageTransition: 'scrollContinuous',\n              scrollDirection: 'vertical',\n            }}\n            ref={pdfRef}\n            fragmentTag=\"PDF1\"\n            style={{flex: 1}}\n          /\u003e\n        );\n      }\n    }\n    ```\n\n1. The app is now ready to launch! Go back to the terminal app and run:\n\n   ```bash\n   react-native run-ios\n   ```\n\n   ```bash\n   react-native run-android\n   ```\n\n### Running the example Catalog application\n\nTake a look at the instructions to get started [here](/samples/Catalog/README.md#running-this-sample-on-ios) for iOS and [here](/samples/Catalog/README.md#running-this-sample-on-android) for Android.\n\n### Configuration\n\nThe behaviour of the `NutrientView` component can be customized using the configuration object. Refer to the [`PDFConfiguration`](https://www.nutrient.io/api/react-native/PDFConfiguration.html) API documentation. The `PDFConfiguration` object can be passed as parameter in when creating the `NutrientView` component, or when using the `Nutrient.present()` Native Module API.\n\n```typescript\nconst configuration: PDFConfiguration = {\n  showPageLabels: false,\n  pageTransition: 'scrollContinuous',\n  scrollDirection: 'vertical',\n  showThumbnailBar: 'scrollable'\n};\n```\n\n## Updates\n\nSome releases contain changes that require updates to your project settings or application code. Take a look at our [Upgrade and Migration guides](https://www.nutrient.io/guides/react-native/upgrade/) after updating your Nutrient React Native SDK dependency.\n\n# Troubleshooting\n\nFor Troubleshooting common issues you might encounter when setting up the Nutrient React Native SDK, please refer to the [Troubleshooting](https://www.nutrient.io/guides/react-native/troubleshoot/) section.\n\n## License\n\nThis project can be used for evaluation or if you have a valid Nutrient license.\nAll items and source code Copyright © 2010-2025 PSPDFKit GmbH.\n\nSee [LICENSE](./LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpspdfkit%2Freact-native","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpspdfkit%2Freact-native","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpspdfkit%2Freact-native/lists"}