Changes in version 0.9.0 (2026-10-16) - Initial CRAN submission. Reading and storage - read_vcf() reads plain or gzip-compressed VCF files (including large DiscoSnp-RAD output) into a VCFArrow S4 object. Variant information is kept in memory; genotypes are written to disk as an 'Apache Arrow' dataset in chunks and read lazily, so datasets larger than memory can be processed. - set_vcf_groups() assigns samples to groups (populations); vcf_copy() makes an independent copy; vcf_gc() deletes the on-disk data of objects that are no longer referenced. - vcf_memory_estimate() estimates the memory an export needs, and vcf_suggest_chunk_size() suggests a chunk size for read_vcf() for the available memory. Filtering, subsetting and merging - Variant filters: vcf_filter_quality(), vcf_filter_pass(), vcf_filter_biallelic(), vcf_filter_indels(), vcf_filter_coverage(), vcf_filter_maf(), vcf_filter_hets(), vcf_filter_missingness(), vcf_filter_invariant(), vcf_filter_oneSNV() and vcf_filter_multiSNV() (SNV blocks), and, for DiscoSnp-RAD data, vcf_filter_rank(), vcf_filter_rpt() and vcf_filter_paralogs(). - Sample filters and subsets: vcf_filter_missing(), vcf_extract_samples(), vcf_extract_groups(), vcf_sub_SNVs() and vcf_sub_SNVs_stratified(). - vcf_filter_adr() corrects or removes genotypes with an extreme allele depth ratio (ALT / (REF + ALT)): they are changed to homozygous or set to missing. - vcf_bind() merges objects with the same or different samples, matching variants by CHROM, POS, REF and ALT, in "intersect" or "union" mode, with an ingroup/outgroup mode (outgroup = TRUE) and optional recovery of previously filtered loci (recover_loci = TRUE). vcf_bind_sparse() is a deprecated alias of vcf_bind(..., recover_loci = TRUE). Statistics and plots - vcf_stats() computes per-sample statistics (heterozygosity, missing data, depth) and, optionally, Watterson's theta and nucleotide diversity per group (vcf_theta()), accumulated chunk by chunk with little memory. - assess_vcf_missing_data() writes a table and plots of missing data per sample, and assess_vcf_coverage() plots of read depth per sample (PDF, PNG and SVG). Writing and conversion - write_vcf() writes plain or gzip-compressed VCF files. - Converters to the input formats of population-genetic and phylogenetic software: vcf2admixture(), vcf2apparent(), vcf2arlequin(), vcf2bayesass(), vcf2bayescan(), vcf2eigenstrat(), vcf2fasta(), vcf2fineradstructure(), vcf2genepop(), vcf2migrate(), vcf2nexus(), vcf2plink_bed(), vcf2plink_ped(), vcf2related(), vcf2smartsnp(), vcf2snapp(), vcf2snmf(), vcf2structure() and vcf2treemix(); vcf2gt_long() writes a long genotype table (CSV, feather or Parquet) and vcf2genlight() returns an 'adegenet' genlight object. Performance - vcf_set_workers() runs the per-chunk work of reading, filtering, statistics, merging and exporting on background R processes. Results do not depend on the number of workers. - Performance-critical steps (VCF parsing, per-sample counts, theta and pi, writers of the exported formats) are implemented in C++. Dependencies - 'adegenet' (for vcf2genlight()) and 'svglite' (for SVG plots) are suggested rather than imported; without 'svglite', SVG plots are written with R's Cairo device.