Skip to content

Web App

dot-explorer ships with a browser app for comparing two genome assemblies — no installation required. The app is fully client-side: your FASTA files are parsed, aligned, and plotted entirely in your browser (via WebAssembly and Pyodide) and never leave your machine.

Launch the app in a new window →

The app opens in its own window — it needs the full viewport for the interactive dotplot, and running it standalone keeps its memory separate from the docs site.

Capabilities

Category Options
Input Upload query and target assemblies as FASTA or gzipped FASTA (.fa, .fasta, .fna, or any of these gzipped), align an assembly to itself ("Align assembly to itself"), or import a pre-computed PAF file
Alignment — offline k-mer matching with dot-explorer's rolling-hash engine (the Rust crate compiled to a wasm wheel, running in Pyodide); PAF import (pure Python). Both work fully offline once the app has loaded. The k-mer method also offers a compute-time "min match block" filter (default 50 bp) that drops short blocks before they are materialised — changing it re-runs the comparison.
Alignment — via biowasm minimap2 2.22 (preset asm20 by default; repeat-genome options -m, -P and, for self-alignments, -D; -c for base-level alignment, which adds cg/NM/de tags — slower, but identity colouring then uses the accurate gap-compressed de value instead of the PAF column 10/11 estimate, and clicking a match displays the gapped query/target alignment) and nucmer (MUMmer4) (-l 100 -c 200 by default; --maxmatch / --nosimplify for repeats) run in-browser via the biowasm CDN — assembly-scale defaults; the tool binaries are fetched from biowasm.com at runtime, so these need a network connection. Runs can be cancelled mid-flight (switch method or re-run), and each run's exact command line and stderr appear in the collapsible Aligner log.
Plot reconfiguration (no recompute) Sort contigs by size or maximise colinearity, auto-flip reverse-oriented contigs, hide internal axes, minimum alignment length filter, identity colouring (tool/PAF results only — k-mer matches are exact, so the option is hidden there)
Trees & clustering (self-alignments) Upload a newick / IQ-TREE .treefile to order the contigs and draw the tree beside the matrix, or compute a hierarchical clustering tree from sourmash similarity (Jaccard, abundance-weighted angular, or ANI with confidence bounds; user-set k and scaled; settings held until "Apply changes"). Cluster assignment by similarity cutoff or combined ANI + coverage thresholds (sourmash containment or SNP-robust alignment block coverage, optionally reciprocal), a cluster table whose rows highlight their clusters in the matrix, bold cluster outlines, a pairwise Matrix tab (named rows/columns, ANI with 95% CIs, asymmetric containment/coverage views, CSV export) and a square similarity Heatmap tab (selectable palette, in-cell values, SVG/PNG download). sourmash + scipy (~25 MB) download on first use — see Similarity & Clustering
Annotations Upload GFF3 tracks for either assembly; per-type toggles and colours, diagonal shading, side tracks in the focused pair view, clickable features
Downloads Plot as SVG or PDF, alignments as PAF, and the reordered/reoriented query assembly as FASTA
Diagnostics Live wasm-heap memory readout in the sidebar; animated processing indicator while anything is computing

Limits and notes

  • Memory: the app's Python runtime can grow its WebAssembly heap to 4 GB — measured directly: the heap tops out at 4096 MB, with ~4.0 GB allocatable before a clean MemoryError (a 90 Mb k-mer run peaked at 2.9 GB). The app is best suited to viral, bacterial, and fungal-scale assemblies; for large plant or animal genomes, use dot-explorer locally instead. The sidebar shows the live wasm-heap usage against this cap.
  • Input size limits (measured empirically in Chrome with synthetic assembly pairs): the k-mer method completes at 90 Mb combined and crashes the Python runtime at 100 Mb, so beyond ~80 Mb combined the app removes the k-mer method from the selector (and warns above 40 Mb that big runs take minutes). A native memory audit (scripts/mem_profile_index.py) confirms this ceiling comes from the k-mer index's CSR tables (~15 B/bp) plus match-record objects — not from stored alignment sequences — so it is inherent to the method at this heap size — at that scale, use minimap2/nucmer here or run the dot-explorer Python library locally. minimap2 and nucmer run in their own workers: minimap2 completed at 200 MB combined and nucmer at 250 MB; at 300 MB the browser tab itself crashed (both tools), so above ~200 MB the app suggests aligning locally and uploading the precomputed PAF via the Alignment (PAF) input mode, which skips in-browser aligning entirely.
  • First load: the app downloads about 26 MB of Python/wasm runtime assets on first visit (52 files, 37 MB uncompressed — measured from a cold load of the deployed export); the browser caches them, so subsequent loads are fast. The biowasm aligner binaries are separate and fetch only when an aligner is selected.
  • Why no BLAST? No production WebAssembly build of NCBI BLAST+ exists, so BLAST cannot run in the browser. MUMmer4's nucmer is offered as the closest substitute for sensitive genome-vs-genome alignment.

Run it locally

The app is a standard Shiny for Python app: the hosted version above is a Shinylive/WebAssembly export of the same app, which also runs natively on a workstation or HPC node with the installed dot-explorer instead of the wasm wheel.

Install and run

The app ships inside the wheel, so no checkout is needed:

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

That serves the app on http://127.0.0.1:8000 and opens a browser.

Option Default Effect
--host 127.0.0.1 Interface to bind
--port 8000 Port to listen on
--no-browser off Do not open a browser window

Developers building the Rust extension from source use maturin develop --release plus pip install ".[app]" from a checkout, and can also run shiny run --launch-browser python/dot_explorer/app/app.py directly — see the app README for the development and Shinylive-export recipes, or environment.yml for the conda route.

On a remote server / HPC

The same command works headless — bind a port and tunnel to it:

dot-explorer-app --host 127.0.0.1 --port 8000 --no-browser   # on the server
ssh -L 8000:localhost:8000 user@server                       # from your laptop
# then open http://localhost:8000

Prefer --host 127.0.0.1 plus the SSH tunnel on shared systems so the app is not exposed to other users on the network.

Where the app writes files

Nothing is written next to the installed package, and nothing is written to the directory you launch from. Every file the app creates goes to the system temporary directory:

  • Uploads land in a per-session directory Shiny creates with tempfile.mkdtemp(prefix="fileupload-"), and are removed when the session ends.
  • The .fai index, the decompressed copy of a .gz upload, and the FASTA reconstructed from a GenBank upload are all written beside the upload, in that same directory.
  • HTML reports and figure exports use tempfile.TemporaryDirectory().

The k-mer index itself is held in memory (the Rust heap), not on disk. The largest on-disk artefacts are therefore an uncompressed copy of your assembly plus its index.

On a cluster where /tmp is small or per-node, point the temporary directory somewhere with room before launching:

export TMPDIR=/scratch/$USER/tmp      # Windows: set TEMP=...
mkdir -p "$TMPDIR"
dot-explorer-app --no-browser

Local vs. in-browser differences

Hosted web app Local Shiny app
dot-explorer engine wasm wheel in Pyodide your installed dot-explorer (native speed, multi-core)
Uploads never leave the browser sent to the (local) Shiny server process
Size limits k-mer disabled above ~80 Mb combined; warnings at 200 MB for aligners none — memory is bounded by your machine
Memory readout live wasm-heap usage vs the 4 GB cap peak RSS of the server process
minimap2 / nucmer in the browser tab via the biowasm CDN same — still browser-side, still needs network access to biowasm.com
Sequence access pyfaidx over the browser's in-memory filesystem pyfaidx over the uploaded temp file on disk
Clustering (sourmash + scipy) downloaded from the Pyodide channel (~25 MB) on first use pip install "dot-explorer[cluster]" once
Temp files browser-only in-memory filesystem system temp dir ($TMPDIR), never the install or launch directory

The k-mer method and PAF import work fully offline locally; only the minimap2/nucmer buttons need a network connection (they fetch the tool binaries from the biowasm CDN into your browser tab, even for a local app). For very large genomes, align outside the app with native minimap2 and use the Alignment (PAF) input mode.