>jane*

Sequencing

Variant Calls

Open a VCF and read it as variant calls rather than as text: a table with typed INFO fields, per-sample genotypes, and htslib’s own allele classification, next to the summary sections bcftools stats prints for the same file. Filter by contig, type, FILTER, QUAL or which sample carries the call, and the filter decides what the table shows, what an export writes and what the map draws — never three different answers. Give it a .vcf.gz with its .tbi or .csi and it reads by locus, decompressing only the blocks that region touches. Click a row to select that variant on your sequence, or apply the ALT with the REF checked against the bases first.

Real call sets read as a variant table: typed INFO, per-sample genotypes, the bcftools summary numbers, and one set with the reference genome it was called against

01

What it does

  1. 01A real variant table: CHROM, POS, ID, REF, ALT, QUAL, FILTER, the allele type, and every INFO field the header declares as an optional column
  2. 02Per-sample genotype columns, switched on when you want them — a cohort file opens readable rather than 1,233 columns wide
  3. 03Allele classification by htslib rules, so SNV / MNV / indel / other agree with the bcftools numbers you check against
  4. 04A Summary view with the sections bcftools stats prints: SN counts, Ts/Tv, the substitution matrix, indel length distribution, per-contig totals, FILTER and QUAL breakdowns
  5. 05A Samples view with the per-sample counts: hom-ref, het, hom-alt, singletons, missing
  6. 06Filters that run in the engine, not in the table: contig, variant type, PASS only, minimum QUAL, multiallelic only, carried-by-sample — so the table, the exports and the map track can never disagree
  7. 07Region reads over a bgzipped VCF with its .tbi or .csi index: only the blocks a locus touches are decompressed, and the readout always says whether you are looking at a region or the whole file
  8. 08Clicking a row selects that variant on the focused sequence editor; a position outside the sequence is refused rather than clamped
  9. 09Apply a variant to the sequence, with the REF checked against the bases first — a mismatch refuses and names what it found
  10. 10Three exports: a filtered VCF, a TSV of the table, and a BED of the intervals
  11. 11The same component draws the stage tab and the file-manager preview, so the two can never drift
02

What it runs on

Line and header parsing is @gmod/vcf 7.0.10, the maintained spec-tracking reader. Allele classification is a faithful TS port of htslib bcf_set_variant_type, and the summary sections are a port of bcftools vcfstats.c — no npm package defines those the way bcftools does, and a different definition would make every number disagree with the output users compare against. 199 tests: byte-for-byte against the real htslib C, the indexed path against the whole-file path, and a cross-check against scikit-allel. Range reads go through @gmod/tabix. The panel runs on @ports/variant-lookup, @ports/vcf.

Everything runs client-side. Files are parsed in the browser and projects are saved on this machine, so an unpublished sequence is never uploaded.

03

Questions

Do the numbers match bcftools stats?
That is the point of porting the C rather than reimplementing it. The tallies follow the upstream rules that are easy to get wrong from first principles: a site counts into every type its alleles carry rather than one, classification trims the common suffix as well as the prefix (so REF=CTCC ALT=CCC is a 1 bp deletion, not "other"), a transition is exactly A↔G and C↔T, and the per-sample hom-ref/het/hom-alt counts cover SNV sites only — a caveat bcftools prints and most reimplementations drop.
Can it open a whole-cohort VCF?
With its index, yes. Give it the .vcf.gz plus the .tbi or .csi and enter a locus: only the BGZF blocks that region touches are decompressed, so the file is never ingested whole. Without an index the file is read entirely, which is right for a per-gene or per-plasmid call set.
If I query a region, do the summary numbers describe the file?
No, and the readout says so. Statistics computed from a region describe that region, and the region is echoed back next to them — a Ts/Tv ratio labelled as a file’s when it came from one gene is exactly the kind of quiet error this app refuses to make.
Can I apply a call to my sequence?
Yes, and the REF is checked against the bases first. A mismatch refuses and names what it found there, because a call from a different assembly applied silently is a corrupted construct that looks fine. An offset is available for when the open sequence is a slice of the contig the calls belong to.
Is BCF supported?
No. BCF is the binary encoding and no JavaScript reader for it exists — porting one is a real project, so a .bcf is refused at the import gate rather than accepted and failing later. This is registered as an open gap, not quietly absent.
Is my file uploaded anywhere?
No. It is parsed in the browser from the copy stored in your project.

Also searched as

VCF viewer online · open a VCF file in the browser · read variant calls without bcftools · vcf stats ts tv ratio · view genotypes per sample · filter VCF by QUAL and FILTER · convert VCF to BED · tabix region query in the browser · open a VCF file online · free VCF viewer · IGV alternative for variants · bcftools stats in the browser · genotype table viewer