The problem: I have a VCF file, a reference genome, and a bunch of annotations for the reference (genes, repeat regions, etc.) as GFF or BED files.

What I would like is a tool that takes all of this as input and outputs a tab- or comma-delimited table containing as much information as possible. Potential columns in the output include:

  1. Type of variant (SNV, structural, etc)
  2. Details of variant (e.g. reference base, variant base, coverage, position, etc)
  3. Annotations overlapping variant
  4. Annotations near variant (e.g. is it just upstream of a gene)
  5. If it appears in a coding region, does it change the amino acid.

There are many tools that do something like this. But to the newbie (like me) it is not clear which tools are worth starting with. Since the majority of tools take a little effort to get working in the first place, my question is:

What tool comes closest to doing what I have described, is known to reliable, and is likely to be maintained for the next few years.


3 Answers 3


I have used FEATnotator and I think it can provide all of the columns you would like to see. There are many output files generated, but the consolidated output has the following columns:

  • Chromosome
  • Position
  • Column_3
  • Consensus_Allele
  • Annotation_Signature
  • Reference_Base
  • Alternate_Base
  • Transition/Transversion SNP_Type
  • Premature_STOP_Gained STOP_Lost
  • InterGenic
  • Gene_Body
  • Intron
  • Exon
  • Coding
  • UTR
  • Transcription_Start_Site
  • Nearest_gene
  • Distance

here is some example output records from using a VCF, reference genome and GFF annotation file (sorry about the crappy formatting...there are a lot of fields!):

Chr01   28177   T       G       NA      T     G TRANSVERSION    NA      NO      NO      NO      NO      NO      YES     NO      NO      NO      NO      NO      NO      Eucgr.A00211.v2.0       16054
Chr01   44876   C       G       gene:Eucgr.A00211.v2.0   mRNA:Eucgr.A00211.1.v2.0[intron]       C       G       TRANSVERSION    NA      NO      NO      NO      NO      NO      NO      YES     YES     NO      NO      NO      NO      NA  NA
Chr01   46819   A       G       gene:Eucgr.A00211.v2.0   mRNA:Eucgr.A00211.1.v2.0   CDS:Eucgr.A00211.1.v2.0.CDS.4[AAA - K => GAA - E (MISSENSE)]   exon:Eucgr.A00211.1.v2.0.exon.4      A       G       TRANSITION      MISSENSE        NO  NO       NO      NO      NO      NO      YES   NO        YES     YES     NO      NO      NA      NA

Hail might be an option for you.

It is actively developed by a growing team at the Broad. It is rigorously tested (continuous integration, continuous deployment, bug reports get regression tests, blah blah blah).

It was designed to solve this problem (among others). It can import a variety of formats, including VCF, TSV, UCSC BED, JSON and interval files. (We don't have explicit support for GFF, but we can probably handle them with general facilities. If not, get in touch and we'll add support.) It can call out to VEP (and soon Nirvana, Illumina's VEP rewrite). It has general facilities to transform, filter, clean and query data.

What's more, we've curated a large collection of annotation resources (currently ~22 databases of annotations + VEP), hosted in a public bucket in Google cloud, and built an interactive query builder to select which resources you want to use. Get in touch if you'd like us to add additional resources. You can read more about it here.

Disclaimer: I work on Hail.

  • 1
    $\begingroup$ I've left the accepted answer as FEATnotator, just because this appears to do exactly what I asked in the question. But I wanted to say thanks for letting me (us?) know about Hail, which certainly sounds extremely useful. The active development and openness to feature requests is a huge plus. $\endgroup$
    – roblanf
    Commented Aug 15, 2017 at 5:31

snpEff is a great tool for annotating VCF files and you can add custom reference sequences.


Guide to add custom annotation files in snpEff


There are a bunch of pre curated annotation datasets available in their database.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.