Varcode is a Python library that predicts what genomic variants do to genes,
transcripts, and proteins. Load a VCF or MAF file, and for each variant on each
overlapping transcript, Varcode reports the predicted consequence (for example
a substitution such as p.L159M, a frameshift, or a gene fusion). Where the
sequence can be determined, it also gives the mutant protein.
In the OpenVax tools, Varcode reads gene annotations through PyEnsembl. Isovar reconstructs variant sequences from RNA reads, and Topiary and Vaxrank use Varcode's predicted proteins to choose and rank candidate peptides; see how the libraries fit together.
Requires Python 3.11 or later:
pip install varcode
pyensembl install --release 81 --species humanThe second command downloads the gene annotation and transcript sequences used in the example below (Ensembl 81, GRCh38). For your own data, choose an annotation that matches your input's genome build; see reference setup.
Varcode installs ORFdata, which supplies
the ORFs for noncanonical ORF consequences.
The optional varcode[rna] extra adds pysam for
phasing variants from RNA-seq reads
(pysam does not support Windows).
Predict the effect of a single GRCh38 variant on a CFTR transcript:
from varcode import Variant
variant = Variant("7", 117_531_100, "T", "A", genome=81)
transcript = variant.genome.transcript_by_id("ENST00000003084")
effect = variant.effect_on_transcript(transcript)
print(effect.gene.name, effect.short_description)
protein = effect.mutant_protein_sequence
print(protein[158]) # Python offsets start at zeroCFTR p.L159M
M
Annotate every variant in a VCF called against the same genome build, and print the most severe effect for each:
from varcode import load_vcf
variants = load_vcf("variants.vcf", genome=81)
effects = variants.effects()
for variant, effect in effects.top_priority_effect_per_variant().items():
print(variant.short_description, effect.short_description)For a VCF containing only the variant above, this prints:
chr7 g.117531100T>A p.L159M
Before relying on the output, read
how to read results.
In short: each prediction belongs to one transcript; "top priority" means most
severe, not most likely; None means unknown, not unchanged; and a predicted
protein is not evidence that it is expressed.
The varcode command annotates variant files without writing Python and saves
one row per variant and transcript:
varcode effects --genome GRCh38 --vcf variants.vcf --output-csv effects.csvvarcode genes lists the genes each variant overlaps, and
varcode check-samples screens a cohort of VCFs for possible sample mix-ups.
varcode --help lists the subcommands. See the command-line guide
and sample identity checks.
Full documentation: openvax.github.io/varcode.
- Getting started: reference data, one variant, a VCF, saving results, and coordinate conventions.
- Effect annotation and saving results (CSV, JSON, VCF).
- Sample queries for multi-sample VCFs.
- Splice variants and structural variants, including gene-fusion candidates.
- Germline, phasing, and observed RNA: optional patient context that refines predictions.
- Effect types and the API reference.
./develop.sh # editable install into the active environment
./lint.sh # Ruff and mypy
./test.sh # pytest; needs the Ensembl releases listed in CONTRIBUTING.md
mkdocs build --strictSee CONTRIBUTING.md for the development environment and reference data, and the changelog for release history. For bugs or questions, open an issue.
Varcode is released under the Apache 2.0 license.