Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.3.0] - 2026-07-09
Added
- New
--method rfd3workflow for RFDiffusion3-based binder design usingRosettaCommons/foundry(RF3 batching, Boltz full-refold scoring, optional FoldSeek on refolded designs). - Germinal antibody/nanobody design workflow (
--method germinal). - FoldSeek structural search (
--do_foldseek) for therfd,bindcraft,boltzgen, andrfd3workflows. Searches designed binder chains against structural databases (default: CATH50) to identify known folds and annotate results with CATH hierarchy descriptions. Supports local or remote search, gzip output, and optional HTML reports. - Spartan HPC platform configs
spartan-a100.config(gpu-a100-short) andspartan-l40s.config(gpu-l40s) for University of Melbourne Spartan. conf/platforms/monash_containers.config: container URL overrides so them3,m3_bdiM3/MASSIVE platform configs pull mirrored containers from a Monash local server instead ofghcr.io. Some containers (SILENT_FROM_PDBS,MMSEQS_COLABFOLDSEARCH, FoldSeek) are not yet mirrored and still pull from their original registries.- RFD workflow docs: table of built-in and bind-mounted HyperMPNN
--pmpnn_weightscheckpoints in theproteinmpnn_dl_binder_designcontainer. - Agent skill at
.agents/skills/nf-binder-design/for AI-assisted pipeline setup and execution. bin/complex_sasa.py: per-residue delta SASA for target chains when a binder is removed from a complex, with optional site sums, batch PDB input, and--min-change-percentcolumn pruning.- nf-test
tests/pipeline/compilation.nf.test: launchesrfd,rfd_partial, andrfd3in-previewmode to verify every workflow/module compiles; run per Nextflow version withNXF_VER=<version> nf-test ...to guard against version-specific DSL parser regressions.
Changed
- Docs: note Nextflow version compatibility. On Nextflow
26.04+(new strict parser default), setNXF_SYNTAX_PARSER=v1to use the legacy parser. - Trimmed README.md, testing section moved to
docs/docs/extra/development.md, general docs cleanup and corrections. manifest.nextflowVersionnow bounds the supported range to!>=23.04.0, <26.10(hard failure outside this range).- Set
nextflow.enable.configProcessNamesValidation = falseto silence the "There's no process matching config selector" warnings printed on every run (only the selected--methodworkflow is included, so thewithName:selectors for other methods' processes match nothing).
Fixed
germinal:--method germinalno longer crashes with aMissingPropertyExceptionwhen--germinal_pdb_diris omitted; the documented default (../pdbsrelative to the config) is now inferred correctly (config_pathis aPath, which has no.parentFile).rfd3: legacy--pmpnn_temperature,--pmpnn_augment_epsand--pmpnn_omit_aasflags are now honoured instead of being silently overridden by the modern--mpnn_*defaults. The modern name still takes precedence when both are set; defaults are unchanged (temperature0.1, structure noise0, omitCX, sequences-per-structure1).- Nextflow 24.04.3 compatibility: the
rfd3workflow andboltz_refold_coresubworkflow no longer trigger the "Variable already defined in the process scope" DSL parser error on Nextflow 24.04.3 (a bug fixed in the 24.10 parser rewrite). Channel/path local variables use plain assignments instead ofdefin these workflow bodies. foldseek: database names containing/(e.g.Alphafold/UniProt50,Alphafold/Swiss-Prot) now download and search correctly; the download step creates the nested output prefix directory and the local search resolves prefixes nested one level deep.examples/*/nextflow.dual-gpu.config: fixedif (params.gpu_devices) { maxForks = ... }insidewithName:blocks, which printed aWARN: Unknown directive 'params'on every dual-GPU example run and hard-errored (Unknown config attribute) if--gpu_deviceswas not passed. Replaced with a plain ternary assignment and a localparams { gpu_devices = '' }redeclaration so the overlay file can resolve the param without depending on cross-file config evaluation order.rfd: configurableRFDIFFUSIONviarfd_commandandrfd_model_directory_path(Pawsey config overrides inpawsey_setonix.config; GPU behaviour uses existingrequire_gpuandgpu_devices).rfd3:RFDIFFUSION3andROSETTAFOLD3now fail fast with a clear message whennvidia-smiis not installed (previously died with a crypticcommand not foundunderset -e).combine_scores.sh: updated to the currentresults/rfd/af2_initial_guess/{pdbs,scores}output layout (was still pointing at the pre-reorgresults/af2_initial_guess/...).
[0.2.0] - 2026-05-06
Added
- New
nci_gadi.configconfiguration profile for NCI Gadi HPC cluster. - Initial nf-test test scaffold (
nf-test.config,tests/) with a process test forUNIQUE_IDandRFDIFFUSION; documented indocs/docs/testing.md. - BoltzGen: support for list-valued
entities[].file.pathand multiple entities so all referenced files are staged as Nextflowpath()inputs. Referenced config YAMLs (.yaml/.ymlinentities[].file.path, eg for nanobody scaffolds) and the PDB/CIF files they reference internally are collected and staged so BoltzGen’s per-generation random selection over those configs is preserved. - Versioned documentation using mike; docs are now deployed for
main(alias:latest),develop(alias:dev), and version tags.
Fixed
- Boltz refold RMSD and ipSAE:
BOLTZ_COMPARE_COMPLEXandBOLTZ_COMPARE_BINDER_MONOMERnow use Boltz complex chain A = binder and B = target (fromcreate_boltz_yaml.pyIDs), while the input design keeps${binder_chain}/${target_chain}. Previously the same chain letters were used on both structures, which mis-superposed RFD3-style complexes (target A, binder B) and inflatedrmsd_target_aligned_binder/ ruined aligned PDBs;ipsae.pynow receives--binder-chain A --target-chain Bfor Boltz outputs. - Boltz:
BOLTZ,BOLTZ_COMPARE_COMPLEX, andBOLTZ_COMPARE_BINDER_MONOMERteeboltz predictto.boltz_predict_console.logand exit 1 if the log containsran out of memory, skipping batch(Boltz may otherwise exit 0 and leave outputs missing).
Changed
merge_scores.py: drop from the right any column that exists in the current left before each merge so the result has no_x/_ysuffixes; treat.cifas path-like (use basename for merge key) in addition to.pdb.trim_to_contigs.py:parse_contigs()now supports RFD3 v3 contig format (comma-separated,/0as separate element, e.g.A18-132,/0,65-120) in addition to v1 style.- Major project restructure shifting individual workflows into
workflows/, each launched via a singlemain.nfentry point with the--methodflag. --method rfdfor RFdiffusion binder design (previouslymain.nf)--method rfd_partialfor partial diffusion (previouslypartial.nf)--method bindcraftfor BindCraft (previouslybindcraft.nf)--method boltzgenfor BoltzGen (previouslyboltzgen.nf)--method boltz_pulldownfor Boltz Pulldown (previouslyboltz_pulldown.nf)- Modules reorganised into
modules/local/with workflow-specific subdirectories (rfd/,bindcraft/,boltzgen/,common/). - Extracted common Boltz-2 refolding and scoring logic into
BOLTZ_REFOLD_SCORINGsubworkflow (subworkflows/local/boltz_refold_scoring.nf).
Fixed
- BindCraft (
workflows/bindcraft.nf): omitting--hotspot_resno longer fails invalidateHotspotReswithUnknown method invocation 'trim' on Boolean type. - BindCraft (
workflows/bindcraft.nf): allow explicit--hotspot_res=""to pass through as a no-hotspot BindCraft setting, and normalise empty hotspot list entries before writing settings. - Declare
bindcraft_batch_sizedefault innextflow.configso Nextflow does not warn when parsingmodules/local/bindcraft/bindcraft.nf(unrelated to-profile m3). rmsd4all.py: cap worker processes to the number of pairs so single-pair comparisons (e.g. RFD3_RMSD with one design vs one refold) no longer spawn a large Pool and appear to hang; sequential path is used for one pair with progress logged.rmsd4all.py: add--max-structural-iterations(default 100). Biotite's refinement loop usesmax_iterations=infby default and only stops when anchors stabilize; with 3di the anchor set can fail to converge (oscillate) so the loop never exits. Capping iterations fixes the hang; 0 = no limit.rmsd4all.py: fix use ofarray_length(method) as if it were an attribute; uselen()for atom counts.
Removed
rmsd4all.py: remove--max-ca-for-tm-scoreand--pair-timeoutoptions.
[0.1.5] - 2026-01-28
Added
- New BoltzGen pipeline.
- Refold binder designs with Boltz, with post-AF2ig filtering and RMSD analysis of predicted complex and binder monomer.
- Added DOI (Zenodo) badge to
README.md, addedCITATION.cff. - Some parameter validation for
bindcraft.nf. - Write
params.jsonto output directory.
Changed
- Move 'filtering' result folder to 'rfdiffison/filtered'
- Don't output redundant .tsv files to the results directory.
- Changed default
--pmpnn_relax_cyclesfrom 0 to 3 - Made default queue size 1, for single local GPU mode.
- Added
m3-bdi.config, site specific for M3/MASSIVE HPC cluster. - Use the
nf-binder-design-utilscontainer instead ofmdanalysis. - Update config and docs to use -profile for site-specifc configurations
Fixed
- Fixed Quarto rendering permissions issues (copy Qmd to work folder).
[0.1.4] - 2025-08-12
Added
- BindCraft end-to-end workflow with basic HTML report
- GPU allocation heuristics for local multi-GPU workstations.
- HyperMPNN weights download script (
models/download_hypermpnn_weights.sh). - New runnable examples in
examples/.
Changed
- RFDiffusion
--hotspot_resno longer requires brackets inmain.nf. - Minor tweaks to site-specific configs for
m3andmlerp.
[0.1.3] - 2025-07-11
Added
- A plugin system for filtering designs based on calculated metrics.
--rfd_filtersparameter to apply filters to RFDiffusion backbones (e.g.,--rfd_filters "rg<25").- Initial filter plugin for radius of gyration (
rg). - Integration of BindCraft-derived scoring of designs, as
extra_scores.tsv. This adds metrics including: - Interface score, shape complementarity, dG, and dSASA.
- Secondary structure percentages (helix, sheet, loop) for the binder and interface.
- Unrelaxed and relaxed clash scores.
- Hotspot and target RMSD.
- Sequence-based metrics like extinction coefficient.
--pmpnn_omit_aasflag to exclude certain amino acids from designs (default 'CX').--rfd_compress_trajectoriesflag to gzip RFDiffusion traj/*.pdb files (defaulttrue).
Changed
- Filtering results are now saved to a subdirectory named after the pipeline step (in
filtering/rfdiffusion/). - The score merging script (
merge_scores.py) was improved to be more robust and handle an arbitrary number of score files. - Use more lightweight container for
get_contigs.nfandrenumber_residues.nfmodules.
Fixed
- The
gpu_deviceparameter is now correctly passed to the partial diffusion process, allowing proper GPU selection.
[0.1.2] - 2025-06-19
Added
- Added the
boltz_pulldown.nfprotocol. - Allow gpu device to be selected.
- Support relaxation in ProteinMPNN (
pmpnn_relax_cyclescan now be non-zero)
Changed
- Change
dl_binder_designoutput filenaming (include "_mpnn{n}" suffix) - Change RFDiffusion config handling when unspecified
- Docs: Add APPTAINER_TMPDIR and NXF_APPTAINER_CACHEDIR advice to M3-specific docs
Fixed
- Fix
get_contigsfor multi-chain targets. - Fix failure that occurred when using
--rfd_batch_size> 1.
[0.1.1] - 2025-04-04
Changed
- Update to use containers from Github package registry
[0.1] - 2025-03-24
Added
- Initial version with RFDiffusion->ProteinMPNN->af2_initial_guess binder design and partial diffusion pipelines.