Vyper Guard
Static security analyzer for Vyper smart contracts.
Vyper Guard scans .vy sources, runs a focused detector suite, and emits structured security reports for auditors, developers, and security teams. It is designed for fast local analysis with optional compiler-backed semantics and verification workflows.
Website: https://vyper-web.vercel.app
Who it is for
- Auditors and auditing companies
- Protocol and dApp developers
- Security and engineering teams
Primary use cases
- Pre-audit security scans
- CI security gates and regression checks
- Learning and reviewing Vyper security patterns
Features
- Vyper-focused static analysis for .vy contracts
- 22 built-in detectors (reentrancy, access control, external call safety, arithmetic risks, input validation, ERC-20 return handling)
- Always-on compiler advisories (
compiler_version_check) - Multiple report formats: CLI, JSON, Markdown, SARIF, HTML
- Verification workflows for unit and fuzz tests (
verify,test,fuzz) - Baseline suppression and baseline-diff for CI stability
- Optional remediation mode with tiered auto-fix controls
- Optional compiler-backed semantic mode (install
vyperextra) - CFG-aware CEI analysis plus cyclomatic complexity metrics in reports and
stats - Project-wide graph for directory scans (imports, interfaces, call/state maps)
- Explorer and on-chain analysis workflows (
explorer,analyze-address) - Deterministic priority scoring with governance notes and explicit fallback controls (
--allow-ai-fallback)
Installation
Python 3.10+ is required.
pip install vyper-guard
Optional extras:
pip install vyper-guard[vyper] # compiler-backed semantics
pip install vyper-guard[monitor] # on-chain monitoring (web3 + aiohttp)
pip install vyper-guard[remediation] # GitHub remediation support
pip install vyper-guard[all] # all optional features
Verify:
vyper-guard --version
Quickstart
Analyze a contract:
vyper-guard analyze contract.vy
Verify static analysis plus tests:
vyper-guard verify contract.vy --unit-cmd "pytest -q"
Generate a machine-readable report:
vyper-guard analyze contract.vy --format json --output report.json
Generate a SARIF report for code scanning:
vyper-guard analyze contract.vy --format sarif --output report.sarif
Generate an HTML report:
vyper-guard analyze contract.vy --format html --output report.html
Command guide (when to use)
| Command | When to use |
|---|---|
| `analyze <file | dir>` |
| `verify <file | dir>` |
| `test <file | dir>` |
| `fuzz <file | dir>` |
analyze-address <addr> |
Analyze verified on-chain source from a block explorer. |
explorer <addr> |
Fetch explorer metadata (ABI, source, verification info). |
diff <before> <after> |
Compare security posture between revisions. |
| `stats <file | dir>` |
baseline / monitor |
Production monitoring flows for deployed contracts. |
Core commands
| Command | Purpose |
|---|---|
analyze <file> |
Analyze a single contract |
scan <file> |
Alias for analyze |
verify <file> |
Static analysis + unit/fuzz verification in one report |
test <file> |
Run unit tests and emit verification report |
fuzz <file> |
Run fuzz tests and emit verification report |
ast <file> |
Structural AST-oriented contract output |
flow <file> |
Function/call-flow visualization data |
fix <file> |
Remediation workflow |
stats <file> |
Contract metrics and graph artifacts |
diff <before> <after> |
Compare security posture between revisions |
explorer <address> |
Fetch verified source and ABI metadata |
analyze-address <address> |
Analyze explorer-fetched contract source |
detectors |
List detector catalog with severity/category |
benchmark [dir] |
Detector quality benchmark run |
baseline <address> |
Build monitor baseline profile |
monitor <address> |
Runtime monitoring and alerts |
help |
Full command catalog and usage hints |
Verification (unit + fuzz)
Use verify for a single report that includes static findings plus unit/fuzz results. Use test or fuzz to run them independently.
vyper-guard verify contract.vy --unit-cmd "pytest -q"
vyper-guard fuzz contract.vy --fuzz-cmd "your-fuzz-command"
You can also set defaults via environment variables:
export GUARDIAN_UNIT_CMD="pytest -q"
export GUARDIAN_FUZZ_CMD="your-fuzz-command"
Configuration
Configuration is loaded in this order:
- CLI flags
- Environment variables
.guardianrcin the current directory (or.guardianrc.yaml,.guardianrc.yml)~/.guardianrc
Create a starter config:
vyper-guard init
Example verification config:
verification:
unit_command: ["pytest", "-q"]
fuzz_command: ["your-fuzz-command"]
timeout_seconds: 600
max_output_chars: 20000
Explorer and LLM keys are read from environment variables:
export GUARDIAN_EXPLORER_API_KEY="..."
export GUARDIAN_LLM_API_KEY="..."
Output formats
Use --format and --output for structured reports:
vyper-guard analyze contract.vy --format json --output report.json
vyper-guard analyze contract.vy --format sarif --output report.sarif
vyper-guard analyze contract.vy --format html --output report.html
Supported formats: cli, json, markdown, sarif, html.
Security scoring
Each run produces a score from 0 to 100 and a grade.
Base score is 100 with severity-based deductions:
- CRITICAL: -40 points (capped at -50)
- HIGH: -20 points (capped at -40)
- MEDIUM: -8 points (capped at -20)
- LOW: -3 points (capped at -10)
- INFO: -1 point (capped at -5)
Additional trust penalty:
- Detector runtime failures: -10 each (capped at -30)
Detector catalog
missing_nonreentrantunsafe_raw_callunchecked_sendmissing_event_emissiontimestamp_dependenceinteger_overflowunprotected_selfdestructdangerous_delegatecallunprotected_state_changesend_in_loopunchecked_subtractioncei_violationtx_origin_authmissing_zero_address_checkweak_randomnesslocked_ethershadowed_state_variablemissing_input_validationunsafe_assemblymissing_return_valuedivision_before_multiplicationincorrect_erc20_return
Compiler advisories are always evaluated and reported as compiler_version_check findings.
Remediation
Use remediation mode for guided fixes:
vyper-guard analyze contract.vy --fix
Limit remediation scope by risk tier:
vyper-guard analyze contract.vy --fix --max-auto-fix-tier B
Dry-run remediation:
vyper-guard analyze contract.vy --fix-dry-run --fix-report remediation-report.json
License
MIT. See LICENSE.
Disclaimer
Vyper Guard is a static analysis aid and does not guarantee absence of vulnerabilities. Use it together with manual review, testnet validation, and professional audits for high-value deployments.
Metadata
Release files for vyper-guard 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vyper_guard-0.5.1.tar.gz | 156.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vyper_guard-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 339.2 kB
Release files / vyper_guard-0.5.1.tar.gz
| Download URL | vyper_guard-0.5.1.tar.gz |
|---|---|
| Size | 156.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ffc38c5b198915aab3807cde9ffce26f6dccfe594fff2beff78a46aab697e710
|
|
BLAKE2b-256 checksum How to use checksums |
0a03ba0c44172419faf872641778a60f2ba80967360da461b745c15c906e805c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Garuda Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / vyper_guard-0.5.1-py3-none-any.whl
| Download URL | vyper_guard-0.5.1-py3-none-any.whl |
|---|---|
| Size | 182.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
19088a8687fe43e75a53e0438ee4cefa4510d4607ee70d3ffdf835945f72d936
|
|
BLAKE2b-256 checksum How to use checksums |
bc3d10bba7fb721047d938dba96985f2ec4fe814b8a3c957fbec6cb57e6699cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Garuda Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|