Skip to content

FAQ

nfr-review is a CLI tool that performs automated non-functional design reviews. It analyses source code, infrastructure configs, CI pipelines, and ADRs to surface quality issues across security, reliability, performance, and maintainability.

AST analysis is available for Java, Python, Go, C++, C#, and Node.js/TypeScript. Infrastructure analysis covers Kubernetes, Docker, Helm, Terraform, and Istio. Framework-specific support includes Spring Boot, gRPC/protobuf, and Azure API Management.

No. All Band 1 rules (125 rules) work without any LLM. Band 2 rules (semantic analysis) require an LLM API key but are optional — they’re skipped gracefully when unconfigured.

Terminal window
pip install nfr-review

For optional features:

Terminal window
pip install "nfr-review[pdf]" # PDF report generation
pip install "nfr-review[monitor]" # production monitoring
pip install "nfr-review[all]" # everything

Python 3.11 or later.

Rules are skipped when:

  • Required technology not detected — e.g. Spring Boot rules on a Go project
  • Required collector didn’t produce evidence — collector was skipped or failed
  • Rule suppressed in config — listed in rules.skip

Use nfr-review run -v to see why each rule was skipped.

Use --workers 4 (or more) to parallelise collector execution. See the Large Repos recipe for more tuning tips.

Yes — point nfr-review at a subdirectory:

Terminal window
nfr-review report ./my-repo/services/user-service

It’s the fraction of applicable rules that actually ran. Low coverage suggests missing evidence — check verbose output for skipped collectors.

Terminal window
nfr-review report ./my-repo --format sarif -o results/

Or in the GitHub Action: sarif-upload: "true".

Yes, in your config:

nfr-review.yaml
rules:
skip:
- rule-id-to-suppress

Each finding deducts points from its category based on severity. Category scores are combined using configurable weights. See Scoring and Maturity for the full algorithm.

How do I set up nfr-review in GitHub Actions?

Section titled “How do I set up nfr-review in GitHub Actions?”

Copy one of the example workflows from the CI/CD Integration chapter. The minimal setup is:

- uses: JimAKennedy/nfr-review@v1
with:
path: .
fail-on: "red"

On first adoption, a scan may produce many findings. first-run-cap limits how many GitHub issues are created in the initial run (default: 25) to prevent flooding your issue tracker.

The GitHub Action is GitHub-specific, but the CLI works anywhere:

Terminal window
pip install nfr-review
nfr-review report . --format sarif -o results/

This usually means tech detection didn’t find any recognised technologies. Check with nfr-review run -v and consider adding tech overrides:

tech:
java: true

The collector may need an optional dependency. Check:

  • graphify requires pip install graphify
  • License scanning requires pip install scancode-toolkit
  • Monitor mode requires pip install nfr-review[monitor]

Common causes:

  • Different nfr-review versions — pin the version in CI
  • Missing full git history — add fetch-depth: 0 to checkout
  • Time-based rules — dependency freshness findings change as dependencies age