Releases: Adamtaranto/dot-explorer
Release list
v0.2.1
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
The browser app now ships inside the wheel.
Install and run
pip install "dot-explorer[app]"
dot-explorer-appNo 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
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 clusteringBinary 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.