Sample report for a fictional app, generated with npx nativekeel plan --html report.html. Back to NativeKeel

acme-app health report

Scanned 2026-10-17 06:46 UTC

4critical
4high
6medium
7low
ESecurity
EStore
AStability
EUpgrade
APerformance
CAccessibility
React Native 0.77.1 (latest 0.88.0) New Architecture: Android off, iOS off targetSdk 34 9 dependencies (8 native)

Start here

  1. Revoke the AWS access key ID in src/App.js:6 at the provider today. Removing it from code is not enough: every installed copy of the app still contains it. (Stop the leaks)
  2. Set targetSdkVersion = 36 and compileSdkVersion = 36 in android/build.gradle. (Meet the Google Play target SDK)
  3. @react-native-community/push-notification-ios (no New Architecture support, unmaintained, native). Options: @react-native-firebase/messaging, expo-notifications. npm uninstall @react-native-community/push-notification-ios && npm install @react-native-firebase/messaging (Replace blocking and abandoned packages)

The full, ordered plan: npx nativekeel plan.

Security OWASP MASVS

0Data on the deviceMASVS-STORAGE
1Keys and cryptographyMASVS-CRYPTO
0Access control (backend rules)MASVS-AUTH
1Network trafficMASVS-NETWORK
0WebViews and platform interactionMASVS-PLATFORM
1Dependencies and buildMASVS-CODE
0Reverse engineeringMASVS-RESILIENCE

Finding counts, not passed controls. Static checks of code, config and dependencies. They find the common, detectable mistakes; they do not replace a penetration test of the running app and its backend.

Findings

4 packages are a major version behind (low)
PackageInstalledLatest
react-native-reanimated3.17.54.7.1native
react-native-gesture-handler2.25.03.4.0native
@react-navigation/drawer6.6.27.14.4
@react-native-community/slider4.5.75.2.1native

Upgrade plan scope: Extra large

1. Stop the leaks

Leaked keys cost money and data from the moment someone finds them. Nothing else in this plan is as urgent.

2. Set up a safety net

A build that compiles and launches can still crash after login or hide a button. On a real upgrade, UI flows caught three such bugs that build and launch checks missed.

3. Meet the Google Play target SDK

Below the required level Google Play rejects updates or hides the app from new users.

4. Meet App Store and Google Play requirements

These block your next store submission regardless of anything else in this plan.

5. Close security gaps

Attackers read app bundles, network traffic and logs. These are the ways in this app hands them something.

6. Remove legacy tooling

Leftovers from older templates break on newer React Native versions; removing them first shrinks the upgrade diff.

7. Replace blocking and abandoned packages

These packages decide how far you can upgrade. Swap them while the app still runs on its current version, so every problem has one cause.

8. Update native modules on the current React Native version

Newer releases of native modules usually add New Architecture support. Pick the newest release that still supports your current React Native version; check each changelog for its minimum.

9. Turn on the New Architecture on your current version

React Native 0.82 removed the legacy architecture. Switching now, before changing the React Native version, keeps the two kinds of breakage apart.

10. Raise platform minimums

Current React Native no longer supports older OS versions. Check your analytics for how many users this drops before you ship.

11. Upgrade React Native 0.77.1 → 0.88.0

Hopping a few minors at a time gives small diffs you can actually review and bisect when something breaks.

12. What changes in React Native 0.87 for this app

Release notes list everything; these are the changes that touch this app's own code and settings, so you can fix them in the same commit as the upgrade instead of finding them in a crash report.

13. Make it usable with a screen reader and large text

Unlabeled buttons and fixed text sizes lock out people who use VoiceOver, TalkBack or larger text. In the EU, the European Accessibility Act applies to shopping and consumer banking apps since June 2025.

14. Update JavaScript-only packages

These do not block the upgrade. Do them last, one major at a time, following each migration guide.

15. Verify before you ship

An upgrade is done when the release build works on real devices, not when it compiles.