This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Tool: vareffect — a Rust-based variant effect predictor that replaces VEP

Hey everyone,

for a platform me and my team are building we eventually hit a wall with the performance of the Ensemble VEP Rest API. Self-Hosting was not an option due to the hard docker requirement.

As a consequence we started building a variant effect predictor in Rust internally only at first, but decided to make it open-source in the hope that more people will find it useful and can benefit from it.

The problem we ran into

VEP is slow, heavy, and painful to deploy. The Perl runtime, the 20GB+ cache download, the Docker container, the REST API rate limits, it's a lot of infrastructure for what is fundamentally a coordinate lookup + codon translation. For as system that's supposed to run as a desktop app or a lightweight on-premise deployment, requiring a VEP Docker sidecar was a dealbreaker. So we wrote a replacement from scratch in Rust. In general, ease-of-use was always a big focus too.\

What vareffect does

Given a genomic variant (chrom, pos, ref, alt), it returns:

  • Consequence terms (SO ontology — missense_variant, frameshift_variant, splice_donor_variant, etc.)
  • HGVS c. and p. notation
  • Impact (HIGH/MODERATE/LOW/MODIFIER)
  • Protein position, amino acids, codons
  • Exon/intron numbering
  • MANE Select / MANE Plus Clinical transcript identification
  • Ensembl VEP-compatible JSON output via to_vep_json()

It also includes an HGVS c. reverse mapper. Give it NM_000546.6:c.742C>T and it returns the genomic coordinates.

How it works

An accompanying CLI, vareffect-cli, lets you easily set everything up and create the necessary data files. It downloads them for you automatically too:

  • transcript_models.bin (~26MB) — 19,437 RefSeq transcripts (MANE Select + RefSeq Select), indexed with a COITree interval tree
  • GRCH38.bin (~3GB) — reference FASTA, memory-mapped.

No database. No Docker. No network calls. No Perl. Pure Rust, single crate, zero unsafe.

Concordance

I validated against the VEP REST API on 50,000 ClinVar GRCh38 variants (stratified: SNVs, deletions, insertions, complex indels). The VEP responses were stored as a ground truth TSV and vareffect was compared field by field:

Consequence concordance 99.38%

HGVS c. concordance 97.8%

HGVS p. concordance 97.7%

Impact concordance 99.8%

The remaining ~0.6% consequence mismatches are almost entirely edge cases in complex boundary-spanning deletions and rare transcript geometries. Every divergence is documented and categorized.

What it doesn't do

  • No plugin scores (REVEL, CADD, SpliceAI, AlphaMissense) — those are separate data sources, not consequence prediction
  • No regulatory region annotation
  • No structural variant support
  • No Ensembl transcript support (RefSeq only — MANE Select covers clinical use cases)
  • No GRCh37 (GRCh38 only for now)

In general, different transcripts and the GRCh37 reference build are on our roadmap, but doesn't have a high priority as of this moment.

Performance

~200,000 variants/second single-threaded on a laptop (M4-series Mac, release build). The CLI supports --threads for parallel VCF annotation. At 8 threads you're looking at ~1M variants/sec. For comparison, VEP REST processes ~15 requests/second (rate limited). VEP offline with cache is faster but still orders of magnitude slower. The performance is achieved by eliminating disk I/O reading the FASTA by using memory-maps.

Links

  • GitHub: vareffect
  • crates.io: cargo add vareffect
  • CLI: cargo install vareffect-cli
rust vcf hgvs variant-annotation vep

0 answers

No answers yet.

Log in to answer this question.