Skip to content

Releases: Adamtaranto/dot-explorer

v0.2.1

Choose a tag to compare

@Adamtaranto Adamtaranto released this 09 Sep 10:11

Fixes broken macOS wheels. macOS users on 0.1.0 or 0.2.0 should upgrade.

pip install --upgrade "dot-explorer[app]"

The problem

Every macOS wheel in 0.2.0 — and all but one in 0.1.0 — linked Homebrew's
liblzma by absolute path. GitHub's macOS runners ship Homebrew, so the wheels
imported fine in CI and failed on any Mac without that exact path:

ImportError: dlopen(..._dot_explorer...so): Library not loaded:
  /opt/homebrew/opt/xz/lib/liblzma.5.dylib

It comes from the compression feature pulling in lzma-sys, which links the
system liblzma dynamically. Linux and Windows wheels were never affected —
auditwheel bundles dependencies into manylinux wheels.

The one 0.1.0 wheel that worked (cp314-cp314-macosx_11_0_arm64) was built by
hand on a machine without Homebrew xz, which masked the bug during release
testing.

The fix

The macOS build now sets LZMA_API_STATIC=1 so liblzma is linked statically,
and a new scripts/check_macos_wheel.py fails the build if any Mach-O object
in a wheel depends on a path outside /usr/lib, /System or the wheel itself.
A build-machine-only library can no longer be published.

Verified on a real runner: all eight macOS wheel jobs pass the new gate, and a
CI-built wheel installs and runs on a machine with no Homebrew xz.

Full changelog

See CHANGELOG.md.

v0.2.0

Choose a tag to compare

@Adamtaranto Adamtaranto released this 09 Sep 08:07

The browser app now ships inside the wheel.

Install and run

pip install "dot-explorer[app]"
dot-explorer-app

No repository clone and no Rust toolchain — previously the app extra
installed the app's dependencies but not the app itself, so a checkout was the
only way to run it.

dot-explorer-app serves on http://127.0.0.1:8000 and opens a browser;
--host, --port and --no-browser are available for remote/HPC use.

Highlights

The app ships in the wheel. It moved to dot_explorer/app/ as package
data, launched by the new dot-explorer-app console script. Everything the app
writes — uploads, the .fai index, HTML reports — goes to the system temp
directory, never the install or launch directory; set TMPDIR to redirect it
on clusters with a small /tmp.

pyfaidx is now a core dependency (pure Python, ~0.2 MB). shiny and the
cluster extra stay optional: shiny pulls orjson, which has no
free-threaded wheel, so requiring it would make the package uninstallable on
3.14t.

Development builds identify themselves. Between release tags an untracked
_version_local.py carries a PEP 440 local version (X.Y.Z+<short hash>, plus
.dirty for an unclean tree), so dot_explorer.__version__ names the commit a
build came from while the distribution metadata stays X.Y.Z. No tracked file
changes between tags.

For contributors

The app source moved from app/ to python/dot_explorer/app/. Run it with
dot-explorer-app, or shiny run python/dot_explorer/app/app.py. The
Shinylive export now goes through scripts/build_shinylive.py, which stages the
app plus the wasm wheel outside the package tree.

Full changelog

See CHANGELOG.md.

v0.1.0

Choose a tag to compare

@Adamtaranto Adamtaranto released this 09 Sep 06:08

First published release of dot-explorer — fast dot-plot comparisons of DNA
sequences, with a Rust core, a Python library, and a browser app.

Install

pip install dot-explorer                  # library
pip install "dot-explorer[app]"           # + local Shiny app
pip install "dot-explorer[cluster]"       # + sourmash/scipy clustering

Binary wheels are published for CPython 3.12, 3.13, 3.14 and free-threaded
3.14t on Linux (x86_64 / aarch64), macOS (arm64 / x86_64) and Windows, plus a
PEP 783 pyemscripten wasm wheel.

Highlights

Core engine (Rust). Rolling-hash ntHash k-mer indexing with a single
canonical-hash CSR table per sequence, so both strands come out of one lookup
at ~12–16 bytes/bp. Hash collisions are byte-verified against retained
sequence, so output is identical to exact k-mer search. Strand-aware run
merging, PAF output, and CrossIndex for cross-assembly comparisons.

Plotting. DotPlotter renders all-vs-all panel grids or single pairs, with
sequence-proportional scaling, identity colouring, annotation shading and side
tracks, collinearity contig ordering with reordered/reoriented FASTA export,
and configurable match line caps (cap_style, square by default).

Similarity, clustering and trees (optional cluster extra). sourmash
FracMinHash sketching with Jaccard / angular / ANI / containment metrics,
hierarchical clustering, dual identity+coverage cluster assignment, a
dependency-free newick / IQ-TREE parser, dendrograms beside the matrix, and
similarity heatmaps.

Interactive HTML reports. Single self-contained files: click a panel to
focus, scroll/drag to pan and zoom, box-select matches, click a match for
coordinates, identity and sequences — with an optional FASTA header on copied
sequences.

Browser app. A Shiny for Python front end that ships the same Rust core
cross-compiled to a Pyodide wasm wheel and runs entirely client-side, with
minimap2 and nucmer available in-browser via biowasm.

Full changelog

See CHANGELOG.md.