Skip to content

Commit 54b6f58

Browse files
Merge branch 'MultiQC:main' into main
2 parents 597dbe7 + b762196 commit 54b6f58

13 files changed

Lines changed: 384 additions & 68 deletions

File tree

.claude/skills/triaging-module-requests/analysis-templates.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ Our records show that [Tool Name] might already have a MultiQC module:
180180
- Module: `multiqc.modules.[module_name]`
181181
- Documentation: [Link]
182182

183-
Please check the [list of existing modules](https://multiqc.info/modules/) before proceeding. If the existing module doesn't meet your needs, please explain what additional functionality you require.
183+
Please check the [list of existing modules](https://docs.seqera.io/multiqc/modules/) before proceeding. If the existing module doesn't meet your needs, please explain what additional functionality you require.
184184
```
185185

186186
## General Guidelines

.github/ISSUE_TEMPLATE/module-request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,6 @@ body:
115115
description: These help improve your request's priority, but aren't strictly required. We're here to help!
116116
options:
117117
- label: I have included example data files (uploaded/zipped, not copy-pasted)
118-
- label: I have checked that no similar module already exists in the [MultiQC modules list](https://multiqc.info/modules/)
118+
- label: I have checked that no similar module already exists in the [MultiQC modules list](https://docs.seqera.io/multiqc/modules/)
119119
- label: I have provided the tool's homepage or repository URL
120120
- label: I understand this request will be prioritized based on tool popularity, community need, and request quality

.github/workflows/claude-code-review.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-latest
1515
permissions:
1616
contents: read
17-
pull-requests: read
17+
pull-requests: write
1818
issues: read
1919
id-token: write
2020

@@ -51,6 +51,7 @@ jobs:
5151
PR_NUMBER: ${{ steps.pr-info.outputs.pr_number }}
5252
with:
5353
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
54+
allowed_non_write_users: "*"
5455
show_full_output: true
5556
prompt: |
5657
Please review pull request #${{ steps.pr-info.outputs.pr_number }} and provide feedback on:

README.md

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
### Aggregate bioinformatics results across many samples into a single report
1010

11-
##### Find [documentation](https://docs.seqera.io/multiqc) and [example reports](https://multiqc.info/example-reports/) at [http://multiqc.info](http://multiqc.info)
11+
##### Find [documentation](https://docs.seqera.io/multiqc) and [example reports](https://seqera.io/multiqc/#reports) at [https://seqera.io/multiqc/](https://seqera.io/multiqc/)
1212

1313
[![PyPI Version](https://img.shields.io/pypi/v/multiqc)](https://pypi.python.org/pypi/multiqc/)
1414
[![Bioconda Version](https://img.shields.io/conda/v/bioconda/multiqc?label=bioconda)](https://bioconda.github.io/recipes/multiqc/README.html)
@@ -32,28 +32,37 @@ More modules are being written all the time. Please suggest any ideas as a new
3232

3333
## Installation
3434

35-
You can install MultiQC from [PyPI](https://pypi.python.org/pypi/multiqc/)
36-
using `pip` as follows:
35+
You can install MultiQC using [uv](https://docs.astral.sh/uv/) (no separate Python installation required):
36+
37+
```bash
38+
uv tool install multiqc
39+
```
40+
41+
Alternatively, install from [PyPI](https://pypi.python.org/pypi/multiqc/) using `pip`:
3742

3843
```bash
3944
pip install multiqc
4045
```
4146

42-
Alternatively, you can install using [Conda](http://anaconda.org/)
47+
Or install using [Conda](http://anaconda.org/)
4348
from [Bioconda](https://bioconda.github.io/) ([set up your channels](https://bioconda.github.io/#usage) first):
4449

4550
```bash
4651
conda install multiqc
4752
```
4853

49-
If you would like the development version from GitHub instead, you can install it with `pip`:
54+
If you would like the development version from GitHub instead, you can install it with `uv` or `pip`:
55+
56+
```bash
57+
uv tool install git+https://github.com/MultiQC/MultiQC.git
58+
```
5059

5160
```bash
5261
pip install --upgrade --force-reinstall git+https://github.com/MultiQC/MultiQC.git
5362
```
5463

5564
MultiQC is also available via Docker and Singularity images, Galaxy wrappers, and
56-
many more software distribution systems.
65+
many more distribution methods.
5766
See [the documentation](https://docs.seqera.io/multiqc/getting_started/installation/) for details.
5867

5968
## Usage

docs/markdown/getting_started/installation.md

Lines changed: 113 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ If you're new to software packaging, this page can be a little overwhelming.
1212
If in doubt, a general rule is:
1313

1414
- _Running MultiQC in a pipeline?_   Use [Docker](#docker) or [Singularity](#singularity).
15-
- _Running MultiQC locally?_   Use [Pip](#pip--pypi) or [Conda](#conda).
15+
- _Running MultiQC locally?_   Use [uv](#uv), [Pip](#pip--pypi), or [Conda](#conda).
1616

1717
:::tip{title="Installation cheat sheet"}
1818

@@ -21,19 +21,19 @@ Know what you're doing with this kind of thing? Here's a quick reference:
2121
<table><thead>
2222
<tr><th>Method</th><th>Command</th></tr>
2323
</thead><tbody><tr>
24-
<td>Pip</td>
24+
<td>uv</td>
2525
<td>
2626

2727
```bash
28-
pip install multiqc
28+
uv tool install multiqc
2929
```
3030

3131
</td></tr><tr>
32-
<td>Pip (dev version)</td>
32+
<td>Pip</td>
3333
<td>
3434

3535
```bash
36-
pip install --upgrade --force-reinstall git+https://github.com/MultiQC/MultiQC.git
36+
pip install multiqc
3737
```
3838

3939
</td></tr><tr>
@@ -44,6 +44,22 @@ pip install --upgrade --force-reinstall git+https://github.com/MultiQC/MultiQC.g
4444
conda install multiqc
4545
```
4646

47+
</td></tr><tr>
48+
<td>uv (dev version)</td>
49+
<td>
50+
51+
```bash
52+
uv tool install git+https://github.com/MultiQC/MultiQC.git
53+
```
54+
55+
</td></tr><tr>
56+
<td>Pip (dev version)</td>
57+
<td>
58+
59+
```bash
60+
pip install --upgrade --force-reinstall git+https://github.com/MultiQC/MultiQC.git
61+
```
62+
4763
</td></tr><tr>
4864
<td>Docker</td>
4965
<td>
@@ -63,6 +79,10 @@ MultiQC is written in Python and needs a Python installation to run.
6379
To run MultiQC manually install, you'll typically install it into a local Python environment.
6480
MultiQC requires Python version 3.9 or above.
6581

82+
:::tip
83+
If you use [uv](#uv) to install MultiQC, you don't need to install Python separately — uv automatically downloads and manages Python for you.
84+
:::
85+
6686
### System Python
6787

6888
Python comes installed on most operating systems. You can install MultiQC directly here, but it is _not_ recommended. This often causes problems, and it's a little risky to mess with it.
@@ -71,6 +91,28 @@ Python comes installed on most operating systems. You can install MultiQC direct
7191
If you find yourself prepending `sudo` to any MultiQC commands, take a step back and think about Python virtual environments / conda instead.
7292
:::
7393

94+
### Python with uv
95+
96+
[uv](https://docs.astral.sh/uv/) is a fast Python package and project manager that can also install and manage Python versions.
97+
If you don't have Python installed, uv will automatically download it when needed — no separate Python installation required.
98+
99+
To install uv:
100+
101+
```bash
102+
# macOS / Linux
103+
curl -LsSf https://astral.sh/uv/install.sh | sh
104+
105+
# Windows
106+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
107+
```
108+
109+
uv will automatically download a suitable Python version when you install or run a Python package.
110+
If you'd like to install a specific Python version explicitly, you can do so with:
111+
112+
```bash
113+
uv python install 3.13
114+
```
115+
74116
### Python with Conda
75117

76118
To see if you have python installed, run `python --version` on the command line.
@@ -108,6 +150,62 @@ python3 -m multiqc .
108150

109151
There are a few different ways to install MultiQC into your local Python environment:
110152

153+
### uv
154+
155+
[uv](https://docs.astral.sh/uv/) is a fast Python package and project manager, written in Rust.
156+
It can replace pip, pip-tools, pipx, pyenv, and virtualenv — all in a single tool.
157+
uv automatically manages Python installations, so you don't need to install Python separately.
158+
159+
The recommended way to install MultiQC with uv is as a tool:
160+
161+
```bash
162+
uv tool install multiqc
163+
```
164+
165+
This installs MultiQC into an isolated environment and adds the `multiqc` command to your PATH.
166+
You can then run `multiqc` directly:
167+
168+
```bash
169+
multiqc .
170+
```
171+
172+
Alternatively, you can run MultiQC without installing it permanently using `uvx` (an alias for `uv tool run`):
173+
174+
```bash
175+
uvx multiqc .
176+
```
177+
178+
To upgrade MultiQC:
179+
180+
```bash
181+
uv tool upgrade multiqc
182+
```
183+
184+
#### Development version
185+
186+
If you would like the development version from GitHub instead:
187+
188+
```bash
189+
uv tool install git+https://github.com/MultiQC/MultiQC.git
190+
```
191+
192+
To update the dev version between releases, use `--reinstall`:
193+
194+
```bash
195+
uv tool install --reinstall git+https://github.com/MultiQC/MultiQC.git
196+
```
197+
198+
You can also run the dev version directly without installing, using `uvx`:
199+
200+
```bash
201+
uvx --from git+https://github.com/MultiQC/MultiQC.git multiqc .
202+
```
203+
204+
:::tip
205+
uv can also be used as a drop-in replacement for pip inside virtual environments.
206+
See the [uv documentation](https://docs.astral.sh/uv/) for more details.
207+
:::
208+
111209
### Conda
112210

113211
MultiQC is available on [Bioconda](https://bioconda.github.io/).
@@ -134,7 +232,7 @@ Doing so will likely cause weird stuff to happen (such as only being able to ins
134232

135233
### Pip / PyPI
136234

137-
This is the easiest way to install MultiQC. `pip` is the package manager for the Python Package Manager. It comes bundled with recent versions of Python,
235+
`pip` is the package manager for the Python Package Index. It comes bundled with recent versions of Python,
138236
otherwise you can find installation instructions [here](https://pip.pypa.io/en/stable/installation/).
139237

140238
You can install MultiQC from [PyPI](https://pypi.python.org/pypi/multiqc) as follows:
@@ -201,9 +299,17 @@ cd MultiQC
201299
pip install .
202300
```
203301

302+
Or, using uv:
303+
304+
```bash
305+
git clone https://github.com/MultiQC/MultiQC.git
306+
cd MultiQC
307+
uv pip install .
308+
```
309+
204310
This will fetch the latest development code. To update to the latest changes, use `git pull`.
205311

206-
Use the `--editable` flag (`pip install -e .`) if you intend to develop the code locally.
312+
Use the `--editable` flag (`pip install -e .` or `uv pip install -e .`) if you intend to develop the code locally.
207313
This symlinks the source files so that you don't have to reinstall every time you edit a file.
208314

209315
`git` not installed? No problem - just download the flat files:

docs/markdown/getting_started/quick_start.md

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,26 @@ This tutorial covers installation and first run for a typical user.
99
It's not meant to be comprehensive - see the rest of the documentation for that -
1010
it's just to get the majority up and running quickly so you can get a taste for how to use MultiQC.
1111

12-
## Install Conda
12+
## Install MultiQC
13+
14+
### Option A: Using uv (recommended)
15+
16+
[uv](https://docs.astral.sh/uv/) is a fast Python package manager that handles everything — including installing Python for you automatically.
17+
No need to install Python separately (see [full docs](installation/#uv)).
18+
19+
1. Install uv:
20+
```bash
21+
# macOS / Linux
22+
curl -LsSf https://astral.sh/uv/install.sh | sh
23+
```
24+
2. Install MultiQC:
25+
```bash
26+
uv tool install multiqc
27+
```
1328

14-
In order to install MultiQC, we first need Python.
15-
Arguably, the easiest way to do this is with Conda
29+
### Option B: Using Conda
30+
31+
Alternatively, you can use Conda
1632
(see [full docs](installation/#python-with-conda)).
1733

1834
1. [Download miniconda](https://conda.io/miniconda.html) for your operating system.
@@ -29,15 +45,12 @@ Arguably, the easiest way to do this is with Conda
2945
conda create --name myenv python=3.11
3046
conda activate myenv
3147
```
48+
6. Install MultiQC:
49+
```bash
50+
conda install multiqc
51+
```
3252

33-
## Install MultiQC
34-
35-
Now that we have Python, we can install MultiQC.
36-
As we're already using Conda, we may as well install MultiQC with Conda too (see [full docs](installation/#conda)).
37-
38-
```bash
39-
conda install multiqc
40-
```
53+
### Verify installation
4154

4255
Check that it worked by printing the MultiQC version (or `--help` text):
4356

@@ -46,20 +59,20 @@ multiqc --version
4659
```
4760

4861
```txt
49-
multiqc, version 1.20
62+
multiqc, version 1.33
5063
```
5164

5265
## Get some example data
5366

54-
To try MultiQC out quickly, you can fetch some example input data from the [Example reports](https://multiqc.info/example-reports/) page.
67+
To try MultiQC out quickly, you can fetch some example input data from the [Example reports](https://seqera.io/multiqc/#reports) page.
5568

5669
Each example report has a link to _Download input data_.
5770
You should be able to recreate the example report using this.
5871

59-
For example, for the [RNA-seq report](https://multiqc.info/example-reports/rna-seq/):
72+
For example, for the [RNA-seq report](https://seqera.io/examples/rna-seq/multiqc_report):
6073

6174
```bash
62-
curl -O -J -L http://multiqc.info/examples/rna-seq/data.zip
75+
curl -O -J -L https://seqera.io/examples/rna-seq/data.zip
6376
unzip data.zip
6477
```
6578

@@ -80,7 +93,7 @@ multiqc .
8093
```
8194

8295
```txt
83-
/// MultiQC 🔍 | v1.20
96+
/// MultiQC 🔍 | v1.33
8497
8598
| multiqc | Search path : /demo/data
8699
| searching | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 121/121
@@ -97,7 +110,7 @@ multiqc .
97110

98111
You can see in the log output that MultiQC created a file called `multiqc_report.html`.
99112
Open it and take a look (you can usually <kbd>ctrl</kbd>/<kbd>cmd</kbd> + click the filename in most terminals).
100-
It should look basically the same as the example report [on the MultiQC website](https://multiqc.info/example-reports/rna-seq/).
113+
It should look basically the same as [this example report](https://seqera.io/examples/rna-seq/multiqc_report).
101114

102115
Try using the toolbox features in the right hand sidebar, for example hiding and highlighting specific samples.
103116

multiqc/templates/default/compiled/js/multiqc.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

multiqc/templates/default/src/js/plots/heatmap.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,16 @@ class HeatmapPlot extends Plot {
100100
let [rows, xcats, ycats] = this.prepData();
101101
if (rows.length === 0 || xcats.length === 0 || ycats.length === 0) return [];
102102

103+
// Update layout tick labels to match current (possibly clustered) category order
104+
if (this.layout.yaxis.tickmode === "array") {
105+
this.layout.yaxis.ticktext = ycats;
106+
this.layout.yaxis.tickvals = [...Array(ycats.length).keys()];
107+
}
108+
if (this.layout.xaxis.tickmode === "array") {
109+
this.layout.xaxis.ticktext = xcats;
110+
this.layout.xaxis.tickvals = [...Array(xcats.length).keys()];
111+
}
112+
103113
if (this.filtYCatsSettings.length > 0) {
104114
const maxYTicks = (this.layout.height - 200) / 12;
105115
this.recalculateTicks(this.filtYCatsSettings, this.layout.yaxis, maxYTicks);

0 commit comments

Comments
 (0)