Report and scoring
Every run produces one report, in whichever formats you ask for: -f terminal,json,sarif,markdown,html.
- Score and grade. Each area scores 0–100 from the severity of its findings; info findings never lower a score. The overall score is the average of the areas that were actually examined. Skipped auditors are listed with the reason, so a clean result never hides a check that didn't run.
- Interactive HTML. One self-contained file with no external requests, so it opens offline and can be attached to a CI run or an email. It has an overview, a tab per area with filters and search, an auditors tab, and OWASP Top 10 / CWE Top 25 groupings. It works with JavaScript off, prints cleanly, and lets readers download the same audit as JSON, SARIF, Markdown or CSV. Shared reports name the project folder, never your local path.
- Stable fingerprints. Each finding has a fingerprint that baselines, suppressions and
compare_reportsrely on. - Diff mode.
--diff origin/mainkeeps only findings in files changed since that ref, for pull requests.
See one: openaudit's audit of its own repository, rebuilt on every push.
Scoring
Each finding adds a penalty by severity, and an area's score decays as the penalty grows, so the first serious finding costs the most. Info findings never lower a score. The overall score is the average of the areas that were examined. These examples are computed by openaudit's own scoring code when the site is built:
| Findings in one area | Score | Grade |
|---|---|---|
| 1 Critical | 50 | D |
| 1 High | 73 | C |
| 1 Medium | 89 | B |
| 1 Low | 98 | A |
| 1 Info | 100 | A |
| 10 Lows | 80 | B |
| 3 Highs | 47 | F |
Grades
- A90–100
- B80–89
- C70–79
- D50–69
- F0–49
Severity
Severity reflects real impact. Each level has its own colour and glyph in the report, so colour is never the only signal.
- Critical
- Directly exploitable or data-exposing issues.
- High
- Serious weaknesses.
- Medium
- Real problems that need a condition.
- Low
- Hardening and hygiene.
- Info
- Inventory that never lowers a score.
What it audits
Every finding belongs to one of ten areas, and each area gets its own score and grade.
| Area | What openaudit looks for |
|---|---|
| Security | Leaked secrets (also in git history), injection, XSS and other risky code, weak crypto, disabled TLS or JWT checks, security headers, TLS, DNS and email spoofing protection, exposed files and APIs, container, IaC and cloud misconfiguration, risky mobile manifests, and optional dynamic scanning |
| Accessibility | WCAG checks in JSX, Vue, Svelte, HTML and CSS; axe-core and pa11y on rendered pages; Android layouts; keyboard and screen-reader journeys walked by an agent |
| Performance | Page weight, caching, compression, Core Web Vitals, Lighthouse, image and bundle size, container image size, mobile app size and native libraries |
| SEO | Titles and descriptions, crawlability, canonical URLs, sitemaps, structured data, broken links |
| Privacy | Trackers and cookies set before consent, analytics, ad and session-replay SDKs, personal data written to logs, mobile permissions |
| Best practices | Repository hygiene (README, licence, security policy, CI, lockfiles), Dockerfile and IaC lint, GitHub Actions hardening |
| Reliability | Type errors, broken pages and redirect chains, missing Kubernetes probes and limits |
| Maintainability | Linting, strict typing settings, duplication, dead code, deep nesting and oversized files |
| Supply chain | Known-vulnerable dependencies, unpinned versions and actions, OpenSSF Scorecard, licences, SBOMs, container image CVEs |
| Compliance | Licence obligations, cookie consent, OWASP Top 10 and CWE Top 25 mapping, CIS cloud benchmarks |