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.
Start React Native Auditor in guided mode:
npx react-native-auditor
The guided menu is the easiest way to explore common actions in a React Native or Expo project.
You can also run commands directly:
npx react-native-auditor audit
npx react-native-auditor audit --fix
npx react-native-auditor audit --fix --interactive
npx react-native-auditor report --html
npx react-native-auditor report --json
Running React Native Auditor without a subcommand opens a keyboard-driven guided menu in interactive terminals:
rn-auditor
From the menu, you can:
- Run an audit
- Preview safe fixes
- Apply safe fixes interactively
- Generate an HTML report
- Generate a JSON report
Guided mode is an onboarding and discovery layer. It does not replace direct CLI commands.
Direct commands remain the recommended interface for CI, scripts, repeatable checks, and advanced workflows:
rn-auditor audit --fail-on warning
rn-auditor report --json --fail-on error
Use --fail-on <info|warning|error|none> when CI should fail based on reported issue severity:
rn-auditor audit --fail-on error
rn-auditor audit --fail-on warning
rn-auditor audit --fail-on info
rn-auditor audit --fail-on none
rn-auditor scan --fail-on error
rn-auditor report --json --fail-on error
rn-auditor report --html --fail-on errorThreshold behavior:
errorfails when at least one Error issue is reported.warningfails when at least one Warning or Error issue is reported.infofails when any Info, Warning, or Error issue is reported.nonenever fails because of reported issues.
If --fail-on is omitted, React Native Auditor keeps its default exit behavior.
Example GitHub Actions workflow:
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 audit --fail-on warningReact 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.
rn-auditor audit --fix prints safe fix suggestions as a preview and does not modify files.
rn-auditor audit --fix --interactive asks before applying each safe fix. React Native Auditor only applies conservative fixes that can be safely reviewed before writing. For environment files, values are never copied and existing files are not overwritten.
rn-auditor scan --fix and rn-auditor scan --fix --interactive behave the same way because scan is an alias for audit.
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 release metadata:
expo.name,expo.slug,expo.version,expo.ios.buildNumber, andexpo.android.versionCode. - Checks release identities:
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. - Reports an empty
build.productionprofile for review before release.
- 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.
The npm wrapper selects the bundled Rust binary for the current platform and forwards CLI arguments to it.
npx react-native-auditor
npx react-native-auditor auditnpm install -g react-native-auditor
rn-auditor
rn-auditor auditThe published package exposes the standard rn-auditor npm binary and can also be launched with:
yarn dlx react-native-auditor
pnpm dlx react-native-auditor
bunx react-native-auditorThe 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 |
Open the guided menu in an interactive terminal. |
rn-auditor audit [path] [--fail-on <level>] [--fix] [--interactive] |
Audit a project and print the terminal report. |
rn-auditor scan [path] [--fail-on <level>] [--fix] [--interactive] |
Alias for audit. |
rn-auditor report --html [path] [--output <file>] [--fail-on <level>] |
Write a local static HTML report. |
rn-auditor report --json [path] [--output <file>] [--fail-on <level>] |
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. In non-interactive environments, running rn-auditor without a subcommand prints guidance and exits successfully instead of opening the menu.
Planned work remains deliberately focused:
- More high-value static rules.
- Stronger release-readiness checks.
- Log analysis as a later capability.
- More conservative, interactive fixes for high-confidence project maintenance tasks.
There is no plugin system planned for v1. Commands such as analyze-log and release-check are roadmap items, not v0.8.0 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