Skip to content
v0.1.5 — research preview

vcfkit

Fast VCF operations. In the CLI or the browser.

Normalize, liftover, and filter VCF files — measurably faster than bcftools on hot paths, validated against it on 1000 Genomes data, with a browser demo that never uploads your data.

4.1× normalize --fast
·
4.0× filter
·
vs bcftools on 1.1M variants

Three things the existing tools don’t give you together:

  • Measurably fast. On 1000 Genomes chr22 (1.1M variants), filter is 4.0× faster than bcftools and normalize --fast is 4.1× faster. Standard normalize is currently 2.3× slower (see benchmarks for why).
  • Honest about limitations. Differential tests run against bcftools on real data. Known deviations are documented.
  • Browser-native. The same Rust core runs in the CLI and in this page. Your VCF never uploads anywhere.
Operation vcfkit bcftools Speedup
filter -e 'INFO/AF < 0.01' 422 ms 1,695 ms 4.0×
normalize --fast --no-split 682 ms 2,820 ms 4.1×
normalize (standard, with noodles) 6,481 ms 2,820 ms 0.43×
liftover 6,713 ms ~164K rec/s

1000 Genomes chr22, 1,103,547 variants · macOS aarch64 · bcftools 1.23.1 · full methodology →

Terminal window
cargo install vcfkit-cli # installs the vcfkit binary

Pre-built binaries on the releases page.

Terminal window
# Normalize: left-align indels, split multi-allelic sites
vcfkit normalize -f reference.fasta input.vcf > normalized.vcf
# Liftover: convert coordinates between builds
vcfkit liftover -s hg19.fa -t hg38.fa -c hg19ToHg38.over.chain.gz input.vcf > lifted.vcf
# Filter: keep variants matching an expression
vcfkit filter -e "INFO/AF < 0.01 && FILTER == 'PASS'" input.vcf > rare.vcf
# Compose with pipes
cat input.vcf | vcfkit normalize -f ref.fa | vcfkit filter -e "QUAL > 30" > output.vcf

Is this a replacement for bcftools? No. vcfkit does three operations; bcftools does forty. Think of it as a fast companion for the operations most pipelines use most.

Does the browser demo upload my data? No. The Rust core is compiled to WebAssembly and runs in your browser tab. See Privacy.

Is it safe for clinical use? No. Research use only. See the status banner in the README.

How was it built? Rust, noodles, and significant AI assistance from Claude with every change human-reviewed and validated against bcftools. See Credits.