We ran rn-doctor on 20 popular React Native templates — here's what's dying inside them
· 5 min read · Amrith Vengalath
A template is a promise: start here, and you start healthy. You run one npx create-* command, and every dependency in that fresh package.json is a decision someone else made for you — often years ago.
I just shipped rn-doctor, a CI gate that fails pull requests adding abandoned, non-New-Architecture, or npm-deprecated React Native dependencies. The obvious first question: what happens when you point it at the starting lines everyone actually uses? So I ran it across 20 popular React Native templates and starters.
A quarter of them fail a reasonable dependency-health gate before you write a single line of code.
Methodology (the honest part)
- Tool:
[email protected], run on 2026-07-13 with the default policy: deprecated/archived/non-New-Arch = error, stale (>12 months since publish) and directory-unmaintained = warn, scopern-native-only(packages that couple to React Native — pure-JS utilities are skipped). - Input: each template's app-level
package.json—dependenciesonly, exactly what ships in your app. Fetched fresh from npm (expo templates, community template) or the template's repo (Ignite, Obytes, and friends). - The set: the four official Expo templates,
@react-native-community/template, Ignite, TheCodingMachine and Obytes boilerplates, the archivedreact-native-template-typescript, Tamagui starter, T4, Solito, a gluestack starter, Rootstrap's template, and a handful of high-star community starter kits. - One casualty: a well-known UI-kit starter had to be excluded because npm refuses to even run in its checkout — its
package.jsoncarries an invalidworkspacesconfig. Draw your own conclusion about its maintenance.
Every number below comes from the tool's --json output. Nothing is estimated.
The headline numbers
| Templates scanned | 20 |
| Dependencies checked | 575 |
| Templates that fail the default gate | 5 (25%) |
| Policy errors | 12 |
| Warnings | 44 |
By rule, across all 20 templates:
| Rule | Findings | What it means |
|---|---|---|
directoryUnmaintained | 26 | RN Directory flags the package as unmaintained |
newArchUnknown | 18 | No New Architecture signal anywhere — unknown, not proven bad |
npmDeprecated | 7 | The package itself tells you not to use it |
githubArchived | 3 | The repo is read-only; no fix will ever land |
newArchitecture | 2 | Directory verdict: does not support the New Architecture |
The hall of dying dependencies
The same names keep showing up, and each one is a package that was the obvious choice when the template was written:
react-native-gifted-chat— deprecated on npm ("Maintenance mode — development moved to a fork") and flagged unmaintained in the directory. Ships in two of the scanned starters as the chat layer.@react-native-community/async-storageand@react-native-community/masked-view— both deprecated years ago in favor of their new homes (@react-native-async-storage/async-storage,@react-native-masked-view/masked-view). Still the versions two starter kits install today.native-base— deprecated on npm; it "evolved into gluestack-ui". The starter that ships it never got the memo.react-native-fast-image— the directory's verdict is a hard does not support the New Architecture, plus an unmaintained flag. On RN 0.76+ defaults, that's not a nitpick; it's a broken image pipeline waiting for you.react-native-fbsdk— the GitHub repo is archived. The successor (react-native-fbsdk-next) has existed since 2021.redux-persist— flagged unmaintained in the directory, present in three different starters.react-native-router-flux,react-native-snap-carousel,react-native-splash-screen,react-native-star-rating— the classic 2019 stack, all unmaintained per the directory, all still being handed to new projects.
The five failing templates aren't obscure: they include starter kits with five-figure GitHub stars. Stars measure the past; dependency health measures the present.
The clean ones
Credit where due — most of the modern, actively-shipped templates came back zero errors, zero warnings:
- All four official Expo templates (default, blank, blank-typescript, tabs) — the default template's only ding is a
newArchUnknownwarning on the brand-new@expo/ui, which is missing-data honesty, not a problem. @react-native-community/template— clean.- TheCodingMachine boilerplate, T4, Solito, and the gluestack starter (64 native-coupled dependencies, not a single finding — the largest clean surface in the set).
- Ignite, Obytes, Rootstrap, and Tamagui's starter each carry only one or two
newArchUnknownwarnings, mostly on@expo/metro-runtime— which appeared five times across the set and is the single most common "unknown" in the ecosystem right now.
An aside: react-native-template-typescript scans clean on its two remaining dependencies — but the template repo itself is archived. A dependency checker can tell you a template's ingredients are fine; it can't tell you the kitchen closed.
What this means for your team
The templates are just the visible tip. The real problem is the mechanism: a dependency gets added when it's healthy, and nothing ever re-asks the question. The answer isn't a heroic quarterly audit — it's moving the check to the moment a dependency enters the codebase:
# .github/workflows/rn-doctor.yml
on:
pull_request:
jobs:
rn-doctor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: AmrithVengalath/react-native-doctor-ci/[email protected]
with:
changed-only: "true"
base: origin/${{ github.base_ref }}changed-only means only the dependencies a PR adds or changes get checked — adopting the gate on an existing app doesn't require paying down five years of debt first. When something fires, the PR gets an inline annotation on the exact package.json line, with an evidence link and a copy-paste allowlist entry (with a reason and an expiry date) if the team decides to proceed anyway.
And if you're about to start a project from a starter kit: run the check before you commit to it.
npx --yes --package react-native-doctor-ci rn-doctorDocs live at /npm/react-native-doctor-ci/, source at github.com/AmrithVengalath/react-native-doctor-ci. If the directory data is wrong about your favorite package, every finding links its evidence — check it, allowlist it, and file the correction upstream.