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.
Try it
Section titled “Try it”Why vcfkit
Section titled “Why vcfkit”Three things the existing tools don’t give you together:
- Measurably fast. On 1000 Genomes chr22 (1.1M variants),
filteris 4.0× faster than bcftools andnormalize --fastis 4.1× faster. Standardnormalizeis 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.
Benchmarks
Section titled “Benchmarks”| 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 →
Install
Section titled “Install”cargo install vcfkit-cli # installs the vcfkit binaryPre-built binaries on the releases page.
Quick usage
Section titled “Quick usage”# Normalize: left-align indels, split multi-allelic sitesvcfkit normalize -f reference.fasta input.vcf > normalized.vcf
# Liftover: convert coordinates between buildsvcfkit liftover -s hg19.fa -t hg38.fa -c hg19ToHg38.over.chain.gz input.vcf > lifted.vcf
# Filter: keep variants matching an expressionvcfkit filter -e "INFO/AF < 0.01 && FILTER == 'PASS'" input.vcf > rare.vcf
# Compose with pipescat input.vcf | vcfkit normalize -f ref.fa | vcfkit filter -e "QUAL > 30" > output.vcfIs 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.