Releases: MultiQC/MultiQC
v1.33
New modules
- Seqkit stats (#3401)
- A cross-platform and ultrafast toolkit for FASTA/Q file manipulation
- RiboTish (#3384)
- Ribo-seq quality metrics
- Sylph (#3370)
- Sylph is a program that performs metagenomic profiling or containment average nucleotide identity querying for metagenomic shotgun sequencing samples.
- Bbsplit basic stats (#3394)
- New submodule for bbtools
Feature updates and improvements
- Custom logo: dark mode option, custom width option. (#3400)
- Update Seqera AI chat URL (#3415)
- Add sample_groups configuration for visual grouping in bar graphs (#3404)
- Custom content: strip whitespace around categories for tsv,csv (#3421)
- General Stats: Add configurable help text (#3341)
- Custom content: support passing help text (#3338)
- Add new flag "axis_controlled_by_switches" to pconfig that allow control of which axis to apply logarithmic scale (#3423)
Module updates
- fastp: Add support for naming samples after
--report_titlein Fastp command (#3418) - Glimpse: Add more decimal to general table stats (#3423)
- Refactor BISCUIT module for better consistency with current MultiQC codebase (#3345, #3426)
- Add version fetching for HiCUP, QoRTs, QualiMap, RNA-SeQC (#3420)
Fixes
- Fix MultiQC plotly export bug affecting FastQC heatmaps (#3402)
- Fix bug with sample filter buttons in new template (#3389)
- Fix KeyError in bargraph when using reference lines with horizontal orientation (#3385)
Module fixes
- Fix validation errors in strict mode for invalid plot config options (#3428)
- Remove invalid
hide_zero_catsfrom line plot configs (mosdepth, bamdst, samtools/coverage, humid, dragen_fastqc) - Fix bar plot category configs using invalid fields (picard/IlluminaBasecallingMetrics, motus)
- Remove invalid
- Samtools coverage: Don't crash if incorrect number of columns found (#3419)
- Lima: split delimiter is a tab, not any whitespace. (#3395)
- Homer: Fix unique / total count swap in
homer/tagdirectory(#3381)
Infrastructure and packaging
- Avoid Python 3.14.1 (#3414)
- Version check: Add installation method to detect installs using
uv(#3422) - Bump pre commit versions (#3417)
Optimization
- Make Parquet merging much, much faster (60% faster) (#3403)
New Contributors
- @edmundmiller made their first contribution in #3324
- @EladH1 made their first contribution in #3394
- @cmatKhan made their first contribution in #3381
- @hexylena made their first contribution in #3395
Full Changelog: v1.32...v1.33
v1.32
This release really has one really major change in it:
- Bootstrap upgrade and DARK MODE (#3264)
This has been brewing for a long time, and is a large rewrite of how MultiQC HTML / CSS and JS is written and packaged.
MultiQC now supports simple theming with Bootstrap colour modes, and the updated default template ships with both light- and dark-mode by default 😎
The old template is still available, but has been renamed to original.
New modules
- New module: sompy (#3186)
Module updates
Fixes
- Docs: Fix a bunch of links (#3314)
- Fix flag typo in
running_multiqc.md(#3347) - Update Dockerfile to optionally include all LaTeX requirements for
--pdf(#3349) - Update Claude Code GitHub Workflow (#3353)
- Remove bedrock availability check when creating client (#3352)
New Contributors
- @rzelle-lallemand made their first contribution in #3347
- @gavinelder made their first contribution in #3314
Full Changelog: v1.31...v1.32
v1.31
MultiQC v1.31 - 2025-09-05
Adding new module for Xenium analysis, 10x Genomics Xenium spatial transcriptomics quality control report.
The parquet format is stable since 1.29, renaming the output file from BETA-multiqc.parquet to multiqc.parquet.
New modules
Feature updates and improvements
- Add
return_htmlparameter for programmatic HTML access (#3304) - File search optimization: avoid reading files when contents exclusion patterns are not
provided (#3312) - Rename
BETA-multiqc.parquettomultiqc.parquet(#3332)
Fixes
- Scatter plot: fix hiding dots by legend click (#3321)
- Plots: set unique series label for each plot type (#3330)
- Fix bulk sample renaming buttons (#3300)
- Fix config flag types in schema (#3318)
- Ignore pyc files when copying html files (#3320)
Module updates
- Picard tools: enhance QualityByCycleMetrics to support original quality scores (#3307)
- STAR: improve module color scheme for better accessibility (#3305, #3306)
- Sequali: support insert size metrics (#3303)
- Missing modules to general stats: Busco, CheckM, CheckM2, GTDB-Tk (#3289)
- cells2stats: add support for optical pooled screening output (#3277)
- fastp: add before-filtering mean r1/r2 length to general stats (#3280)
- Cutadapt: improve sample name extraction for stdin input (#3333)
Module fixes
- bases2fastq: fix index error (#3328)
- Picard: fix VariantCallingMetrics to support sample renaming (#3298)
- fastp: fix sample naming for paired-end reads (#3302)
- bcftools: fix singleton count calculation to include indels (#3295)
- CheckM2: column spelling fix (#3283)
- Bulk replace deprecated
hide_emptywithhide_zero_cats(#3296)
Infrastructure and packaging
v1.30
MultiQC v1.30 - 2025-07-09
Minor improvements and fixes.
Feature updates
- Support markdown in custom content (#3204)
- Support reasoning models in AI summaries (#3265)
- Always save AI prompt to file as
llms-full.txt(#3257) - Allow Plotly theme configuration with
config.plot_theme(#3250) - Use
polars-lts-cpulibrary for polars for better CPU compatibility across Docker containers (#3240) - Allow adding any metric from
multiqc_data.jsonto general stats withconfig.general_stats_columns(#3245) - Box plot: dynamically determine whether to show interactive points for outliers (similar to violin plots). Add
boxplot_boxpointsconfig option to override it explicitly (#3244, #3248) - Detect AI provider for summaries from environment variables (#3254)
- Scatter plot: allow custom marker symbol (#3234)
- Use universal
config.use_filename_as_sample_nameconfig flag for modules, and deprecate module-specific flags (3241) - Allow multi-line
infosections in module sections (#3225) - AI summaries: update the model defaults (default to Claude 4) (#3265)
- Color schemes: lighten colours with alpha instead of admixing white (#3252)
- Performance: use
OrderedDictforsaved_raw_data_keys(#3235)
Fixes
- Custom content line plots: allow passing data as a list of tuples in JSON to avoid ordering issues (#3246)
- Fix merging modules from multiple parquet files (#3267)
- Fix series labels in heatmap subtitle (#3260)
- Fix custom content description when grouping section with
parent_id(#3242) - Fix timezone issue in parquet export (#3224)
Module updates and fixes
- Elembio bases2fastq: fix PE bug, add % bases below PF plot (#3233)
- Picard: support sentieon for WgsMetrics (#3200)
- Picard: new OxoGMetrics search pattern (#3212)
- VEP: support version 114 (#3209)
- samtools: support
ampliconclipstats (#3214) - Percolator: handle comments in parsing (#3217)
- RSeQC: normalise junction saturation plot (#3216)
- Somalier: fix sex plot description (#3261)
- FastQC: fix subtitle in status check heatmap and adapters content plot (#3260)
- Cutadapt: fix extracting sample name from command line params (#3262)
- UMItools: bump up search pattern checked number of lines (#3263)
- Samtools: allow configuring metrics to add to general stats with
config.general_stats_columns(#3245)
v1.29
MultiQC v1.29 - 2025-05-22
Highlights
BETA: MultiQC now writes out an Apache Parquet file multiqc_data/BETA-multiqc.parquet
for each run containing plot and table data and metadata. This outputs is useful to:
- Reproduce MultiQC runs without access to the original data.
- Combine multiple MultiQC runs across different sampels or modules.
- Populate an analytics database for e.g. time series analysis.
See the full documentation on using parquet output here.
Note that the format is unstable may change in the following release as we are still exploring
the best format for the OLAP integration.
Feature updates and improvements
- Write plot and table data in a Parquet file (#3118, #3194, #3171, #3175)
- Support Markdown in custom content (#3204)
- AI summaries:
- New CLI command:
multiqc --check-config(#3120, #3147) - Allow both table ID and table anchor in table custom config (#3190)
- Add option
--only-samples- opposite of--ignore-samples(#3174) - Generalize customizing general stats columns (#3164)
- Use killable processes for kaleido plot export (#3157)
- Add timeout to plot export (#3111)
- Customize plot subtitle ("N samples") (#3160)
- Sort custom-content by section name by default (#3137)
New modules
Fixes
- Avoid crash if failed to remove the tmp dir (#3159)
- Make sure
multiqc.loghas full debug log (#3173) - MegaQC config attribute fix (#3172)
- Custom content: fix when section id and plot anchor are identical (#3184)
- Fix false auto-opening toolbox when SeqeraAI is selected (#3193)
- Fix applying
data_labelsextra parameters in plot config (#3181) - Handle timezone locale error (#3149)
- Document
multiqc.parse_logs("multiqc.parquet")(#3169) - Fix barplot CSV in-browser export (#3148)
- Fix setting
custom_table_header_configfor custom table (#3135) - Coerce x-values to float when setting x-range on linegraph (#3130)
- Fix pre-configured table sort
defaultsort(#3140) - Fix barplot CSV in-browser export (#3148)
- AI summaries:
- Fix bug generating AI table from violin plot (#3128)
Module updates and fixes
- NanoStat: allow customizing general stats columns (#3163)
- bcftools stats: enable log switch for indel plot (#3196)
- Bases2Fastq: support handling of single end sequencing data (#3179)
- Bases2Fastq: support handling of single-end sequencing data (#3189)
- samtools: generalize customizing general stats columns (#3164)
- samtools markdup: handle input with absolute paths (#3150)
- NanoStat: allow customizing general stats columns (#3163)
- Bases2Fastq: update links and definitions (#3158)
- PRINSEQ++: fix logger warnings (#3198)
- fastp: don't display decimal points on filtering result bar chart (#3132)
- kraken: hide read-count decimals for taxa plot (#3143)
v1.28
MultiQC v1.28 - 2025-03-21
JSON schema for MultiQC config & AI summaries fixes and optimizations.
Feature updates and improvements
- Add JSON schema for config (#3100)
- Allow configure dynamic toolbox settings in YAML config (#3102)
- AI prompt optimizations (#3109)
- Round table values for AI prompt (#3124)
- Custom content: support
.gif,.webpand.tiff(#3058) - Ignore
*.jarfiles for file search (#3097)
Module updates
Fixes
- AI in-browser summary: fix prompt for string-type cells in tables (#3096)
- Fix generating AI summaries from custom content table with empty cells (#3095)
- Bargraph: respect
pconfig.use_legendif defined (#3112) - Fix warnings when
read_count_multiplier: 1(#3094)
Module fixes
Optimization, refactoring and typing
v1.27.1
MultiQC v1.27.1 - 2025-02-07
Some fixes and improvements to AI summaries generation:
- Supporting other LLM providers with a custom endpoint passed through the command line (docs)
- Summaries should now work with bioconda installation without additional dependencies.
- Option to anonymize sample names.
Feature updates and improvements
-
AI summaries:
- Add "Chat with Seqera AI" buttons to all summaries (#3067)
- Add options to configure custom OpenAI endpoint (#3083)
- Support anonymizing sample names (#3074)
- Use
tiktokento estimate token counts for all providers (#3064) - Remove the dependency on
langchain,openai, andanthropicpackages (#3066) - Always save prompt to file (#3078)
- Box plot: use statistics instead of raw values (#3077)
- Fix for in-browser summaries: when "Clear summary" clicked on global, clear also the generated extended summary (#3068)
- Make token count warning a debug (#3071)
-
Improving table small scatter plots:
-
Configuring from
env: resolve empty toNone(#3072) -
Do not print stack trace on KeyboardInterrupt unless verbose (#3063)
-
Custom content:
Module updates
- Sequali: change DOI to article link (#3084)
Module fixes
- FastQC: fix "Per Base Sequence Content" heatmap (#3075)
v1.27
MultiQC v1.27 - 2025-01-22
Highlights
You can now generate AI summaries of reports with --ai, or dynamically in existing reports. See documentation for more details.
Feature updates and improvements
- AI summaries (#2915)
- Add "Clustered" view to heatmaps (#3035)
- Config option to control when table "Configure Column" button is disabled (#3045)
Fixes
- Preserve order of
saved_raw_data_keysinmultiqc_data.json(#3044)
Module updates
Infrastructure and packaging
- Update ruff and pre-commit (#3048)
v1.26
MultiQC v1.26 - 2024-12-17
Christmas release! 10 new modules, 11 improved modules, and a few core improvements.
Highlights
- Custom content: allow quoting strings in CSV to prevent interpreting them as numbers (#3020):
- Naturally sort samples in tables and bar plots (#2999)
- Auto-save dynamic toolbox settings (#3001)
report.saved_raw_datais not preserved by default to save on memory footprint (#3010). You can enable it withpreserve_module_raw_data: truein your config file.
New modules
- MosaiCatcher - tool for classifying strand states of each chromosome in each cell using a Hidden Markov Model (#1910)
- ataqv - tool for assessing the quality of a genome using a broader set of marker genes (#3013)
- telseq - a software that estimates telomere length from whole genome sequencing data (BAMs) (#2910)
- Cell Ranger ARC - analysis of single cell expression or VDJ data produced by 10X Genomics (#2925)
- GTDB-Tk - toolkit for assigning objective taxonomic classifications to bacterial and archaeal genomes (#2970)
- Checkm - genome completeness and contamination based on the presence or absence of marker genes (#2990)
- Checkm2: rapid, scalable and accurate tool for assessing microbial genome quality using machine learning (#2978)
- Haplocheck - detects in-sample contamination in mtDNA or WGS sequencing studies by analyzing the mitchondrial content (#2933)
- mgikit - demultiplexes FASTQ files from an MGI sequencing instrument (#3023)
- Percolator - semi-supervised learning for peptide identification from shotgun proteomics datasets (#3011)
Module updates
- GATK BQSR: support Sentieon QualCal output (#3008)
- Pychopper: add section with UMI barpot (#3024)
- fastp: add overrepresented sequences plot and table (#3000)
- RNA-SeqC: more metrics in general statistics table (#3017)
- phantompeakqualtools: adjust minimum value to 1 for NSC coeff (#3021)
- QualiMap RNASeq: add gen stats columns for exonic, intronic, intergenic, overlapping (#3018)
- QualiMap BamQC: add general stats columns for dup rate, number of Ns, mapped paired reads (#2989)
- DRAGEN: RNA quant metrics: support forward and reverse fragments in barplot (#3012)
- Interop: remove "%" suffix for
nanvalues (#2995) - Dedup: use a more specific search pattern (#2988)
- Bclconvert: group samples and lanes, refactor (#2872)
- Nanostat: new format: fix parsing sample names (#3007)
Feature updates and improvements
- Custom content: allow quoting strings in CSV (#3020)
- Naturally sort samples in tables and bar plots (#2999)
- Auto-save dynamic toolbox settings to session and to a file (#3001)
- Support Python 3.13, drop 3.8 (#2862)
- Add table tooltips about merged values in groupped samples (#3002)
Fixes
- Align order of lineplot categories across samples (#3033)
Optimization, refactoring and typing
- Memory optimization: do not preserve
saved_raw_datain modules, write directly to files instead (#3010) - Violin plot: add
dtintoDatasetobjects instead ofmain_table_dt(#2968)
Infrastructure and packaging
- Add Cursor rules for module creation (#3025)
- Fix docker build: remove docs from
.dockerignore(#2994) - Add workflow to sync changelog with Seqera docs (#2993)
- Docker build: add workflow_dispatch, do not push on pull_request (#2962)
- Build and test Docker image in PRs (#2958)
- Fix Docker CI for forks: skip login step (#2953)
- Document bar plot's
sort_samples(#3006) - Update ruff to 0.8.3 (#3029)
- Add more tests for custom-content (#3028)
- Add pytest ini options to
pyproject.toml- to set default test targets (#3030)
v1.25.2
MultiQC v1.25.2 - 2024-11-20
Multiple bug fixes and minor updates.
Updates
- Add natural sort for sample sorting (#2959)
- Custom content: for
plot_type: image, supportcustom_dataconfig with section name and description. Fix misleading logging (#2939) - Config validation improvements (group messages, cast types, validate column headers) (#2899)
Fixes
- Workaround for displaying sample grouping in Safari because of missing
visibility: collapse(#2941) - Fix table CSV export where a title contains a comma (#2911)
- Showing table in notebooks: respect
col1_header(#2914) - Customizing
custom_table_header_config: fix docs, support both the old and the new ways (#2955) - Table scatter mini-plots: fix rounding and range (#2956)
- File line block iterator: fix reading long lines that do not fit one block (#2935)
- Fix
cond_formatting_rulestype hint to avoid validation error (#2922) - Fix
config.prepend_dirsor-d -dd 1(#2913) - Sample grouping fixes (#2920):
- Keep sample name column fix width to avoid jumping
- Fix hiding columns through the modal
- Custom content fixes:
Module updates
- ngsbits: add submodule samplegender (#2854)
- nanoq: change lineplots for barplots (#2934)
- Qualimap: clarify the direction of the transcript in coverage plot (#2946)
- picard: add table with all metrics to VariantCallingMetrics section (#2885)
- Nanostat: add general stats columns (#2961)
- Samtools: add insert size to general stats table (#2905)
Module fixes
- bcl2fastq: fix missing
R1_*/R2_*metrics (#2965) - Cutadapt: fix for null values from r2 data (#2936)
- Qualimap: fix parsing ∞ value (#2937)
- bclconvert: fix undetermined barcodes plot (#2976)
- featurecounts: fix missing section name and anchor (#2967)
Infrastructure
- Pin kaleido to 0.2.1 (new 0.4.1 does not embed a browser and thus not portable) (#2963)