A command-line Developer Environment Checker. DevCheck scans your computer
and reports whether common development tools are installed and accessible
from your system PATH — no configuration, no external dependencies, no
internet connection required.
Setting up a new machine, onboarding a teammate, or debugging a "works on my
machine" issue almost always starts with the same question: what's actually
installed on this system, and which version? DevCheck answers that in one
command. It inspects your PATH for a configurable list of common developer
tools, tries to read each tool's version, and gives you a clean report you
can read in the terminal, save as JSON/CSV, or compare against an earlier
scan.
DevCheck is strictly read-only — see Safety information.
- Scan the whole environment in one pass, or check a single tool by name.
- Classify every tool as
Installed,Not Installed, orInstalled but version unavailable. - Clean, aligned table output in the terminal.
- Export scan results to JSON or CSV.
- Save each scan to local history and compare it against the previous scan
to see what changed (newly installed tools, version bumps, tools that
disappeared from
PATH). - Graceful handling of missing tools, permission errors, command timeouts, unparsable version output, and unsupported commands — the app never crashes, no matter what is or isn't installed.
- Interactive numbered CLI menu; no flags or arguments to memorize.
| Tool | Executable(s) checked | Version flag(s) tried |
|---|---|---|
| Python | python3, python |
--version |
| Git | git |
--version |
| Node.js | node |
--version |
| npm | npm |
--version |
| Java | java |
--version, -version |
| Java Compiler | javac |
--version, -version |
| pip | pip3, pip |
--version |
| VS Code | code |
--version |
| Docker | docker |
--version |
| Maven | mvn |
--version, -version |
The tool list lives in config.py — add, remove, or rename entries there
without touching any other file.
- Python 3 only — no third-party packages.
subprocess— safely runs each tool's version command with a timeout.shutil.which()— locates executables onPATHwithout invoking a shell.json/csv— report export and history storage.pathlib— cross-platform file handling.dataclasses/enum— typed, self-documenting data models.unittest/unittest.mock— the test suite.
DevCheck requires only a Python 3 interpreter — nothing to install.
git clone https://github.com/<your-username>/devcheck.git
cd devcheck(No pip install step is needed — see requirements.txt.)
Run the interactive CLI:
python main.pyYou'll see a numbered menu:
================================
DEVCHECK
========
1. Full Environment Scan
2. Check a Specific Tool
3. View Previous Scan
4. Compare Scans
5. Export Report
6. Exit
Choose an option:
- 1 — Full Environment Scan: checks every configured tool and prints a summary table. The result is automatically saved as the new "previous scan" for future comparisons.
- 2 — Check a Specific Tool: prompts for a tool name (e.g.
Docker) and prints its status, version, and full executable path. - 3 — View Previous Scan: reloads and prints the last saved scan from
data/scan_history.json. - 4 — Compare Scans: shows what changed between the scan on disk before your most recent full scan and the new one (status changes, version bumps, tools gained or lost).
- 5 — Export Report: runs a fresh scan and writes it to
reports/scan_report.json,reports/scan_report.csv, or both. - 6 — Exit: quits the program.
================================
ENVIRONMENT SCAN
================
Tool Status Version
Python Installed 3.12.4
Git Installed 2.46.0
Node.js Installed 22.5.1
npm Installed 10.8.2
Java Installed 21.0.4
Docker Not Installed -
Maven Not Installed -
VS Code Installed 1.92.0
============================================================
Installed: 7
Missing: 3
============================================================
Every JSON report (data/scan_history.json, reports/*.json) has this shape:
{
"timestamp": "2026-08-23T14:02:11Z",
"operating_system": "Linux",
"results": [
{
"tool": "Python",
"installed": true,
"status": "Installed",
"version": "3.12.4",
"path": "/usr/bin/python3",
"error": ""
}
]
}| Field | Meaning |
|---|---|
timestamp |
UTC time the scan was taken (ISO-8601). |
operating_system |
Windows, macOS, Linux, or whatever platform.system() reports. |
tool |
Tool name, e.g. "Docker". |
installed |
true/false shortcut for "not Not Installed". |
status |
One of Installed, Not Installed, Installed but version unavailable. |
version |
Parsed version string, or "-" if unavailable. |
path |
Full path to the executable, or "-" if not found. |
error |
Explanation when a version couldn't be read (empty string otherwise). |
A sample report is included at reports/example_scan.json, and a sample
saved scan is included at data/scan_history.json so you can see the
format immediately without running a scan first.
CSV exports use the same fields as columns:
tool, installed, status, version, path, error.
DevCheck is written to run unmodified on Windows, macOS, and Linux:
- Tool detection uses
shutil.which(), which correctly understandsPATHEXTon Windows (sopython.exe,node.exe, etc. are found) and standardPATHlookup on macOS/Linux. - Some tools have platform-specific executable names (e.g.
pip3vspip); DevCheck tries multiple candidate names per tool. - The operating system name shown in reports is normalized to
Windows,macOS, orLinuxregardless of the raw value Python reports. - No shell-specific syntax, path separators, or OS-only libraries are used.
DevCheck never installs, uninstalls, modifies, updates, or configures any software. It only:
- Looks for executables on your
PATH(read-only lookup). - Runs each tool's own
--version-style flag (a harmless, standard, read-only operation every one of these tools supports). - Reads and writes files strictly inside the
devcheck/data/anddevcheck/reports/folders.
If a command fails, times out, or the process lacks permission to run it,
DevCheck catches the error and reports it as
Installed but version unavailable instead of crashing.
devcheck/
│
├── main.py # CLI entry point and menu
├── checker.py # Tool detection and version-check logic
├── tool.py # ToolResult / ToolStatus data model
├── version_parser.py # Extracts version numbers from raw command output
├── reports.py # Report building, table printing, JSON/CSV export
├── history.py # Scan history save/load/compare
├── utils.py # OS name, timestamps, directory helpers
├── config.py # Tool definitions and settings
│
├── data/
│ └── scan_history.json # Sample saved scan (overwritten by real scans)
│
├── reports/
│ └── example_scan.json # Sample exported report
│
├── tests/
│ ├── test_checker.py
│ ├── test_version_parser.py
│ └── test_reports.py
│
├── README.md
├── requirements.txt
├── .gitignore
└── LICENSE
Run the full test suite with:
python -m unittest discoverThe suite covers:
- Tool detection when a tool is present, missing, or errors out.
- Version string parsing across varied output formats.
- Permission-error and timeout handling.
- Report building and installed/missing summaries.
- JSON export correctness.
- CSV export correctness.
- Optional JSON config file to let users add custom tools without editing
config.py. --tool/--exportcommand-line flags for non-interactive/scripted use.- Colorized terminal output.
- Keep a rolling history of more than one previous scan.
- Additional tools (Rust/Cargo, Go, .NET SDK, Ruby, PHP, kubectl, etc.).
Released under the MIT License.