Skip to content
Back to skills

vyper-compiler

ASecurity

Vyper smart contract compiler internals. Use when working on the Vyper compiler codebase — compilation pipeline, Venom IR, semantic analysis, code generation, testing, or contributing. Triggers on vyper compiler development, Venom passes, AST/semantics changes, codegen work, or test writing.

  • 5,184 stars
  • 0 votes
  • 0 copies
  • 13 views
  • Added September 10, 2026
blockchainpythonshellbashnodetestingfrontend

Works with

  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 6 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add vyperlang/vyper --skill skills --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of vyper-compiler?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for vyper-compiler
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vyperlang-vyper-compiler/badge)](https://www.skillsdirectory.com/skills/vyperlang-vyper-compiler)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: vyper-compiler
description: Vyper smart contract compiler internals. Use when working on the Vyper compiler codebase — compilation pipeline, Venom IR, semantic analysis, code generation, testing, or contributing. Triggers on vyper compiler development, Venom passes, AST/semantics changes, codegen work, or test writing.
---

# Vyper Compiler

Pythonic smart contract language targeting the EVM. v0.4.x, Python 3.11+.

## Quick Commands

```bash
uv sync                                 # install deps (per-worktree .venv, recommended, includes dev group)
uv run vyper contract.vy                # compile a contract
uv run vyper -f ir_runtime contract.vy  # inspect Venom IR
uv run vyper -f asm contract.vy         # inspect assembly
uv run ./quicktest.sh                   # run tests (`-nauto -m "not fuzzing"` by default via setup.cfg)
uv run make lint                        # enforces code style (same as CI)
```

Prefix all commands with `uv run` — it activates the local `.venv` per invocation, which is necessary in non-interactive shells. Each worktree gets its own `.venv`, so no cross-contamination.

Alternative: `pip install . --group dev` + `PYTHONPATH=.` prefix on every command. **Never `pip install -e .`** — it creates an egg-link in site-packages that permanently points the venv at one worktree, breaking all others.

## Compilation Pipeline

```
Source (.vy)
  │
  ├─ vyper/ast/            → Parse to AST (pre_parser → Python AST → Vyper AST)
  ├─ vyper/semantics/      → Type check, validate, annotate AST
  ├─ vyper/codegen/        → AST → s-expr IR (default production pipeline)
  ├─ vyper/ir/             → s-expr IR → assembly → bytecode
  └─ vyper/evm/            → Assembly → bytecode
```

Experimental Venom path (`--experimental-codegen`):
```
  ├─ vyper/codegen_venom/  → AST → Venom SSA IR
  └─ vyper/venom/          → Venom IR optimization passes → assembly
```

Orchestrated by `vyper/compiler/phases.py` (`CompilerData`). Each phase is lazy.

## Directory Map

| Directory | Purpose |
|-----------|---------|
| `vyper/ast/` | Parsing, AST nodes, pre-parser. See [AST README](../vyper/ast/README.md) |
| `vyper/semantics/` | Type system, analysis, validation. See [Semantics README](../vyper/semantics/README.md) |
| `vyper/codegen/` | AST → s-expr IR (default production pipeline) |
| `vyper/ir/` | s-expr IR → assembly → bytecode. See [IR README](../vyper/ir/README.md) |
| `vyper/codegen_venom/` | AST → Venom IR (experimental, `--experimental-codegen`) |
| `vyper/venom/` | Venom SSA IR: passes, analysis, assembly emission. See [Venom README](../vyper/venom/README.md) |
| `vyper/compiler/` | Pipeline orchestration, settings, output formats. See [Compiler README](../vyper/compiler/README.md) |
| `vyper/builtins/` | Built-in functions and interfaces |
| `vyper/evm/` | EVM opcodes, assembler |
| `vyper/cli/` | CLI entry points (`vyper`, `vyper-ir`, `venom`) |
| `tests/unit/` | Unit tests (ast, semantics, compiler, venom) |
| `tests/functional/` | Functional tests (builtins, codegen, grammar, syntax, venom) |

## Topic Deep-Dives

- **[Venom IR](venom.md)** — SSA IR design, passes, optimization, working with Venom code
- **[Semantics & Frontend](semantics.md)** — Type system, analysis phases, namespace, validation
- **[Code Generation](codegen.md)** — Legacy IR, Venom codegen, the two pipelines
- **[Testing](testing.md)** — Test structure, fixtures, running tests, writing new tests
- **[Contributing](contributing.md)** — Commit message standards, PR workflow, code style summary

## Code Style

Enforced by `make lint` (also what CI runs). Includes `black`, `flake8`, `isort`, `mypy`.

- Line length: 100
- No inline imports; standard library → third-party → local
- snake_case for variables (`tmp = ...`), DromedaryCase (aka upper camelCase) for classes (`ExprAnalyzer`), type classes end in `T` (e.g. `IntegerT`, `ModuleT`)

## Key Entry Points

| What | Where |
|------|-------|
| Main compile function | `vyper.compiler.compile_code()` |
| Pipeline phases | `vyper.compiler.phases.CompilerData` |
| AST parsing | `vyper.ast.parse.parse_to_ast()` |
| Semantic analysis | `vyper.semantics.analyze_module()` |
| Legacy codegen | `vyper.codegen.module` |
| AST → Venom IR | `vyper.codegen_venom.module` |
| Venom → assembly | `vyper.venom.generate_assembly_experimental()` |
| CLI entry | `vyper.cli.vyper_compile` |

Files in this skill

  • SKILL.md4.4 KB
  • codegen.md1.1 KB
  • contributing.md7.8 KB
  • semantics.md2.3 KB
  • testing.md1.6 KB
  • venom.md2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.