A local-first React Native & Expo project auditor for release readiness, dependency health, and risk reports.
Audit React Native and Expo projects before release issues waste your time.
Run an audit in the current project:
npx react-native-auditor auditAudit a specific project:
npx react-native-auditor audit /path/to/projectOr install the CLI globally:
npm install -g react-native-auditor
rn-auditor auditscan is an alias for audit:
rn-auditor scanGenerate a local HTML report:
rn-auditor report --html
rn-auditor report --html /path/to/project --output report.htmlGenerate a JSON report for CI or other tooling:
rn-auditor report --json
rn-auditor report --json --output rn-auditor-report.json
rn-auditor report --json /path/to/projectReact Native Auditor uses conservative static checks to:
- Detect Expo, React Native, and unknown project types.
- Detect the package manager and conflicting root lockfiles.
- Check Expo and EAS release-readiness configuration.
- Find missing environment variable documentation.
- Flag a common Reanimated and Babel setup risk.
- Generate readable terminal output and a local static HTML report.
react-native doctor is useful for checking the development environment. React Native Auditor has a different scope: it audits project-level files for dependency, configuration, and release-readiness risks.
- Project-focused: inspects the repository state that travels with the app.
- Local-first: project data stays on the machine running the audit.
- Static by default: reads selected files without running the target project.
- Native CLI: the npm package launches a bundled Rust binary for fast, predictable execution.
- No service dependency: no account, dashboard, or SaaS connection is required.
React Native Auditor is intentionally focused. It does not replace React Native Doctor, Expo Doctor, platform build validation, or a real release build.
React Native Auditor
Scanning path:
/work/mobile-app
Project summary:
Project type: Expo
Package manager: Multiple / Ambiguous
Issues:
[Warning] RNA_LOCKFILE_001 - Multiple lockfiles detected
Multiple package manager lockfiles were found.
[Warning] RNA_ENV_001 - Missing .env.example
This project uses a .env file but does not document required variables.
Output varies by project. This example is shortened for readability.
- Detects Expo, React Native, and unknown project types from
package.json. - Reports a missing or invalid
package.json. - Accepts the current directory or an explicit project path.
- Detects npm, Yarn, pnpm, and Bun from root lockfiles.
- Reports multiple package manager lockfiles as an ambiguous setup.
- Reports when
.envexists but.env.exampleis missing. - Never parses or prints environment variable values.
- Parses static
app.jsonas JSON. - Checks
expo.ios.bundleIdentifierandexpo.android.package. - Detects dynamic
app.config.jsandapp.config.tswithout evaluating them.
Dynamic app config limits the static checks that can be performed.
- Parses static
eas.jsonas JSON. - Reports a missing
eas.jsonfor Expo projects. - Reports a missing
build.productionprofile.
- Checks for
react-native-reanimatedin project dependencies. - Uses narrow text scanning to look for
react-native-reanimated/plugininbabel.config.js. - Reports when the expected Babel setup cannot be found.
- Terminal report with project summary, detected files, lockfiles, and issues.
- Static local HTML report containing the same audit results.
- Pretty-printed JSON report with detected files, lockfiles, issue counts by severity, and the full issue list.
rn-auditor report --html /path/to/project --output report.htmlThe report is a static HTML file written locally. It does not require a server or upload project data. Without --output, the file is written as rn-auditor-report.html in the current directory.
rn-auditor report --json
rn-auditor report --json --output rn-auditor-report.json
rn-auditor report --json /path/to/projectWithout --output, the pretty-printed JSON report is written to standard output. The report includes detected files, lockfiles, issue counts by severity, and the full issue list.
Use the JSON report in CI when you want a machine-readable audit artifact:
name: React Native Auditor
on:
pull_request:
push:
branches: [main]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run React Native Auditor
run: npx react-native-auditor@latest report --json --output rn-auditor-report.json
- name: Upload JSON report
uses: actions/upload-artifact@v4
with:
name: rn-auditor-json-report
path: rn-auditor-report.jsonYou can also upload the optional HTML report for easier manual review:
- name: Generate HTML report
run: npx react-native-auditor@latest report --html --output rn-auditor-report.html
- name: Upload HTML report
uses: actions/upload-artifact@v4
with:
name: rn-auditor-html-report
path: rn-auditor-report.htmlSee examples/reports/sample-report.json for a sample JSON report.
React Native Auditor treats project configuration as untrusted input.
- Does not upload project data.
- Does not require a SaaS account or service.
- Does not execute commands from the target project.
- Does not run npm, Yarn, pnpm, or Bun commands from the target project.
- Does not run Expo CLI, EAS CLI, or React Native CLI.
- Does not evaluate
app.config.jsorapp.config.ts. - Does not execute
babel.config.js. - Does not print
.envvalues.
Static JSON parsing and narrow text scanning are used where a rule needs file contents. JavaScript and TypeScript configuration files are never loaded as executable modules.
React Native Auditor requires Node.js 18 or newer when installed through npm.
npx react-native-auditor auditnpm install -g react-native-auditor
rn-auditor auditThe published package exposes the standard rn-auditor npm binary and can also be launched with:
yarn dlx react-native-auditor audit
pnpm dlx react-native-auditor audit
bunx react-native-auditor auditThe npm wrapper selects the bundled Rust binary for the current platform and forwards CLI arguments to it. The v0.1 package includes binaries for macOS arm64/x64, Linux x64, and Windows x64.
| Command | Description |
|---|---|
rn-auditor audit [path] |
Audit a project and print the terminal report. |
rn-auditor scan [path] |
Alias for audit. |
rn-auditor report --html [path] [--output <file>] |
Write a local static HTML report. |
rn-auditor report --json [path] [--output <file>] |
Print or write a pretty-printed JSON report. |
If no path is provided, the current directory is audited. Exactly one of --html or --json is required for the report command.
Planned work remains deliberately focused:
- More high-value static rules.
- Stronger release-readiness checks.
- Log analysis as a later capability.
- Conservative, interactive fixes at a later stage.
There is no plugin system planned for v1. Commands such as analyze-log, release-check, and interactive fixes are roadmap items, not v0.1 features. See docs/ROADMAP.md for current development notes.
Contributions should prefer small, focused rules with clear findings. Checks must remain static-safe and must not execute code or commands from the target project.
Before submitting a Rust change, run:
cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace