Skip to content
/file-formats/vcf

VCF (Variant Call Format)

A tab-delimited text format that records differences between a sequenced sample and a reference genome, one line per variant site, with per-sample genotypes and quality annotations.

A VCF file is a tab-delimited text record of the positions where your sequenced DNA differs from a reference genome, plus the evidence and genotype calls at each of those positions. It is the standard handoff point between a variant caller and everything downstream: annotation, filtering, polygenic scores, and clinical review.

How it works

A VCF has two parts. The header is every line starting with ##, declaring the reference used, the contigs and their lengths, and the meaning of every key that appears later in the INFO and FORMAT columns. Then one #CHROM line names the eight fixed columns and the samples. Everything after is data, one variant per line:

#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1
chr1 817186 rs3094315 G A 1284.6 PASS AF=0.5;DP=42 GT:AD:DP:GQ:PL 0/1:21,21:42:99:1293,0,1287

POS is 1-based. REF is the reference allele at that position, ALT is the alternate (comma-separated if multiallelic). QUAL is a Phred-scaled confidence that a variant exists there. FILTER is PASS or a comma-separated list of filter names defined in the header. INFO holds site-level annotations. FORMAT declares which per-sample fields follow, in order.

The genotype field GT is what most people want. A value of 0/1 is heterozygous, 1/1 homozygous alternate, 0/0 homozygous reference, and ./. no call. A pipe (0|1) means the call is phased: you know which alleles sit on the same chromosome copy. AD is the allelic depth (reference reads, alt reads) and DP the total depth. GQ is the genotype quality, and PL the Phred-scaled likelihoods of each genotype.

Indels are represented with padding. A single-base deletion at position 1000 appears as REF=CA ALT=C at POS 1000 and not as a two-base event at 1001. This left-alignment and padding convention is the source of most “why don’t these two VCFs agree” problems, because the same deletion in a homopolymer can be written at several positions. Normalize before comparing: bcftools norm -f GRCh38.fa -m -any -c w input.vcf.gz -Oz -o norm.vcf.gz splits multiallelics and left-aligns everything against the reference.

In your own data

A 30x human WGS VCF contains roughly 4–5 million variants, about 4 million SNVs and 500k–900k small indels, and compresses to a few hundred megabytes as .vcf.gz. It must be bgzip-compressed, not gzip, and indexed with tabix -p vcf or bcftools index -t before any tool can do a random-access region query.

Start here:

  • bcftools stats sample.vcf.gz | head -40 gives counts, the transition/transversion ratio, and the het/hom ratio. Expect a Ti/Tv of ~2.0–2.1 genome-wide and ~3.0 in exons. A Ti/Tv far below 2 usually means the call set carries too many false positives. The het/hom ratio is ~1.5–1.7 for most human samples.
  • bcftools view -f PASS -i 'FORMAT/DP>10 & FORMAT/GQ>20' sample.vcf.gz is a sane starting filter for exploration.
  • bcftools query -f '%CHROM\t%POS\t%REF\t%ALT[\t%GT]\n' -r chr9:133255000-133280000 sample.vcf.gz pulls a region as plain TSV you can pipe into anything.

Three mistakes to avoid. First, confusing a VCF with a gVCF: a gVCF from GATK HaplotypeCaller with -ERC GVCF also contains non-variant blocks with <NON_REF> ALT alleles, so a raw row count is meaningless and naive filtering discards reference confidence. Second, mixing reference builds. A chr7 position in GRCh37 is a different base in GRCh38 and different again in T2T-CHM13. Read the ##reference header line and the contig names (chr1 versus 1) before merging anything. Third, treating absence of a variant line as reference. If a region had zero coverage, the VCF simply has no row there, which is not the same as a confident 0/0.

Phasing is the field people most often need and most often lack. Short-read pipelines emit unphased genotypes except where a caller locally phases within a haplotype window (GATK writes PS tags for these). Linked-read and long-read approaches recover phase blocks across megabases and resolve structural and repeat-adjacent variation that short reads miss entirely.1 Long-read assembly-based calling meaningfully raises sensitivity for the variant classes short-read alignment handles poorly.2

Limitations

A VCF is a statement about a reference, so it inherits the reference’s blind spots. Sequence present in you but absent from GRCh38 has nowhere to be written, which is the argument for graph-based genome inference.3 Benchmarks against a fully resolved diploid assembly show that call accuracy still varies sharply by region, with segmental duplications and other hard regions far behind the genome-wide average.4 Different callers on identical reads disagree, particularly on indels. Comparisons of alignment-based and assembly-based SNV calling show systematic differences in which variants each recovers.5 Evaluations across callers report tool-dependent precision and recall that shift with coverage and genome complexity.6 Treat any single VCF as one caller’s opinion. Where a specific variant would inform a health decision, that needs a clinical-grade laboratory and a genetics professional. A bcftools query is not enough.

Computational Angle

Your whole-genome VCF is a few million rows describing how you differ from GRCh38 or T2T-CHM13; almost every downstream question you ask about your genome starts with a bcftools query against it.

Related Terms

References

  1. Patrick Marks, Sarah Garcia, Álvaro Martínez Barrio, et al.. Resolving the full spectrum of human genome variation using Linked-Reads . Genome Research, 2019. DOI
  2. Shloka Negi, Sarah L. Stenton, Seth Berger, et al.. Advancing long-read nanopore genome assembly and accurate variant calling for rare disease detection . The American Journal of Human Genetics, 2025. DOI
  3. Benedict Paten, Adam M. Novak, Jordan M. Eizenga, et al.. Genome graphs and the evolution of genome inference . Genome Research, 2017. DOI
  4. Nancy F. Hansen, Nathan Dwarshuis, Hyun Joo Ji, et al.. A complete diploid human genome benchmark for personalized genomics . Cell, 2026. DOI
  5. Leihong Wu, Gökhan Yavaş, Huixiao Hong, et al.. Direct comparison of performance of single nucleotide variant calling in human genome with alignment-based and assembly-based approaches . Scientific Reports, 2017. DOI
  6. Zhen Yao, Frank M. You, Amidou N’Diaye, et al.. Evaluation of variant calling tools for large plant genome re-sequencing . BMC Bioinformatics, 2020. DOI

Oak builds longitudinal molecular profiles of individuals: whole-genome sequencing, blood RNA sequencing, and plasma proteomics, delivered as a detailed report plus every data file. Build your profile.