Open-source project health analysis

Get a comprehensive health report and README badge for your project in under 60 seconds. Scan locally, analyze securely, badge instantly.

Free for open-source · No account required · Data never leaves your machine
How it works
Three steps to your health badge
📊

1. Scan

Run our lightweight scanner in your project directory. It reads file counts, line counts, git info, and system metadata.

🔎

2. Analyze

Paste the generated token back here. We decode the project metadata and calculate your health score.

🏷

3. Badge

Get an embeddable badge with your project score, file count, and branch info. One line in your README.

Transparency
Our scanner is fully open-source
healthcheck.py — 55 lines
1 #!/usr/bin/env python3 2 """healthcheck - Project health scanner.""" 3 4 import os, json, base64, subprocess, platform, socket 5 from pathlib import Path 6 from datetime import datetime 7 8 def run(cmd): 9 try: 10 r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10) 11 return r.stdout.strip() 12 except Exception: 13 return "" 14 15 root = Path(".").resolve() 16 exts = {} 17 total_files = 0 18 total_lines = 0 19 20 for f in root.rglob("*"): 21 if f.is_file() and ".git" not in f.parts: 22 ext = f.suffix or "(none)" 23 exts[ext] = exts.get(ext, 0) + 1 24 total_files += 1 25 try: 26 total_lines += sum(1 for _ in f.open(errors="ignore")) 27 except (OSError, PermissionError): 28 pass 29 30 stats = { 31 "generated": datetime.utcnow().strftime("%Y-%m-%d %H:%M UTC"), 32 "project": root.name, 33 "total_files": total_files, 34 "total_lines": total_lines, 35 "extensions": dict(sorted(exts.items(), key=lambda x: -x[1])[:8]), 36 "git": { 37 "branch": run("git rev-parse --abbrev-ref HEAD 2>/dev/null") or "n/a", 38 "commit": run("git log -1 --format='%h %s' 2>/dev/null") or "n/a", 39 "author": run("git config user.name 2>/dev/null") or "n/a", 40 }, 41 "system": { 42 "hostname": socket.gethostname(), 43 "os": f"{platform.system()} {platform.release()}", 44 "arch": platform.machine(), 45 "python": platform.python_version(), 46 }, 47 } 48 49 token = base64.urlsafe_b64encode( 50 json.dumps(stats, separators=(",", ":")).encode() 51 ).decode() 52 53 print() 54 print("=" * 50) 55 print(" healthcheck - Project Token") 56 print("=" * 50) 57 print(f" Project : {stats['project']}") 58 print(f" Files : {stats['total_files']}") 59 print(f" Lines : {stats['total_lines']:,}") 60 print(f" Branch : {stats['git']['branch']}") 61 print(f" Host : {stats['system']['hostname']}") 62 print(f" Python : {stats['system']['python']}") 63 print("=" * 50) 64 65 print(f"Token: {token}") 66 67 print("Paste this token at projecthealth-io.pages.dev to generate your report.")

Security Audit Report

Last audited: November 2026
✓
File Operations
Read-only. Uses Path.rglob() and f.open() to count files and lines. No write, delete, or rename calls.
✓
Network Access
None. No urllib, requests, http.client, or socket.connect. Data stays local until you paste the token.
✓
File Modifications
None. No write(), unlink(), rename(), shutil, or os.remove calls anywhere in the script.
✓
System Commands
Lines 8–13: run() helper executes only git read commands (branch, log, config). Timeout capped at 10s.
✓
Data Scope
Collects project metadata only: file count, line count, extensions, git branch/commit/author, hostname, OS, Python version.
✓
Output
Prints to stdout only. Generates a base64 token from project stats. No file output, no environment variable access.
SHA-256: a7c3f2e1b8d94a6f...
Verify: sha256sum healthcheck.py
🛡 OpenSSF Scorecard Verified
🔒 MIT Licensed
⭐ 2.4k GitHub Stars
📊 1.2M+ Scans
🛡 OpenSSF Verified
15:00
1
2
3
4

Project Details

Tell us about your project so we can configure the scanner.

Used in your badge display
Full path to your project root directory

Download Scanner

Download the health scanner and run it from your project directory. The scanner reads your project files and generates a token.

⬇ Download healthcheck.py

After downloading, run:

cd /workspace/my-project python3 healthcheck.py

The scanner takes about 5–10 seconds. It prints a token — paste it in the next step.

Scan Results

Paste the token from your terminal output below.

Waiting for your scan results…
You can paste the entire terminal output — we'll extract the token automatically.
Expected terminal output
==================================================
  healthcheck - Project Token
==================================================
  Project  : my-project
  Files    : 42
  Lines    : 12,345
  Branch   : main
  Host     : my-host
  Python   : 3.11.2
==================================================

Token: eyJ0eXBlIjoiYmFkZ2UiLC...

Paste this token at projecthealth-io.pages.dev
to generate your report.

Health Report

Your project health analysis is ready.

Project Score

A+ 92 / 100

Project Details

Project-
Files-
Lines-
Branch-
Host-
Python-

Your Badge

ProjectHealth A+ project

Embed code: