All notable changes to SNPick are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.0.2 - 2026-07-18
Filtering & selection
- Per-site filtering:
--max-missing,--mac,--maf,--min-samples,--max-alleles. Filtered sites stay variable (never re-enterfconst), so ASC correction remains valid. --keep-samples/--exclude-samples(comma-separated IDs or@file) subset the panel before the scan, sofconstis recomputed for the retained samples.--mask <BED>(and--mask-ref) excludes regions from both the output andfconst.
Coordinates & references
--reference <ID>chooses the REF/polarity sequence and the VCF##reference.--ref-coordswrites VCFPOSas ungapped reference positions.--sites-output <TSV>maps each site's alignment column to its reference position.
I/O & formats
- Transparent gzip/bgzip input, plus stdin (
-f -) and stdout (-o -) streaming. --format {fasta,phylip,nexus}for the reduced alignment.--stats-json <FILE>(or-) writes a typed JSON run summary with thefconstarray.
Robustness & QC
--dry-run(stats only) and--check(composition audit) exit without writing.--on-invalid {ignore,warn,error}guards against non-nucleotide input.--iupac-mode resolveoptionally resolves IUPAC codes to their bases.- Empty/duplicate sequence IDs are rejected (
--allow-dup-idsto permit). -v/-vvdiagnostics; distinct exit codes (2bad input,1I/O).
Threading & VCF
-t, --threads <N>pins the Rayon thread pool (deterministic wall-clock; output is unaffected by thread count).--chrom <NAME>sets the VCFCHROM/##contigname (default1).-q, --quietsilences the[snpick]progress logs (errors still print).- A valid header-only VCF is written when
--vcfis requested but there are no variable sites, so pipelines declaring the.vcfoutput no longer break.
Packaging
- Published as a reusable Rust library crate, with Python (pyo3/maturin) and WebAssembly bindings, and Docker/Apptainer container recipes.
- Silent SNP loss when a single-line FASTA record contained a blank line: such records were read with misaligned byte offsets. They now use the newline-skipping scanner.
- Gap reference bases produced an invalid VCF
REFof-under--include-gaps; theREFis now rendered asN(a valid VCF base). ALT gaps stay*(the snp-sites convention), soREFandALTgap encodings differ by design. - All-gap columns were tallied in no category under
--include-gaps, breaking the reportedvariable + constant + ambiguous == lengthinvariant. - Bare output filenames (
-o snps.fasta, no directory) were rejected during path resolution, breaking the documented quickstart. - The release workflow's "tag already exists" guard was never read, so merges without a version bump re-published over existing tags.
- The README's pre-built binary download command pointed at an asset name the release never publishes (404).
- VCF data rows are assembled in a reused byte buffer instead of one formatted write per genotype field — a large speedup on many-sample inputs. Output is byte-identical.
1.0.1 - 2026-03-31
- First Bioconda release.
- Cross-platform Build & Release CI workflow (Linux/macOS, x86_64/aarch64).
- README overhaul and benchmarks.
1.0.0 - 2024-11-16
- Initial release: zero-copy memory-mapped extraction of variable sites from
FASTA alignments, optional VCF v4.2 output, and ASC
fconstreporting.