{"id":48204983,"url":"https://github.com/logicwind/react-native-rn-in-app-update","last_synced_at":"2026-04-04T18:35:19.592Z","repository":{"id":57339594,"uuid":"285987642","full_name":"logicwind/react-native-rn-in-app-update","owner":"logicwind","description":"Google in app update plugin for react-native (Android only)","archived":false,"fork":false,"pushed_at":"2025-12-05T09:29:59.000Z","size":1451,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-08T18:23:12.456Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","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/logicwind.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":"2020-08-08T06:30:20.000Z","updated_at":"2025-12-05T09:28:28.000Z","dependencies_parsed_at":"2024-04-18T09:28:00.119Z","dependency_job_id":"d4b7ce92-d509-4c19-b8c3-3cdb62e92119","html_url":"https://github.com/logicwind/react-native-rn-in-app-update","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/logicwind/react-native-rn-in-app-update","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicwind%2Freact-native-rn-in-app-update","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicwind%2Freact-native-rn-in-app-update/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicwind%2Freact-native-rn-in-app-update/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicwind%2Freact-native-rn-in-app-update/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logicwind","download_url":"https://codeload.github.com/logicwind/react-native-rn-in-app-update/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicwind%2Freact-native-rn-in-app-update/sbom","scorecard":{"id":597315,"data":{"date":"2025-08-11","repo":{"name":"github.com/logicwind/react-native-rn-in-app-update","commit":"7df0f9bccf47e6e3d76ebb198e5d5c89a1159064"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/publish.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":"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":"Code-Review","score":4,"reason":"Found 6/15 approved changesets -- score normalized to 4","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":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/logicwind/react-native-rn-in-app-update/publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/logicwind/react-native-rn-in-app-update/publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/logicwind/react-native-rn-in-app-update/publish.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/publish.yml:20","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand 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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 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":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","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-20T23:27:49.156Z","repository_id":57339594,"created_at":"2025-08-20T23:27:49.156Z","updated_at":"2025-08-20T23:27:49.156Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31409217,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"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":[],"created_at":"2026-04-04T18:35:19.225Z","updated_at":"2026-04-04T18:35:19.543Z","avatar_url":"https://github.com/logicwind.png","language":"Kotlin","readme":"# react-native-rn-in-app-update\n\nA minimal React Native module that displays the native Android in-app update popup using the Play Core library. Supports both immediate and flexible update types.\n\n## Installation\n\nUsing npm:\n\n```sh md title=\"Terminal\"\nnpm install react-native-rn-in-app-update\n```\n\nor using yarn:\n\n```sh md title=\"Terminal\"\nyarn add react-native-rn-in-app-update\n```\n\n## Usage\n\n### Function 1: `showUpdatePopup`\n\nImport and use the `showUpdatePopup` function. it supports 2 update type **immediate** and **flexible**\n\n```tsx md title=\"App.tsx\"\nimport { showUpdatePopup } from 'react-native-rn-in-app-update';\n\n\u003cButton title=\"Get Update\" onPress={() =\u003e showUpdatePopup('immediate')} /\u003e;\n```\n\n### Function 2: `getUpdateInfo`\n\n`getUpdateInfo` is used to get information about the available update.\n\n```tsx md title=\"App.tsx\"\nconst info = await getUpdateInfo();\n```\n\n### Function 3: `startFlexibleUpdateWithProgress`\n\n`startFlexibleUpdateWithProgress` is used to start flexible update while also getting the download percentage.\n\n```tsx md title=\"App.tsx\"\nimport { startFlexibleUpdateWithProgress } from 'react-native-rn-in-app-update';\n\n\u003cButton\n  title=\"Start Flexible Update\"\n  onPress={() =\u003e startFlexibleUpdateWithProgress()}\n/\u003e;\n```\n\n### Function 4: `subscribeToUpdateProgress`\n\n`subscribeToUpdateProgress` is used to get the download percentage when updating app with `startFlexibleUpdateWithProgress`.\n\n```tsx md title=\"App.tsx\"\nimport { subscribeToUpdateProgress } from 'react-native-rn-in-app-update';\n\nuseEffect(() =\u003e {\n  if (Platform.OS !== 'android') return;\n\n  const unsubscribe = subscribeToUpdateProgress(\n    ({ bytesDownloaded, totalBytesToDownload }) =\u003e {\n      if (totalBytesToDownload \u003e 0) {\n        const percent = (bytesDownloaded / totalBytesToDownload) * 100;\n        console.log({ percent });\n      }\n    }\n  );\n\n  return () =\u003e {\n    unsubscribe();\n  };\n}, []);\n```\n\n## How to Test In-App Updates on Android\n\nTo test this package correctly, you must publish your app to the Play Store (even if only in **Internal Testing**) — the in-app update API only works when your app is installed via **Google Play**.\n\n### Step 1: Upload a lower-version build (v1)\n\nCreate a signed APK/AAB with version:\n\n```sh\nversionCode 100\nversionName \"1.0.0\"\n```\n\nUpload this build to the Play Console → Internal Testing track.\n\nPublish it and wait until it’s available for testers (usually within 15–30 minutes).\n\nInstall the app from the Play Store using a tester account.\n\n### Step 2: Prepare a higher-version build (v2)\n\nIncrement version:\n\n```sh\nversionCode 101\nversionName \"1.1.0\"\n```\n\nDO NOT UPLOAD IT YET.\n\nThis is your update version, which the Play Store will later offer as an available update.\n\n### Step 3: Open the app (v1) with your test logic\n\nEnsure your app runs this on launch or on button click:\n\n```tsx\nshowUpdatePopup('immediate');\n```\n\nAt this point, no popup will appear, because there's no newer version yet.\n\n### Step 4: Upload the higher version (v2)\n\nNow upload the v2 build (with versionCode = 101) to Internal Testing.\n\nPublish and wait until it’s live for testers (can take up to 30–60 minutes).\n\n### Step 5: Reopen the app\n\nReopen the installed v1 app on your test device (it’s still running versionCode = 100).\n\nYou should now see the in-app update popup, triggered by:\n\n```tsx\nshowUpdatePopup('immediate');\n```\n\n**Find more details for testing [here](https://developer.android.com/guide/playcore/in-app-updates/test)**\n\n## react-native-rn-in-app-update is crafted mindfully at [Logicwind](https://www.logicwind.com?utm_source=github\u0026utm_medium=github.com-logicwind\u0026utm_campaign=react-native-rn-in-app-update)\n\nWe are a 130+ people company developing and designing multiplatform applications using the Lean \u0026 Agile methodology. To get more information on the solutions that would suit your needs, feel free to get in touch by [email](mailto:sales@logicwind.com) or through or [contact form](https://www.logicwind.com/contact-us?utm_source=github\u0026utm_medium=github.com-logicwind\u0026utm_campaign=react-native-rn-in-app-update)!\n\nWe will always answer you with pleasure 😁\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicwind%2Freact-native-rn-in-app-update","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogicwind%2Freact-native-rn-in-app-update","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicwind%2Freact-native-rn-in-app-update/lists"}