Modeling Complexes and Ranking Ligands with Boltz-2

Most protein–ligand structure-prediction tools, like AlphaFold 3, Boltz-1, and Chai-1, stop at predicting the geometry of the resultant complex. Boltz-2 (preprint) goes further by predicting both structures and small-molecule binding affinity from sequence and SMILES, while supporting DNA and RNA partners. It builds on the cofolding ideas in Boltz-1, then adds a larger backbone, better controllability, and a dual affinity head. The result is a practical way to generate poses, prioritize compounds, and guide follow-up physics or experiments when speed matters.

What's New in Boltz-2

Boltz-2 is similar to Boltz-1, but contains numerous enhancements and new capabilities (as well as some deleterious changes). Here's a brief overview:

AspectBoltz-1Boltz-2
Structural engine48 PairFormer layers, 512-token crop64 layers, trifast kernels, 768-token crop
ControllabilityNone• Method conditioning (X-ray / NMR / MD)
• Multi-chain template steering
• Contact & pocket constraints
Physics qualityOptional steering potential (Boltz-1x)Optional steering potential (Boltz-2x)
Affinity headNonePairFormer-based dual head (probability + pIC50)
MSAOptionalRequired

Here's the authors' architecture diagram:

Boltz-2 architecture diagram

The architecture of Boltz-2 (Figure 2 from the preprint).

Several of these new features are incredibly powerful:

Unfortunately, Boltz-2 removes the ability to run inference without costly MSAs. If MSA-free inference is requested, consider using Boltz-1 or Chai-1 instead.

For more details about how Boltz-2 works, see our full Boltz-2 FAQ or the original preprint.

Where Boltz-2 Can Be Useful

Cofolding is useful whenever a rigid receptor limits realism. Boltz-2 generates binding poses that include side chain and backbone motion, then attaches a confidence score and an affinity estimate. This is not a replacement for FEP or long-timescale MD, but it is a strong first pass that can prune search space and surface plausible chemotypes.

Here's a plot showing Boltz-2's accuracy in virtual screening, illustrating superior accuracy vs. other high-throughput binding-affinity-prediction methods:

Comparison of Boltz-2 to other methods on MF-PCBA.

Figure 7 from the Boltz-2 paper, comparing Boltz-2's affinity prediction to other low-cost methods.

Limitations of Boltz-2

Despite the myriad successes of Boltz-2, challenges remain:

Furthermore, there are concerns that the reported performance of Boltz-2 can in large part be attributed to train–test leakage, meaning that the performance on targets dissimilar to the training set will be much worse. Here's a review from Karson Crispens and co-workers which alleges this:

The major weaknesses of the paper and the method are primarily related to the evaluation and analysis of the model's performance on realistic tasks. The protein and ligand training set lacks a principled split (the standard in the field is to use a scaffold split). This contributes to concerns about data leakage... Overall, we are concerned about data leakage between training and testing. We are curious why the authors used the split they did, and would appreciate commentary here, given the challenge of evaluating these models thoroughly.

For more Boltz-2 benchmark results, see our external Boltz-2 benchmark page.

Using Boltz-2 on Rowan

Through Rowan's web interface scientists can upload sequences and ligands, submit Boltz-2 jobs to GPU compute, and analyze the resulting structures and predicted binding affinity—all totally free of charge. Here's what a completed Boltz-2 prediction looks like on Rowan:

Rowan Boltz-2 result

View this calculation on Rowan

Python API

Boltz-2 calculations can also easily be submitted via Rowan's Python API, which is available for free to all Rowan users:

import rowan

rowan.api_key = "rowan-sk-asdf"

workflow = rowan.submit_protein_cofolding_workflow(
    initial_protein_sequences=[
        "MENFQKVEKIGEGTYGVVYKARNKLTGEVVALKKIRLDTETEGVPSTAIREISLLKELNHPNIVKLLDVIHTENKLYLVFEFLHQDLKKFMDASALTGIPLPLIKSYLFQLLQGLAFCHSHRVLHRDLKPQNLLINTEGAIKLADFGLARAFGVPVRTYTHEVVTLWYRAPEILLGCKYYSTAVDIWSLGCIFAEMVTRRALFPGDSEIDQLFRIFRTLGTPDEVVWPGVTSMPDYKPSFPKWARQDFSKVVPPLDEDGRSLLSQMLHYDPNKRISAKAALAHPFFQDVTKPVPHLRL"
    ],
    initial_smiles_list=["CCC(C)CN=C1NCC2(CCCOC2)CN1"],
    name="Boltz-2 cofolding job",
    model="boltz_2",
    ligand_binding_affinity_index=0,
)

workflow.wait_for_result()
workflow.fetch_latest(in_place=True)

print(workflow.data)
print(f"View the 3D structure on the web at labs.rowansci.com/protein-cofolding/{workflow.uuid}")

This prints the following data; the corresponding 3D structure can be viewed through Rowan's web interface.

{
  'lddt': [0.779, 0.909, 0.958, 0.982, 0.979, 0.969, 0.975, 0.959, 0.952, 0.918, 0.885, 0.848, 0.828, 0.803, 0.824, 0.873, 0.912, 0.953, 0.975, 0.985, 0.987, 0.987, 0.978, 0.969, 0.928, 0.946, 0.976, 0.961, 0.984, 0.987, 0.979, 0.977, 0.959, 0.918, 0.889, 0.738, 0.69, 0.614, 0.533, 0.575, 0.578, 0.707, 0.763, 0.809, 0.841, 0.877, 0.904, 0.896, 0.923, 0.948, 0.941, 0.947, 0.952, 0.953, 0.963, 0.962, 0.961, 0.929, 0.969, 0.988, 0.988, 0.99, 0.986, 0.985, 0.985, 0.981, 0.98, 0.971, 0.967, 0.962, 0.909, 0.865, 0.825, 0.766, 0.864, 0.915, 0.964, 0.972, 0.983, 0.979, 0.965, 0.986, 0.985, 0.952, 0.976, 0.972, 0.989, 0.973, 0.973, 0.989, 0.987, 0.982, 0.981, 0.984, 0.977, 0.976, 0.964, 0.986, 0.989, 0.987, 0.989, 0.989, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.989, 0.989, 0.99, 0.988, 0.983, 0.989, 0.987, 0.976, 0.965, 0.974, 0.953, 0.979, 0.951, 0.95, 0.985, 0.972, 0.985, 0.945, 0.914, 0.989, 0.985, 0.989, 0.988, 0.986, 0.977, 0.989, 0.989, 0.99, 0.989, 0.987, 0.971, 0.906, 0.883, 0.876, 0.894, 0.882, 0.877, 0.845, 0.838, 0.814, 0.82, 0.779, 0.752, 0.776, 0.746, 0.678, 0.744, 0.783, 0.766, 0.808, 0.81, 0.928, 0.964, 0.983, 0.987, 0.975, 0.989, 0.989, 0.989, 0.978, 0.987, 0.99, 0.984, 0.979, 0.95, 0.967, 0.939, 0.986, 0.988, 0.99, 0.987, 0.989, 0.99, 0.99, 0.989, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.989, 0.99, 0.989, 0.988, 0.987, 0.985, 0.986, 0.989, 0.989, 0.985, 0.983, 0.948, 0.967, 0.969, 0.987, 0.985, 0.986, 0.988, 0.989, 0.989, 0.99, 0.99, 0.989, 0.989, 0.989, 0.989, 0.99, 0.989, 0.988, 0.989, 0.986, 0.986, 0.99, 0.989, 0.989, 0.989, 0.989, 0.985, 0.987, 0.987, 0.988, 0.989, 0.989, 0.988, 0.989, 0.989, 0.989, 0.988, 0.989, 0.986, 0.986, 0.981, 0.95, 0.93, 0.974, 0.982, 0.979, 0.987, 0.974, 0.897, 0.989, 0.984, 0.985, 0.989, 0.99, 0.988, 0.988, 0.99, 0.99, 0.987, 0.99, 0.99, 0.99, 0.989, 0.989, 0.99, 0.989, 0.988, 0.987, 0.99, 0.99, 0.99, 0.99, 0.989, 0.99, 0.99, 0.99, 0.989, 0.99, 0.989, 0.99, 0.99, 0.987, 0.988, 0.989, 0.989, 0.988, 0.987, 0.972, 0.984, 0.945, 0.966, 0.901, 0.929, 0.502, 0.601, 0.671, 0.589, 0.677, 0.666, 0.735, 0.695, 0.671, 0.801, 0.71, 0.707, 0.733, 0.743, 0.738, 0.709, 0.69], 
  'model': 'boltz_2', 
  'scores': {'ptm': 0.974, 'iptm': 0.87, 'avg_lddt': 0.936, 'confidence_score': 0.923}, 
  'messages': [], 
  'affinity_score': {'pred_value': 1.434, 'pred_value1': 2.226, 'pred_value2': 0.643, 'probability_binary': 0.045, 'probability_binary1': 0.034, 'probability_binary2': 0.056}, 
  'use_msa_server': True, 
  'use_potentials': False, 
  'pocket_constraints': [], 
  'contact_constraints': [], 
  'initial_smiles_list': ['CCC(C)CN=C1NCC2(CCCOC2)CN1'], 
  'use_templates_server': False, 
  'predicted_structure_uuid': '7eb21671-eec8-450a-a64c-fbb46fdd758d', 
  'initial_protein_sequences': ['MENFQKVEKIGEGTYGVVYKARNKLTGEVVALKKIRLDTETEGVPSTAIREISLLKELNHPNIVKLLDVIHTENKLYLVFEFLHQDLKKFMDASALTGIPLPLIKSYLFQLLQGLAFCHSHRVLHRDLKPQNLLINTEGAIKLADFGLARAFGVPVRTYTHEVVTLWYRAPEILLGCKYYSTAVDIWSLGCIFAEMVTRRALFPGDSEIDQLFRIFRTLGTPDEVVWPGVTSMPDYKPSFPKWARQDFSKVVPPLDEDGRSLLSQMLHYDPNKRISAKAALAHPFFQDVTKPVPHLRL'], 
  'ligand_binding_affinity_index': 0
}

For a more complex example showing how to do a virtual screen in parallel with Boltz-2, see our example script on GitHub. Rowan automatically scales GPU-based compute to meet demand, making it possible to run hundreds or thousands of Boltz-2 jobs in just a few lines of code.

Ready to test a target or a series? Create a free Rowan account and start running Boltz-2 today.

Banner background image