Skip to content
chromosomix

chromosomix 0.3.0

What changed in chromosomix 0.3.0, released on 4 August 2026.

  • Tracks and annotations, on cool and mcool files. Three cards in the left sidebar, and everything they draw. See SPECS §8.

    Linear annotations takes one GTF or GFF gene model, any number of bigWig tracks, and any number of BED-like segment files (BED 3–12, narrowPeak, broadPeak). Each is drawn beside the map on the bottom edge, the right edge or both, with its own colour, height, style (line, area or bars), value scaling (linear or log2), and limits — auto, which rescales to what is on screen, or a pair of numbers. Tracks that share an autoscale group resolve to one range over everything they show, which is the only way two of them can be compared by eye.

    Map overlays takes BED-like files as marks on the diagonal — a box for an extent, a mark across the diagonal for a point call, which is the only shape that survives being zoomed out — and BEDPE-like files as circles off it. A headed table with chrom1/start1/end1/chrom2/start2/end2 counts as BEDPE, because that is what loop callers actually emit.

    Manual annotations takes vertical, horizontal and crossed lines, and arrowheads on or off the diagonal. Both are entered as coordinates or placed by clicking the plot, and both are stored in base pairs, so they survive a zoom, a pan and a change of resolution in an .mcool.

    Nothing drawn on the map fills the pixel it is about: loops are open circles, domains are outlines, and the arrowhead sits outside the cell it points at, on the far side from the diagonal — mirrored below it, so a mark placed while reading the upper triangle never points into the map from the lower one.

    Everything stays locked to the matrix because it is drawn through the matrix’s own coordinate scales; nothing here computes a second mapping. Panning and zooming perform no I/O, as they already did for the map: a track fetches a window half again as wide as the view at a resolution rounded to a power of two, and everything inside that redraws from memory. Zooming out averages through bigWig’s own zoom levels, and a feature lane with more features than pixels switches to a density profile rather than painting a solid bar. Hovering a lane names the feature or reads out the value; the crosshair continues from the map into every lane; exported PNGs and PDFs carry the lanes, redrawn at the export resolution.

    Contig names are checked on load and the overlap is always reported, in both directions — a GTF using chrI against a map using I is the most likely support question there is, and it presents as a broken feature rather than as two files disagreeing.

    Restricted to cool and mcool. On a .metacool the cards are absent, not disabled: a metagenome’s axis is contigs from thousands of independently assembled organisms, so a file keyed on contig names either coincides with it or misleads.

  • One click loads the ten tracks published beside the yeast micro-C map. Gene models, MNase, ATAC, Pol II ChIP-over-input, stranded RNA-seq, shotgun coverage, two peak sets and the loop calls — all on that map’s own assembly. Offered only when the map itself came from a URL, never for a local file that happens to share the name.

  • The tooltip says how far apart a contact is. Hover an off-diagonal cell within one chromosome or contig and it now reports the genomic distance between its two ends, which is the number a Hi-C map is actually read by. It is deliberately absent where there is no answer rather than shown as a large one: a trans cell has no distance along a sequence, and on the diagonal it is zero.

  • The tooltip names the genome, in the whole-genome view of a metacool. It led with the contig, which on a metagenome is the finer half of the answer and rarely the one you want first. The genome now leads and the contig sits under it; a cell between two genomes names both. The picture underneath is unchanged — the separators are still the contigs.

  • A fifth example: a yeast micro-C map at one resolution. Yeast_microC_G2M_1kb.cool — 16 chromosomes of synthetic yeast, 1 kb bins, 179 M contacts, balanced. It is the first single-resolution cooler in the picker, so it is also the choice that lands somewhere with no resolution ladder to pick from.

  • Ten track resources published beside it: MNase, ATAC, Pol II ChIP-over-input and stranded RNA-seq coverage, shotgun coverage, ATAC and Pol II peak calls, gene models, and the loop calls made on that map. They are not in the picker; the annotation cards above are what reads them. All ten are on the map’s own assembly rather than on R64 — same 16 contig names, same lengths, no coordinate off the end of a chromosome — which is the property to check before republishing any of them. See docs/deploy.md.

  • Works offline, and installs. After one visit the app runs with no network at all — reload included — and browsers offer to install it as a standalone window. The app is cached; the data never is, and requests for it reach the network untouched. A new build is offered as a reload rather than swapped in underneath you.

  • A desktop application, for machines that cannot reach the website. The same bundle packaged with Electron: a .dmg and a .zip for macOS (Apple Silicon and Intel), an NSIS installer for Windows, an AppImage and a .deb for Linux. It is a delivery channel and not a second feature set — it opens exactly the files the web build opens, in exactly the same way, with the same reader and the same privacy claim, and it never writes anything back. There is no auto-update: a new version is a new download. The first releases are unsigned, so macOS and Windows will each warn once before running it; docs/desktop.md gives both warnings verbatim with the exact click that gets past them. The web app is unchanged — same URL, same build, nothing to install.

    It has a native menu, and one capability the web app cannot have: it asks remote hosts not to compress. Accept-Encoding is a forbidden header name in a page, so a .metacool served with Content-Encoding: gzip — which is what GitHub Pages does — is refused by the website with no way around it. The desktop build sets the header from outside the page, so the same file on the same host opens.

  • The footer states the privacy claim, which it had been promising to. The dismissable notice on the picker says the footer keeps the same statement, and StatusBar asserted it in its own documentation, but nothing rendered it — so dismissing the notice removed the claim from the app. The statement is also reworded, in both targets, from “leaves your browser” to “leaves this machine”: the first is false in a window that is not a browser, and the second is true in both.

  • A selection opens a region instead of zooming. Option-drag draws a square — it always resolved to one, so drawing a rectangle promised something it would not give — and releasing it opens what the square covers: the chromosome or contig the drag began in, ending at the edge of the box or of the sequence, whichever comes first. On the whole-metagenome view, where no smaller region exists, it opens the genome. Zoom is still the wheel, the keys and pinch.
  • Two fingers sideways go back and forward over the heatmap, as they already did everywhere else on the page.
  • A selection in the trans corner opens the intersection, not one of the two sequences: the rectangle between two chromosomes, or the genome pair. On the diagonal it is still one region.
  • Switching resolution in an .mcool keeps the view you were in — the same genome, contig and range at the new bin size — instead of returning to the landing table. The colour clip is not carried, because it is in counts and counts scale with the bin.
  • A pooled picture says so. Above 4,096 bins on an axis the raster is pooled, one pixel per block of bins carrying the strongest value under it; the summary now reads “drawn 4 × 4 bins to a pixel” and explains why the crosshair reports several coordinates inside one square, and why zooming does not sharpen it.
  • w opens the whole-genome view again. The repaint short-circuit could not tell “nothing changed” from “show me the other picture of the same thing”, and swallowed it.

Documentation of chromosomix v0.20.0 · built from 40ec1ec · source