Fact-checked by Grok 2 weeks ago

Variant Call Format

The Variant Call Format (VCF) is a standardized, tab-delimited text file format widely used in bioinformatics to store and exchange genetic variation data, including single nucleotide polymorphisms (SNPs), insertions, deletions (indels), structural variants, and copy number variations, along with associated annotations and quality metrics relative to a reference genome. Developed in 2010 by the 1000 Genomes Project to facilitate the representation of human genetic variation across large-scale sequencing efforts, VCF has become a de facto standard adopted by numerous initiatives, such as UK10K, dbSNP, and the NHLBI Exome Project, and is now maintained by the Global Alliance for Genomics and Health (GA4GH) to support large-scale genomics initiatives, due to its flexibility, scalability for handling millions of variants from thousands of samples, and support for both diploid and non-diploid genomes. VCF files typically begin with metadata lines prefixed by "##" to describe file format version, reference genome, and custom fields, followed by a header line prefixed by "#" defining the columns, and then data lines each representing a single variant site. The core fixed columns include chromosome (CHROM), position (POS), variant identifier (ID), reference allele (REF), alternate allele(s) (ALT), quality score (QUAL), filter status (FILTER), and informational tags (INFO), with optional per-sample genotype data introduced via a FORMAT column. To address storage and retrieval efficiency, VCF files are often compressed using bgzip and indexed with tabix for rapid querying of specific genomic regions, while a binary counterpart, BCF version 2, provides further optimization for computational pipelines. The format's extensibility allows for symbolic alleles (e.g., for deletions) and specialized notations for complex rearrangements, ensuring compatibility with evolving genomic analyses, as reflected in its latest specification, version 4.5, released in October 2024.

Overview

Purpose and Scope

The Variant Call Format (VCF) is a standardized, TAB-delimited text file format designed for efficiently storing and describing genetic variants identified from high-throughput sequencing data, including single nucleotide polymorphisms (SNPs), insertions, deletions (indels), structural variants, and copy number variations. Its primary purpose is to facilitate the seamless exchange, storage, and analysis of genomic variation data across diverse bioinformatics tools, pipelines, and research consortia, thereby promoting interoperability in large-scale genomic studies. VCF supports both single-sample and multi-sample files, accommodating phased genotypes (indicating information) as well as unphased genotypes (representing diploid calls without ). Originating from the in 2010, the format was developed to standardize the representation of variant calls in population-scale sequencing efforts. Key benefits of VCF include its human-readable structure, which allows direct inspection without specialized software, and its extensibility through metadata fields that enable the inclusion of custom annotations and quality metrics. Widely adopted in bioinformatics, VCF has become a for variant data in projects ranging from clinical to evolutionary studies, with a compressed binary counterpart (BCF) available for more efficient storage and querying.

Basic Components

The Variant Call Format (VCF) file is structured as a tab-delimited divided into two primary sections: the header and the body. The header encompasses all lines beginning with "##" for meta-information and a single line starting with "#CHROM" to define the column structure, while the body consists of all subsequent non-header lines representing individual variant records. This organization enables efficient storage and parsing of genomic variation data in a standardized manner. The header plays a crucial role in providing essential that contextualizes the file's contents, including the VCF , contig sequences with their lengths for coordinate , sample identifiers, and definitions for custom fields. These elements ensure across bioinformatics tools by specifying how to interpret genomic positions and associated annotations without embedding such details in each data line. For instance, contig information outlines the reference genome's structures, while sample names delineate the genotype columns for multi-sample files. In contrast, the body contains the core data, with each line detailing a genetic at a precise genomic locus, including and alternate alleles, quality metrics, filter statuses, and optional calls for listed samples. This section lists variants in ascending order by position within each contig, facilitating sequential processing in downstream analyses such as or clinical reporting. VCF's structure supports its widespread use in workflows for variant discovery and interpretation. A minimal VCF skeleton illustrates this division, featuring meta-information for the file format and a contig, followed by the column header and one example data line:
##fileformat=VCFv4.5
##contig=<ID=20,length=62435964>
#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	sample1	sample2	sample3
20	14370	rs6054257	G	A	29	PASS	NS=3;DP=14;AF=0.5;DB;H2	GT:GQ:DP:HQ	0|0:48:1:51,51	1|0:48:8:51,51	1/1:43:5:.,.
Here, the "##" lines form the meta-information portion of the header, the "#CHROM" line completes the header by naming the fixed columns (CHROM for chromosome, POS for 1-based position, ID for variant identifier, REF for reference allele, ALT for alternate allele, QUAL for phred-scaled quality, FILTER for pass/fail status, and INFO for annotations), followed by FORMAT and sample columns. The body line provides a sample variant entry for three individuals.

History and Development

Origins

The Variant Call Format (VCF) was initially proposed in 2010 by the International as a standardized approach to storing genetic variants, driven by the rapid growth of high-throughput sequencing data that demanded efficient, interoperable data management. This effort addressed the challenges of handling millions of variant sites across thousands of samples in large-scale human genomics studies. Key development contributions came from leading institutions involved in the 1000 Genomes Project, including the EMBL European Bioinformatics Institute, the Wellcome Trust Sanger Institute, and the Broad Institute, with the first formal specification documented as VCF version 4.0. Prominent researchers such as Richard Durbin, Mark A. DePristo, and Gonçalo Abecasis played central roles in defining the format's structure and guidelines. The primary motivation for VCF was to establish a flexible, tab-delimited textual format that could accommodate diverse variant types—including single nucleotide polymorphisms (SNPs), insertions, deletions, and structural variants—while replacing fragmented ad-hoc file formats prevalent in genomic research at the time. This design emphasized extensibility for annotations and compatibility with existing tools, facilitating data sharing and analysis in collaborative projects. Early adoption of VCF occurred swiftly following its introduction, with integration into major analysis pipelines such as the Genome Analysis Toolkit (GATK) from the Broad Institute and from the Wellcome Trust Sanger Institute by 2011, enabling widespread use in variant calling and processing workflows.

Version Evolution

The Variant Call Format (VCF) originated within the , with its initial specification version 4.0 released in 2010. Version 4.1 followed in 2013, incorporating minor fixes and clarifications to improve consistency and usability in variant data representation. In 2014, VCF 4.2 introduced enhanced support for structural variants, including better encoding of complex rearrangements and symbolic alleles to accommodate larger genomic alterations. The 4.3 specification, released in 2017, added provisions for phased data, enabling more precise representation of information across samples. Version 4.4, published in 2021, refined alternative descriptions and expanded options for structural variant annotations, such as notations and event types. Most recently, VCF 4.5 was issued in October 2024, with improvements to metadata structures and contig definitions to better support diverse reference genomes and sequencing technologies. Since 2013, the VCF specification has been maintained under the HTSlib and project on , transitioning to that incorporates community input through issues, discussions, and pull requests. This collaborative model, now overseen by the Global Alliance for Genomics and Health (GA4GH) Large Scale Genomics work stream, has driven iterative refinements while ensuring broad adoption. Key milestones include the 2013 shift to GitHub-hosted development, which democratized contributions, and the progression to version 4.5 as the current stable specification as of November 2025. Each version preserves with earlier iterations, allowing existing VCF files to remain valid, though deprecations—such as certain field usages—are explicitly documented to guide migrations.

Textual Format Structure

Header Lines

The header section of a textual Variant Call Format (VCF) file consists of meta-information lines prefixed with "##", followed by a single column header line prefixed with "#CHROM". These lines precede the data records and provide essential metadata about the file's format, , and custom fields, enabling parsers to interpret the subsequent variant data correctly. The mandatory elements include the file format version line, which must be the first meta-information line and specifies the VCF version in the form "##fileformat=VCFvX.Y", where X.Y denotes the major and minor version numbers (e.g., VCFv4.5). Additionally, the column header line is required and must start with "#CHROM" followed by tab-separated fixed columns—POS, ID, REF, ALT, QUAL, , INFO—and, if sample genotypes are present, optional sample columns appended thereafter. This header line defines the structure of all data records in the file. Optional meta-information lines allow for additional details, such as "##contig=<...>" to describe sequences (e.g., chromosome identifiers and lengths), "##" to indicate the genome build (e.g., GRCh38), "##SAMPLE" for sample like individual IDs or phenotypes, and "##ALT" to define types of alternate alleles (e.g., deletions or symbolic variants). Other common optional lines include "##" and "##" for custom field definitions, as well as lines for file source, date, or details. These elements enhance but are not required for basic compliance. Meta-information lines follow specific syntax rules: simple directives use "##KEY=VALUE" (e.g., "##fileformat=VCFv4.5"), while structured definitions employ "##KEY=<TAG1=val1,TAG2=val2,...>" with comma-separated key-value pairs enclosed in angle brackets. For fields like INFO, FORMAT, FILTER, and ALT, mandatory tags include ID (unique identifier), Number (expected number of values, such as 1, A for alleles, R for references, G for genotypes, or . for variable), Type (Integer, Float, Flag, Character, or String), and Description (a quoted string explaining the field). Special characters in values, such as commas, semicolons, equals signs, or double quotes in descriptions, must be escaped—commas and semicolons with backslashes, and double quotes within descriptions with "—to prevent parsing errors. Unstructured lines can use "##KEY=free text" for arbitrary metadata. The following example illustrates a typical header snippet for a VCF file aligned to the human reference genome:
##fileformat=VCFv4.5
##fileDate=20241109
##reference=GRCh38
##contig=&lt;ID=1,length=248956422&gt;
##contig=&lt;ID=2,length=242193529&gt;
##ALT=&lt;ID=DEL,Description="Deletion relative to the reference"&gt;
##INFO=&lt;ID=DP,Number=1,Type=Integer,Description="Total read depth at this position"&gt;
##INFO=&lt;ID=AF,Number=A,Type=Float,Description="Allele frequency for each alternate allele"&gt;
##FORMAT=&lt;ID=GT,Number=1,Type=String,Description="Genotype, encoded as allele values separated by either of / or |"&gt;
##FORMAT=&lt;ID=DP,Number=1,Type=Integer,Description="Read depth at this position for this sample"&gt;
#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	SAMPLE1	SAMPLE2
This structure ensures the header provides a self-describing blueprint for the file's contents.

Data Record Lines

The body of a Variant Call Format (VCF) file consists of data record lines that describe genetic variants at specific genomic positions. These lines are TAB-delimited, lack the "#" prefix found in header lines, and each represents a single variant site, potentially with multiple alternative alleles. The number and order of columns in these lines are defined by the header, with fixed core columns followed by optional sample-specific . Variant types are encoded using the () and () allele columns. For single nucleotide polymorphisms (SNPs) or substitutions, both REF and ALT specify single bases, such as REF=A and ALT=T. Insertions are represented with the reference base preceding the insertion in REF and that base plus the inserted sequence in ALT (e.g., REF=A and ALT=AT for insertion of T after a reference A), while deletions use a REF sequence longer than the corresponding ALT (e.g., REF="AT" and ALT="A"). These conventions allow compact representation of small structural variants without explicit type tags. In sample columns, which contain genotype data for individuals or samples, phasing information is indicated by separators between alleles. The "|" symbol denotes phased genotypes (e.g., 0|1, indicating one haplotype carries the reference allele and the other the alternate), while "/" indicates unphased genotypes (e.g., 0/1, where the alleles are not linked to specific haplotypes). This distinction supports downstream analyses requiring haplotype resolution. Multi-allelic variants, where multiple alternate alleles exist at the same site, are handled by listing them in the ALT column separated by commas (e.g., ALT=G,T for two possible substitutions). Each data record thus captures biallelic or polyallelic complexity at one position, with genotypes in sample columns referencing these alleles by index (0 for REF, 1 for the first ALT, etc.). The following is an example of a data record line for a SNP, assuming a header has defined the columns (sample data adapted from the specification for illustration):
20	14370	rs6054257	G	A	29	PASS	NS=3;DP=14;AF=0.5;DB;H2	GT:GQ:DP:HQ	NA00001	NA00002	NA00003	0|0:48:1:51,51	1|0:48:8:51,51	1/1:43:5:.,.
This line describes a G-to-A substitution at position 14370 on chromosome 20, with phased and unphased genotypes across three samples.

Column Definitions

The Variant Call Format (VCF) data lines consist of nine fixed columns followed by variable columns for sample-specific data. The first column, #CHROM, specifies the chromosome or contig identifier as a string without whitespace. The second column, POS, indicates the 1-based reference position as a required integer, with positions sorted numerically across the file. The third column, ID, provides semicolon-separated unique variant identifiers, such as dbSNP rsIDs (e.g., rs6054257), using a string without whitespace or semicolons, or "." if unknown. The fourth column, REF, denotes the reference allele(s) as a string of bases (A, C, G, T, N, case-insensitive, or IUPAC ambiguity codes). The fifth column, ALT, lists comma-separated alternate allele(s) as strings, which may represent bases (A, C, G, T, N, case-insensitive, or IUPAC ambiguity codes), the "." for no alternate alleles, or symbolic notations (e.g., <DEL> for deletions). The sixth column, QUAL, reports the Phred-scaled quality score of the assertion made in ALT as a float, or "." if unknown. The seventh column, FILTER, indicates the filter status as a string: "PASS" if the variant passes all filters, semicolon-separated custom terms if it fails specific ones, or "." if unfiltered. The eighth column, INFO, contains semicolon-separated key-value annotations for additional variant information, or "." if none. Following the fixed columns, the ninth fixed column, , appears only if sample data is present and describes the colon-separated order and types of fields in the subsequent sample columns. Variable columns then follow, one per sample, containing genotype and related data (e.g., for , for quality) in the order specified by , enabling multi-sample analysis. Key conventions govern these columns: POS must be a positive ; REF and ALT alleles are represented as strings using standard bases or IUPAC codes, with multiple bases allowed for indels; QUAL is a non-negative ; and terms are user-defined but must be declared in the header. Missing or undefined values in any column are denoted by ".", ensuring consistent parsing across tools. For illustration, consider this example data line from the VCF specification:
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5:.,.
ColumnValueDescription
#CHROM20Chromosome 20.
POS143701-based position on the reference.
IDrs6054257dbSNP identifier for the variant.
REFGReference base.
ALTAAlternate base (single nucleotide polymorphism).
QUAL29Phred-scaled quality score.
FILTERPASSVariant passes all filters.
INFONS=3;DP=14;AF=0.5;DB;H2Annotations: 3 samples (NS), total depth 14 (DP), allele frequency 0.5 (AF), common in dbSNP (DB), haplotype 2 (H2).
FORMATGT:GQ:DP:HQFields: genotype (GT), genotype quality (GQ), depth (DP), haplotype qualities (HQ).
Sample 10|0:48:1:51,51Homozygous reference (0|0), GQ=48, DP=1, HQ=51,51.
Sample 21|0:48:8:51,51Heterozygous phased (1|0), GQ=48, DP=8, HQ=51,51.
Sample 31/1:43:5:.,.Homozygous alternate (1/1), GQ=43, DP=5, missing HQ.

Metadata and Annotations

INFO Fields

The INFO fields in the Variant Call Format (VCF) provide site-level annotations for genetic variants, capturing metadata such as allele frequencies, read depths, and quality metrics in the eighth column of data records. These fields consist of semicolon-separated key-value pairs, where each key corresponds to a predefined identifier () declared in the file header, and values are encoded to handle special characters if necessary. All INFO fields must be explicitly defined in the VCF header using lines formatted as ##INFO=<ID=<identifier>,Number=<count>,Type=<data type>,Description="<description>">, with optional Source and Version attributes; the ID, Number, Type, and Description are mandatory for each entry. The Number specifies the expected number of values per field, such as 1 for a single scalar, A for one value per alternate allele (in the order listed in the ALT column), R for one per allele (reference first), G for one per possible genotype, . for unknown or variable length, or 0 for flags that carry no value. Supported Types include for whole numbers, for decimal numbers, for boolean indicators without values, for single characters, and for text sequences. In usage, INFO fields annotate variant properties across samples without per-sample granularity; for instance, vector-valued fields like those with Number=A produce comma-separated lists matching the ALT alleles, while flags (e.g., indicating indel status) appear without an equals sign or value. Duplicate keys are prohibited within a single record, and missing values are represented by a dot (.). All IDs used in the INFO column must have corresponding header declarations to ensure . The INFO column precedes the FORMAT column in data lines, providing global variant context before sample-specific details. Common INFO fields include allele-related metrics such as AC (allele count: total number of alternate alleles observed in genotypes, Number=A, Type=), AN (total number of alleles: total alleles in called genotypes, often 2×number of samples for diploids, Number=1, Type=), and AF (allele frequency: estimated frequency of each alternate allele, computed as AC/AN, Number=A, Type=). Depth and quality fields frequently encountered are DP (total depth: approximate total read depth across samples at the locus, Number=1, Type=) and MQ (mapping quality: root mean square mapping quality across samples, Number=1, Type=). Statistical tests for bias detection include (Z-score from the Wilcoxon rank sum test comparing base qualities of reads supporting reference versus alternate alleles, Number=1, Type=) and ClippingRankSum (Z-score from the Wilcoxon rank sum test comparing clipping counts—hard-clipped bases—in reads supporting reference versus alternate alleles, Number=1, Type=), both used to flag potential artifacts in variant calls. For example, a header might define ##INFO=<ID=DP,Number=1,Type=Integer,Description="Total read depth"> and ##INFO=<ID=AF,Number=A,Type=Float,Description="Allele frequency">, while a data line INFO string could appear as DP=100;AF=0.05,0.02;[INDEL](/page/Indel), where =100 indicates total depth, AF provides frequencies for two alternate alleles, and serves as a flag without a value.

FORMAT Fields

The FORMAT column in a Variant Call Format (VCF) file specifies the structure and order of per-sample genotype data, using a colon-separated list of tags (e.g., GT:AD:) that describe the fields provided for each sample. This column appears after the INFO column in the header line and data records of multi-sample VCFs, ensuring that the subsequent sample-specific columns contain values in the exact order defined by the FORMAT tags. The first tag must always be GT if genotype data is present, and the FORMAT definition is declared in the file's meta-information header using lines prefixed with ##FORMAT. Common FORMAT tags include GT for genotype, which represents the called alleles for each sample using numeric indices (e.g., 0/1 for an unphased heterozygous call where 0 is the allele and 1 is the first alternate allele, or 0|1 for a phased heterozygous call); the slash (/) denotes unphased data, while the pipe (|) indicates phasing information. AD denotes allelic depths, providing the total read depth for each allele (e.g., 10,20 for reference and alternate depths); indicates the total read depth at the locus for the sample; is the genotype quality, a Phred-scaled probability that the genotype call is incorrect (e.g., 30 meaning a 0.001 probability of error); and PL lists Phred-scaled likelihoods for all possible genotypes in the sample, ordered from most likely to least (e.g., 0,10,100 for genotypes 0/0, 0/1, and 1/1). Each FORMAT tag includes a Number and Type specification in its header definition, similar to INFO fields but applied per sample: Number can be 1 (one value per sample), R (one per allele, including reference), G (one per possible genotype; for diploid samples, this is (A+1)(A+2)/2 where A is the number of alternate alleles), or . (unknown/variable); Type is (whole numbers), (decimal numbers), (single printable ASCII character), or (free text). For multi-allelic sites with multiple alternate alleles in the ALT column, genotypes extend the indexing (e.g., 0/1/2 for a sample heterozygous for the first and second alternates, or 1|2 for phased). Missing values in any FORMAT field are denoted by a dot (.), such as ./.; for a missing genotype or 0/1:. for missing depth data, preserving the structure across samples. In a multi-sample VCF, the FORMAT column applies uniformly to all samples, with each sample's column providing colon-separated values matching the tag order. For example, a data line with FORMAT=GT:AD:DP:GQ:PL might have sample values like "0/1:10,20:30:99:0,10,100" for a heterozygous sample with 30 total reads (10 , 20 alternate), high-quality genotype call, and normalized likelihoods favoring the heterozygous state over homozygous or alternate.
#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	Sample1	Sample2
20	14370	rs6054257	G	A	29	PASS	NS=3;DP=14;AF=0.5	GT:AD:DP:GQ:PL	0/0:14,0:14:48:0,48,837	0/1:8,6:14:48:0,48,837
In this example, Sample1 is homozygous reference (GT=0/0) with all 14 reads supporting the reference allele, while Sample2 is heterozygous (GT=0/1) with balanced read support, both having maximum genotype quality and likelihoods reflecting the calls. Version 4.5 of the VCF specification, released in 2024, introduced enhancements for FORMAT fields, including new Number types such as P (one value per ploidy level) and M (one value per base modification), and support for encoding base modifications like (e.g., via tags such as M5mC).

Binary Format

BCF Encoding

The Binary Call Format (BCF) serves as the compressed binary counterpart to the textual Variant Call Format (VCF), enabling more efficient storage and of genomic variant data through block-based (BGZF) compression on the body while employing a custom binary header structure. BCF files typically use the .bcf extension and require complete specification of all INFO, FORMAT, and FILTER fields in the header to ensure unambiguous decoding, supporting a subset of VCF features with fully typed data elements. The current version, BCF2.2, aligns with VCF 4.5 and introduces enhancements such as an explicit END OF VECTOR byte for variable-length fields and an IDX field for certain annotations. The BCF header begins with a fixed magic string "BCF" followed by two uint8_t bytes indicating the major and minor version numbers (e.g., 2 and 2 for BCF2.2), ensuring compatibility checks during file reading. A uint32_t specifies the length of the subsequent NUL-terminated textual header, which mirrors the VCF header lines (from ##fileformat to the column header #CHROM), providing like contig definitions and field descriptions. Following this, a of strings maps IDs to values for elements like names, REF/ALT alleles, FILTER statuses, and / keys, while a separate contig section defines sequence identifiers, lengths, and optional sums or URLs, all serialized in length-prefixed binary format to facilitate compact referencing in records. The body of a BCF file consists of contig-ordered blocks of variable-length records, each compressed within BGZF blocks for seekable access, with the file terminating in an empty block. Each record is divided into a shared site section (encoding common data like position and alleles) and an optional individual section (for per-sample genotypes), prefixed by two uint32_t lengths indicating the size of each in bytes. The shared section includes the ID (int32_t dictionary offset), 0-based (int32_t), reference length rlen (int32_t), QUAL score (float32), a uint32_t combining allele and counts (n_allele << 16 | n_info), followed by encoded ID, REF+ALT strings (as concatenated length-prefixed ASCII or dictionary indices), FILTER vector (uint16_t indices, with 0 denoting PASS), and key-value pairs. In the individual section, a uint32_t combines FORMAT and sample counts (n_fmt << 24 | n_sample). Data elements use a typed encoding scheme where a typing byte's low 4 bits specify the atomic type (1=int8_t, 2=int16_t, 3=int32_t, 5=float, 7=char), implying the size, and high 4 bits the number of elements (0-15, with 15 followed by an int32_t length for longer vectors), with missing values represented by special codes like 0x80 for int8; variable-length vectors are padded with an END OF VECTOR marker (e.g., 0x02 0x80 for int16). In the individual section, per-sample data for FORMAT fields like GT (genotype alleles as integer indices, encoded as typed integer arrays with each allele represented by an integer value ((allele+1)<<1 | phased), typically two per sample with 0 for reference) and others (e.g., DP for depth, GQ for quality) are stored as typed arrays. Alleles reference the shared REF/ALT list via indices, and lengths for per-sample vectors are implicit from the header's maximum definitions, enabling compact representation without explicit delimiters beyond the type encoding. Conversion between VCF and BCF is facilitated by tools in the HTSlib suite, such as bcftools view -O b to generate a BCF from VCF input, preserving compatibility through shared indexing schemes like CSI (.csi) or tabix (.tbi) for random querying. This bidirectional support ensures BCF files can be processed interchangeably with VCF in pipelines while benefiting from reduced file sizes and faster I/O.

Compression Mechanisms

The Binary Call Format (BCF) employs several compression strategies to minimize file size while maintaining efficient access for large-scale genomic datasets. The primary mechanism is BGZF, a block-based extension of zlib compression applied to the body of the file containing variant records. This allows for parallel decompression and random access without full file loading, similar to its use in BAM files. The header, which embeds the original VCF metadata, remains uncompressed. Integer fields are encoded compactly to exploit the sorted nature of BCF records. The position (POS) field is stored as an absolute 0-based int32_t. Allele representations (REF and ALT) are stored as typed strings, which may reference a shared string dictionary via integer indices if the alleles match dictionary entries, avoiding repetition of common sequences; short or unique strings are stored directly as length-prefixed byte arrays. Genotype data is stored as typed integer vectors for each FORMAT field, with two integers per diploid sample for GT (one per allele). String and array fields in INFO and FORMAT are handled as typed blocks, with compression provided by BGZF. This is particularly effective for repetitive annotations or uniform quality scores. Keys and values in INFO use dictionary offsets for common terms (e.g., "PASS" for FILTER as index 0). Indexing further enhances performance on compressed files. The Coordinate-Sorted Index (CSI) provides a binary structure for BCF, enabling queries over genomic intervals without decompressing the entire file, while Tabix Index (TBI) supports similar functionality for BGZF-compressed VCF equivalents. These indices facilitate subset retrieval, yielding substantial benefits for large files; for instance, BCF achieves over 90% size reduction compared to uncompressed VCF, with a typical single-record encoding of 96 bytes versus hundreds in text format. Despite these efficiencies, BCF trade-offs include dependency on specialized tools like or for decoding, as the binary structure is not human-readable like VCF. For a dataset with 1 million variants and modest sample counts, BCF files are typically 4-10 MB, compared to 50-100 MB uncompressed VCF or 10-20 MB gzipped VCF, balancing storage savings with faster sequential access at the cost of initial conversion overhead.

Specifications and Extensions

Version-Specific Features

The Variant Call Format (VCF) has evolved through several major versions, each introducing targeted enhancements to support advanced genomic analyses while maintaining core compatibility. Version 4.2, released in 2012, marked a significant expansion for representing structural variants by introducing symbolic alleles in the field, such as <INS> for insertions and <DEL> for deletions, which allow compact notation without specifying exact sequences for large events. This version also formalized the notation for complex rearrangements, using bracketed strings like chr2:1234[p[ in ALT to denote breakpoint orientations and mate positions, accompanied by INFO tags such as MATEID and EVENT to link related records. Version 4.3, published in 2017, refined phasing and multi-allelic representations to better accommodate data from population studies. It introduced the (Phase Set) tag in the FORMAT field as a non-negative to group phased genotypes across sites on the same chromosome, enabling efficient tracking of blocks without separate files. Additionally, it improved multi-allelic handling by allowing INFO fields like AC (Allele Count) and AF () to use Number=A for one value per alternate , and added FORMAT tags , , and for per-allele depth counts, facilitating precise allele-specific quality assessment. In version 4.4, released in , standardization efforts focused on variant spans and semantics for broader tool . The END tag was formalized as required for symbolic like <*> (representing unspecified non-reference alleles in gVCF blocks), defining the end position of the variant interval to support accurate indexing and querying. Alt allele semantics were enhanced with support for contractions/expansions via <CNV:TR> in ALT, using accompanying fields like RN (Repeat Name) and RUS (Reference Unit Sequence) to describe repeat units, while clarifying breakend parsing rules for colons in contig names. Version 4.5, finalized on October 9, 2024, emphasized structure and reference handling for modern assemblies and annotations. It extended contig with a tag (e.g., ##contig=<ID=chr1,URL=ftp://example/assembly.fa>), allowing direct links to sequence files for unambiguous reference resolution across diverse genomes. Nested was introduced in and headers via optional and Version keys (e.g., ##INFO=<ID=CLNSIG,Source="ClinVar",Version="20220804">), promoting traceable annotations, while deprecating legacy tags like (Ancestral Allele) in favor of structured alternatives and replacing END with SVLEN or :LEN for variant lengths. New support for base modifications (e.g., :M5mC for ) and Number=P (ploidy-matched values) further enables epigenomic integrations. VCF files declare their via the mandatory ##fileformat=VCFv4.x line in the header, enabling tools to detect and adapt to features dynamically. Most parsers, such as bcftools, maintain by ignoring unrecognized tags and defaulting to prior semantics (e.g., treating absent PS as unphased), though full utilization of later features requires version-aware processing. For illustration, consider a deletion structural variant evolving across versions. In VCF 4.1 or earlier, it might appear as a simple :
chr1	1000	.	AT		A	.	PASS	.	GT:AD	0/1:10,5
In 4.2, symbolic notation and END are added:
chr1	1000	.	N	<DEL>	.	PASS	SVTYPE=DEL;END=2000	GT:AD	0/1:10,5
By 4.3, multi-allelic depth refines it (if overlapping another variant):
chr1	1000	.	N	<DEL>,C	.	PASS	SVTYPE=DEL;END=2000	GT:AD:ADF:ADR	0/1:10,5:5,3:5,2
In 4.4, <*> could span non-variant blocks if gVCF-style:
chr1	1000	.	N	<DEL>,<*>	.	PASS	SVTYPE=DEL;END=2000	GT:AD	0/1:10,5
And in 4.5, metadata nesting and deprecation yield:
##INFO=<ID=SVTYPE,Number=1,Type=String,Description="SV type",Source="Custom",Version="1.0">
chr1	1000	.	N	<DEL>	.	PASS	SVTYPE=DEL;SVLEN=-1000	GT:AD	0/1:10,5
This progression highlights how versions build expressiveness without breaking core parsing. The Genomic VCF (gVCF) extends the standard VCF format to represent both variant and non-variant genomic sites efficiently, addressing the inefficiency of standard VCF in handling large reference-matched regions by encoding continuous blocks of non-variant sites with reference confidence intervals. In gVCF files, non-variant blocks are denoted using the reference allele in the ALT field alongside specialized INFO tags such as END for block boundaries and BP_RESOLUTION or MIN_DP for quality metrics, while variant sites retain standard VCF notation; this structure facilitates joint pipelines, such as GATK's GenotypeGVCFs tool, where multiple gVCFs are combined to produce a multi-sample VCF. gVCF builds directly on VCF's header and column structure, requiring only additional metadata in the FORMAT and INFO fields (e.g., GL for genotype likelihoods in blocks), and has become integral to scalable genomic analysis workflows. The VCF (hVCF) provides a hierarchical extension to VCF for representing phased variants, particularly in or multi-sample contexts where variants are organized across paths rather than linear coordinates. Developed for tools like the Practical Haplotype Graph (PHG), hVCF introduces fields such as HP (haplotype path) in the column to denote variant associations with specific haplotypes, enabling multi-level calls from to scales by nesting variants within structures; this addresses limitations in standard VCF for capturing and graph-based genomes without fragmenting data across multiple files. Like gVCF, hVCF adheres to core VCF syntax but extends it for hierarchical organization, supporting applications in crop genomics and beyond. Specialized VCF extensions for domain-specific data, such as immunogenetics and copy number analysis, leverage standard VCF's flexibility through custom and tags to encode additional annotations without altering the base format. For HLA typing in immunogenetics, VCF files incorporate HLA calls via tags like HLA_GT for genotypes and HLA alleles resolved from exonic variants, often generated by tools like HLA-LA or OptiType that output compliant VCFs for integration into broader variant datasets; this approach handles the high polymorphism of HLA loci while maintaining . Similarly, for copy number variants (CNVs), VCF uses predefined fields such as (copy number value), CNQ (phred-scaled copy number quality), and SVTYPE=CNV to represent segmental duplications or deletions, with END marking event boundaries; these extensions, formalized in VCF 4.2, enable precise CNV reporting in and contexts without requiring entirely new formats. As of 2025, gVCF has seen widespread adoption in cloud-based platforms, including Illumina's DRAGEN for scalable joint genotyping of large cohorts and GA4GH initiatives for VCF , enabling efficient storage and processing of whole-genome data in distributed environments by compactly representing non-variant regions. These related formats collectively mitigate VCF's gaps in density and hierarchy, enhancing efficiency in joint analysis and specialized applications while preserving .

References

  1. [1]
    The variant call format and VCFtools - PMC - NIH
    Summary: The variant call format (VCF) is a generic format for storing DNA polymorphism data such as SNPs, insertions, deletions and structural variants, ...
  2. [2]
    VCF+tabix Track Format - UCSC Genome Browser
    VCF is an all-purpose format for defining variants of all types: SNVs, CNVs and translocations relative to a reference assembly.
  3. [3]
    None
    Summary of each segment:
  4. [4]
    [PDF] The Variant Call Format (VCF) Version 4.2 Specification - Samtools
    It contains meta-information lines, a header line, and then data lines each containing information about a position in the genome. The format also has the ...
  5. [5]
    VCF - Variant Call Format - GATK - Broad Institute
    VCF, or Variant Call Format, It is a standardized text file format used for representing SNP, indel, and structural variation calls. The VCF specification used ...
  6. [6]
    [PDF] The Variant Call Format Specification - Samtools
    VCF is a text file format (most likely stored in a compressed manner). It contains meta-information lines (prefixed with “##”), a header line (prefixed with ...
  7. [7]
    [PDF] The Variant Call Format (VCF) Version 4.1 Specification - Samtools
    The master version of this document can be found at https://github.com/samtools/hts-specs. This printing is version 5a6f5e9 from that repository, last modified ...
  8. [8]
    [PDF] The Variant Call Format Specification - Samtools
    Oct 9, 2024 · VCF records use a single general system for representing genetic variation data composed of: • Allele: representing single genetic haplotypes (A ...<|control11|><|separator|>
  9. [9]
    samtools/hts-specs: Specifications of SAM/BAM and related ... - GitHub
    VCFv4.5.tex is the canonical specification for the Variant Call Format and its textual (VCF) and binary (BCF) encodings, while VCFv4.1.tex, VCFv4.2.tex, VCFv4.3 ...
  10. [10]
  11. [11]
    HTS format specifications
    ### VCF Specification Versions and Evolution
  12. [12]
    BaseQualityRankSumTest – GATK - Broad Institute
    Jul 30, 2024 · The base quality rank sum test can not be calculated for sites without a mixture of reads showing both the reference and alternate alleles.
  13. [13]
    ClippingRankSumTest – GATK
    This variant-level annotation tests whether the data supporting the reference allele shows more or less base clipping (hard clips) than those supporting the ...
  14. [14]
    bcftools(1) Manual Page - Samtools
    BCFtools is a set of utilities that manipulate variant calls in the Variant Call Format (VCF) and its binary counterpart BCF.
  15. [15]
    SeqArray—a storage-efficient high-performance data format ... - NIH
    Mar 16, 2017 · Benchmarks show file sizes ∼5× smaller than VCF and BCF and 35% smaller than the most storage efficient alternative (BGT). The SeqArray ...
  16. [16]
    bcftools - Samtools
    Sep 17, 2020 · BCFtools is a set of utilities that manipulate variant calls in the Variant Call Format (VCF) and its binary counterpart BCF.<|control11|><|separator|>
  17. [17]
    GVCF - Genomic Variant Call Format - GATK - Broad Institute
    GVCF stands for Genomic VCF. A GVCF is a kind of VCF, so the basic format specification is the same as for a regular VCF (see the spec documentation here).
  18. [18]
    GenotypeGVCFs - GATK
    Jun 13, 2023 · GenotypeGVCFs performs joint genotyping on samples pre-called with HaplotypeCaller, using single or multi-sample GVCF inputs, and outputs a ...Missing: specification | Show results with:specification
  19. [19]
    hVCF region handling - Practical Haplotype Graph
    For more information about this hVCF field and other general information about hVCF specifications, please review the haplotype VCF specification article.
  20. [20]
    Building and loading - Practical Haplotype Graph
    ... genomic variant call format data. ... For more information about the haplotype VCF (hVCF) specification, please refer to the hVCF specification documentation.
  21. [21]
    Terminology - Practical Haplotype Graph
    Sequence alignment to a reference sequence. .vcf, Variant Call Format, Genetic variant representation and storage. Software ...
  22. [22]
    Challenges for the standardized reporting of NGS HLA genotyping
    Here we report several categories of challenges to the consistent exchange of NGS HLA genotyping data we have observed.
  23. [23]
    Encoding Structural Variants in VCF (Variant Call Format) version 4.0
    Introduction. This web page describes the conventions and extensions adopted by the 1000 Genomes Project for encoding structural variations in VCF 4.0 format.Missing: origins | Show results with:origins
  24. [24]
    The scalable variant call representation: enabling genetic analysis ...
    The Variant Call Format (VCF) is widely used in genome sequencing but scales poorly. For instance, we estimate a 150 000 genome VCF would occupy 900 TiB, making ...<|separator|>
  25. [25]
    Scaling VCF for a genomic revolution - GA4GH
    Sep 8, 2023 · Scaling of VCF is important to maintain interoperability with other GA4GH standards, including htsget for downloading variation data from ...