> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# BindCraft

> [BindCraft](https://github.com/martinpacesa/BindCraft) is a de novo protein binder design pipeline from the [Correia Lab](https://www.epfl.ch/labs/lpdi/) at EPFL. It hallucinates a binder against a frozen target by back-propagating a structural objective through AlphaFold2, refines the design with ProteinMPNN, re-validates the redesigned complex with AlphaFold2, and filters every candidate against a battery of physics-based interface metrics computed with PyRosetta. This toolkit exposes the full pipeline through a single registered tool that returns the accepted designs together with their relaxed complexes and per-design metrics.

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/bindcraft/hero.png" alt="BindCraft" />
</div>

<p class="entity-disclaimer">This toolkit is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-bindcraft" id="none-bindcraft" class="tab-radio-input" />

<input type="radio" name="tab-bindcraft" id="github-bindcraft" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-bindcraft" id="paper-bindcraft" class="tab-radio-input" />

<input type="radio" name="tab-bindcraft" id="cite-bindcraft" class="tab-radio-input" />

<input type="radio" name="tab-bindcraft" id="source-bindcraft" class="tab-radio-input" />

<input type="radio" name="tab-bindcraft" id="notebook-bindcraft" class="tab-radio-input" />

<input type="radio" name="tab-bindcraft" id="proto-bindcraft" class="tab-radio-input" />

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-bindcraft" class="tool-tab tab-open badge-github"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> GitHub</label><label for="none-bindcraft" class="tool-tab tab-close badge-github"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> GitHub</label></span> <span class="tool-tab-wrap"><label for="paper-bindcraft" class="tool-tab tab-open badge-paper"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Publication</label><label for="none-bindcraft" class="tool-tab tab-close badge-paper"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Publication</label></span> <span class="tool-tab-wrap"><label for="cite-bindcraft" class="tool-tab tab-open badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label><label for="none-bindcraft" class="tool-tab tab-close badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label></span> <span class="tool-tab-wrap"><label for="source-bindcraft" class="tool-tab tab-open badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Tool Source</label><label for="none-bindcraft" class="tool-tab tab-close badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Tool Source</label></span> <span class="tool-tab-wrap"><label for="notebook-bindcraft" class="tool-tab tab-open badge-notebook"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label><label for="none-bindcraft" class="tool-tab tab-close badge-notebook"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label></span> <span class="tool-tab-wrap"><label for="proto-bindcraft" class="tool-tab tab-open badge-local"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label><label for="none-bindcraft" class="tool-tab tab-close badge-local"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label></span>
</div>

<a href="https://github.com/martinpacesa/BindCraft" target="_blank" class="tab-panel github-panel" data-tab="github-bindcraft">
  <div class="gh-card-wrap">
    <img src="https://opengraph.githubassets.com/1/martinpacesa/BindCraft" class="gh-card-img img-fallback" alt="martinpacesa/BindCraft" />

    <div class="gh-card-fallback">
      <div class="gh-fallback-org"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> martinpacesa/BindCraft</div>
    </div>
  </div>

  <span class="panel-goto-btn gh-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View repo</span></span>
</a>

<a href="https://doi.org/10.1038/s41586-025-09429-6" target="_blank" class="tab-panel paper-panel" data-tab="paper-bindcraft">
  <div class="paper-info">
    <div class="paper-title">One-shot design of functional protein binders with BindCraft</div>
    <div class="paper-meta">Martin Pacesa, Lennart Nickel, ... Bruno E. Correia</div>
    <div class="paper-meta paper-venue">Nature (2025)</div>
  </div>

  <span class="panel-goto-btn pub-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Read paper</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-bindcraft">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{pacesa2025bindcraft,
      title={One-shot design of functional protein binders with BindCraft},
      author={Pacesa, Martin and Nickel, Lennart and Schellhaas, Christian and Schmidt, Joseph and Pyatova, Ekaterina and Kissling, Lucas and Barendse, Patrick and Choudhury, Jagrity and Kapoor, Srajan and Alcaraz-Serna, Ana and Cho, Yehlin and Ghamary, Kourosh H. and Vinu{\'e}, Laura and Yachnin, Brahm J. and Wollacott, Andrew M. and Buckley, Stephen and Westphal, Adrie H. and Lindhoud, Simon and Georgeon, Sandrine and Goverde, Casper A. and Hatzopoulos, Georgios N. and G{\"o}nczy, Pierre and Muller, Yannick D. and Schwank, Gerald and Swarts, Daan C. and Vecchio, Alex J. and Schneider, Bernard L. and Ovchinnikov, Sergey and Correia, Bruno E.},
      journal={Nature},
      volume={646},
      number={8084},
      pages={483--492},
      year={2025},
      month={Aug},
      publisher={Springer Science and Business Media LLC},
      doi={10.1038/s41586-025-09429-6},
      issn={1476-4687}
    }
    ```
  </div>

  <span class="panel-goto-btn cite-copy-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Copy citation</span></span>
</div>

<a href="https://github.com/evo-design/proto-tools/tree/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft" target="_blank" class="tab-panel source-panel" data-tab="source-bindcraft">
  <div class="source-info">
    <img src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-tools<span class="source-subpath">/proto\_tools/tools/binder\_design/bindcraft</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-bindcraft">
  <div class="notebook-info">
    <span class="notebook-icon">
      <svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
        <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" />

        <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
      </svg>
    </span>

    <span class="notebook-label">Open Notebook</span>
  </div>

  <span class="panel-goto-btn notebook-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open notebook</span></span>
</a>

<div class="tab-panel proto-panel run-local-panel" data-tab="proto-bindcraft">
  <a href="https://github.com/evo-design/proto-tools" target="_blank" class="run-local-preview">
    <img noZoom src="https://opengraph.githubassets.com/1/evo-design/proto-tools" alt="proto-tools on GitHub" />
  </a>

  <div class="run-local-install">
    <span class="run-local-label">Run locally with proto-tools</span>

    <div class="run-local-code">
      ```bash theme={null}
      pip install git+https://github.com/evo-design/proto-tools.git
      ```
    </div>
  </div>
</div>

<div class="entity-contributors"><span class="entity-contributors-label">Toolkit contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/bviggiano" target="_blank" rel="noopener" title="bviggiano: 11 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/21143637?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">bviggiano</span></a><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 8 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a><a class="entity-contributor" href="https://github.com/adititm" target="_blank" rel="noopener" title="adititm: 1 commit"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/61667248?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">adititm</span></a></span></div>

| Function                 | Description                                                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------------------ | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_bindcraft_design()` | End-to-end binder design pipeline: AlphaFold2 hallucination + ProteinMPNN refinement + AlphaFold2... (GPU) | <a href="#api-run-bindcraft-design" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft/bindcraft_design.py#L934" target="_blank" class="func-table-btn func-source-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a> |

<Note>
  **License:** BindCraft's own code is licensed under MIT, but it runs as a pipeline that depends on bundled components and model weights under separate license terms, including non-commercial or restricted-use terms. The bundled model weights are licensed under CC-BY-4.0. As a whole the pipeline has restrictions around commercial use and may require explicit attribution when utilized.

  Bundled dependencies, each under its own license:

  * [PyRosetta](https://bio-pro.mintlify.app/tools/structure-scoring/pyrosetta): Custom (PyRosetta Software License)

  Review the [code license](https://github.com/martinpacesa/BindCraft/blob/main/LICENSE) and the [model weights license](https://github.com/google-deepmind/alphafold#model-parameters-license) before any commercial use or redistribution.
</Note>

## Background

BindCraft ([Pacesa et al., 2025](https://doi.org/10.1038/s41586-025-09429-6)) addresses the problem of generating protein binders against a target without the need for high-throughput experimental screening or curated structural templates. The published pipeline reports experimental success rates of 10 to 100 percent across diverse and challenging targets including cell-surface receptors, common allergens, de novo designed proteins, and multi-domain nucleases such as CRISPR-Cas9, and produces binders with nanomolar affinity. The authors demonstrate functional and therapeutic applications including reduction of IgE binding to birch allergen in patient-derived samples, modulation of Cas9 gene editing activity, and reduction of cytotoxicity from a foodborne bacterial enterotoxin.

The pipeline chains four stages per design trajectory. First, an AlphaFold2 hallucination step initialises a binder of randomly sampled length adjacent to the frozen target and optimises the binder logits by gradient descent against a weighted sum of structural losses that includes per-residue pLDDT, intra-binder and inter-chain PAE, intra-binder and interface contact counts, interface pTM, a helicity bias, and a radius-of-gyration term. Second, the hallucinated backbone is handed to ProteinMPNN ([Dauparas et al., 2022](https://doi.org/10.1126/science.add2187)) which samples a set of foldable sequences while optionally holding interface residues fixed. Third, each ProteinMPNN-refined complex is re-predicted from scratch with AlphaFold2 multimer ([Jumper et al., 2021](https://doi.org/10.1038/s41586-021-03819-2)) as an independent validation of the design. Fourth, the validated complex is relaxed with PyRosetta and scored against an extensive set of interface metrics including binding-energy difference, shape complementarity, buried surface area, hydrogen bond counts, packing statistic, secondary-structure composition, and hotspot RMSD. A trajectory is accepted only when every metric clears the corresponding upstream filter threshold.

### Learning Resources

* [martinpacesa/BindCraft](https://github.com/martinpacesa/BindCraft) (Correia Lab, EPFL). Official BindCraft repository, command-line interface, and reference filter configurations.
* [BindCraft tutorial notebook](https://github.com/martinpacesa/BindCraft/blob/main/notebooks/BindCraft.ipynb) (Correia Lab). Walkthrough of the design pipeline with pre-set example targets and parameter explanations.

## Tools

<a name="api-run-bindcraft-design" />

<div class="tool-section-card tool-section-card--design">
  ### BindCraft Binder Design (`bindcraft-design`)

  Designs one or more de novo protein binders against a user-supplied target. The tool takes a target structure together with the target chain identifiers, an optional hotspot residue list, and a binder length range, and runs the BindCraft pipeline until either the requested number of accepted designs has been produced or the configured trajectory limit has been reached. The output carries each accepted binder as an amino-acid sequence, a relaxed target-binder complex `Structure` with per-residue pLDDT in the B-factor column, and the per-design BindCraft metrics used by the filter check.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft/bindcraft_design.py#L314" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Input: BindCraftInput">
      <ParamField path="target_pdb" type="Structure" required>
        Target structure. Accepts a file path, raw PDB/CIF content string, `Structure` object, or a dict in the shape produced by `Structure.model_dump(mode='json')`.

        <Expandable title="Structure">
          <ParamField path="structure" type="string" required>
            Raw structure content in PDB or CIF format.
          </ParamField>

          <ParamField path="structure_format" type="string">
            Format of the content string (auto-detected if omitted).
          </ParamField>

          <ParamField path="b_factor_type" type="BFactorType" default="unspecified">
            What the B-factor column represents.
          </ParamField>

          <ParamField path="source" type="string">
            Optional source identifier (filepath or tool name).
          </ParamField>

          <ParamField path="metrics" type="Metrics">
            Associated metrics (e.g., pLDDT, pTM scores, per-chain lists, pairwise matrices). None values are stripped at construction.
          </ParamField>
        </Expandable>
      </ParamField>

      <ParamField path="target_chain" type="string" default="A">
        Chain ID(s) of the frozen target (comma-separated for multi-chain). Maps to BindCraft's `chains`.
      </ParamField>

      <ParamField path="target_hotspot_residues" type="string">
        Comma-separated 1-indexed residue positions on the target that the binder must contact. Supports ranges (e.g. `"1-10,56,78"`). `None` or empty = unrestricted.
      </ParamField>

      <ParamField path="binder_lengths" type="array" default="[65, 150]">
        `(min, max)` binder length range. Maps to BindCraft's `lengths`.
      </ParamField>

      <ParamField path="binder_name" type="string" default="binder">
        Project identifier — used as a prefix in output filenames.
      </ParamField>

      <ParamField path="number_of_final_designs" type="integer" default="100">
        Target accepted-design count. The pipeline stops after reaching this count or after `max_trajectories` attempts (whichever comes first).
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft/bindcraft_design.py#L381" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Config: BindCraftConfig">
      <ParamField path="design_algorithm" type="enum" default="4stage">
        Hallucination algorithm. Drives which iteration-count fields below are actually consumed (see each field's `depends_on`). Upstream

        Available options: `2stage`, `3stage`, `4stage`, `greedy`, `mcmc`
      </ParamField>

      <ParamField path="use_multimer_design" type="boolean" default="True">
        Use AF2 multimer parameters during hallucination. Every upstream preset uses multimer.
      </ParamField>

      <ParamField path="omit_AAs" type="string" default="C">
        Amino acids to ban during design (no separator). Upstream default: `"C"`.
      </ParamField>

      <ParamField path="force_reject_AA" type="boolean" default="False">
        Reject any design containing `omit_AAs`.
      </ParamField>

      <ParamField path="soft_iterations" type="integer" default="75">
        Soft-stage iterations. Used by 2stage/3stage/4stage.
      </ParamField>

      <ParamField path="temporary_iterations" type="integer" default="45">
        Temporary-stage iterations. Used by 3stage/4stage.
      </ParamField>

      <ParamField path="hard_iterations" type="integer" default="5">
        Hard-stage iterations. Used by 3stage/4stage.
      </ParamField>

      <ParamField path="greedy_iterations" type="integer" default="15">
        Greedy/MCMC iterations. Used by 2stage/4stage/greedy/mcmc.
      </ParamField>

      <ParamField path="greedy_percentage" type="number" default="1.0">
        Greedy/MCMC mutation rate as % of binder length.
      </ParamField>

      <ParamField path="weights_plddt" type="number" default="0.1">
        pLDDT loss weight.
      </ParamField>

      <ParamField path="weights_pae_intra" type="number" default="0.4">
        Intra-chain PAE loss weight.
      </ParamField>

      <ParamField path="weights_pae_inter" type="number" default="0.1">
        Inter-chain (interface) PAE loss weight.
      </ParamField>

      <ParamField path="weights_con_intra" type="number" default="1.0">
        Intra-chain contact loss weight.
      </ParamField>

      <ParamField path="weights_con_inter" type="number" default="1.0">
        Inter-chain (interface) contact loss weight.
      </ParamField>

      <ParamField path="weights_helicity" type="number" default="-0.3">
        Helicity bias weight (negative discourages helices).
      </ParamField>

      <ParamField path="weights_iptm" type="number" default="0.05">
        Interface pTM loss weight (only used when `use_i_ptm_loss=True`).
      </ParamField>

      <ParamField path="weights_rg" type="number" default="0.3">
        Radius-of-gyration loss weight (only used when `use_rg_loss=True`).
      </ParamField>

      <ParamField path="weights_termini_loss" type="number" default="0.1">
        N-/C-termini distance loss weight (only used when `use_termini_distance_loss=True`).
      </ParamField>

      <ParamField path="random_helicity" type="boolean" default="False">
        Randomize the sign of `weights_helicity` per trajectory.
      </ParamField>

      <ParamField path="use_i_ptm_loss" type="boolean" default="True">
        Enable interface pTM loss.
      </ParamField>

      <ParamField path="use_rg_loss" type="boolean" default="True">
        Enable radius-of-gyration loss.
      </ParamField>

      <ParamField path="use_termini_distance_loss" type="boolean" default="False">
        Enable termini-distance loss.
      </ParamField>

      <ParamField path="intra_contact_distance" type="number" default="14.0">
        Intra-chain contact distance cutoff (Å).
      </ParamField>

      <ParamField path="inter_contact_distance" type="number" default="20.0">
        Inter-chain contact distance cutoff (Å).
      </ParamField>

      <ParamField path="intra_contact_number" type="integer" default="2">
        Number of intra-chain contacts per residue.
      </ParamField>

      <ParamField path="inter_contact_number" type="integer" default="2">
        Number of inter-chain contacts per residue.
      </ParamField>

      <ParamField path="rm_template_seq_design" type="boolean" default="False">
        Mask target template sequence during hallucination.
      </ParamField>

      <ParamField path="rm_template_seq_predict" type="boolean" default="False">
        Mask target template sequence during validation.
      </ParamField>

      <ParamField path="rm_template_sc_design" type="boolean" default="False">
        Mask target template side chains during hallucination.
      </ParamField>

      <ParamField path="rm_template_sc_predict" type="boolean" default="False">
        Mask target template side chains during validation.
      </ParamField>

      <ParamField path="predict_initial_guess" type="boolean" default="False">
        Use the trajectory structure as AF2's initial guess.
      </ParamField>

      <ParamField path="predict_bigbang" type="boolean" default="False">
        Use AF2's "Big Bang" recycle initialisation.
      </ParamField>

      <ParamField path="enable_mpnn" type="boolean" default="True">
        Run ProteinMPNN sequence refinement after each accepted trajectory. When False, the `mpnn_*` / `num_seqs` / `max_mpnn_sequences` / `sampling_temp` / `backbone_noise` / `model_path` fields are inert.
      </ParamField>

      <ParamField path="mpnn_fix_interface" type="boolean" default="True">
        Fix interface residues during MPNN redesign.
      </ParamField>

      <ParamField path="num_seqs" type="integer" default="20">
        Number of MPNN sequences to sample per trajectory.
      </ParamField>

      <ParamField path="max_mpnn_sequences" type="integer" default="2">
        Max MPNN sequences to validate per trajectory.
      </ParamField>

      <ParamField path="sampling_temp" type="number" default="0.1">
        MPNN sampling temperature (lower = more deterministic).
      </ParamField>

      <ParamField path="backbone_noise" type="number" default="0.0">
        MPNN backbone noise.
      </ParamField>

      <ParamField path="model_path" type="enum" default="v_48_020">
        MPNN model checkpoint name.

        Available options: `v_48_002`, `v_48_010`, `v_48_020`, `v_48_030`
      </ParamField>

      <ParamField path="mpnn_weights" type="enum" default="soluble">
        MPNN weight set.

        Available options: `original`, `soluble`
      </ParamField>

      <ParamField path="num_recycles_design" type="integer" default="1">
        AF2 recycles during hallucination.
      </ParamField>

      <ParamField path="num_recycles_validation" type="integer" default="3">
        AF2 recycles during validation.
      </ParamField>

      <ParamField path="optimise_beta" type="boolean" default="True">
        4stage-only — increase recycles + iterations mid-trajectory when the soft-stage output is beta-heavy.
      </ParamField>

      <ParamField path="optimise_beta_extra_soft" type="integer" default="0">
        Extra soft iterations for beta-heavy designs.
      </ParamField>

      <ParamField path="optimise_beta_extra_temp" type="integer" default="0">
        Extra temporary iterations for beta-heavy designs.
      </ParamField>

      <ParamField path="optimise_beta_recycles_design" type="integer" default="3">
        Recycles during hallucination for beta-heavy designs.
      </ParamField>

      <ParamField path="optimise_beta_recycles_valid" type="integer" default="3">
        Recycles during validation for beta-heavy designs.
      </ParamField>

      <ParamField path="max_trajectories" type="integer | boolean" default="False">
        Max hallucination trajectories before stopping. `False` (upstream default) = unlimited; positive int = cap.
      </ParamField>

      <ParamField path="enable_rejection_check" type="boolean" default="True">
        Enable rolling acceptance-rate monitoring (stops the run if it stalls).
      </ParamField>

      <ParamField path="acceptance_rate" type="number" default="0.01">
        Minimum design acceptance rate to keep running.
      </ParamField>

      <ParamField path="start_monitoring" type="integer" default="600">
        Trajectory count before acceptance-rate monitoring starts.
      </ParamField>

      <ParamField path="filter_overrides" type="Dict[string, any]">
        Per-metric threshold overrides merged on top of the upstream default filters at dispatch time. Keys are upstream metric names (e.g. `"Average_pLDDT"`); values are upstream filter dicts (e.g. `{"threshold": 0.85, "higher": True}`).
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cuda">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer">
        Maximum execution time in seconds. `None` (default) waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft/bindcraft_design.py#L816" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Output: BindCraftOutput">
      <ResponseField name="designs" type="List[BindCraftDesign]">
        Accepted binder designs (length is at most `BindCraftInput.number_of_final_designs`).

        <Expandable title="BindCraftDesign">
          <ResponseField name="design_name" type="string" required>
            Unique design identifier emitted by upstream (e.g. `"binder_l60_s12345_mpnn3"`).
          </ResponseField>

          <ResponseField name="binder_sequence" type="string" required>
            Designed binder amino-acid sequence (1-letter codes).
          </ResponseField>

          <ResponseField name="structure" type="Structure" required>
            Relaxed target+binder complex; B-factors are pLDDT on the 0-100 PDB scale (`b_factor_type=PLDDT`).
          </ResponseField>

          <ResponseField name="metrics" type="BindCraftMetrics" required>
            Per-design averaged metrics that the filter check evaluates against.
          </ResponseField>

          <ResponseField name="seed" type="integer" required>
            Random seed of the trajectory that produced this design.
          </ResponseField>

          <ResponseField name="interface_aas" type="Dict[string, integer]">
            Amino-acid composition at the binder-target interface.
          </ResponseField>

          <ResponseField name="interface_residues" type="List[integer]">
            1-indexed binder residue positions at the interface.
          </ResponseField>
        </Expandable>
      </ResponseField>

      <ResponseField name="n_trajectories_run" type="integer">
        Total trajectories attempted before stopping (success or hitting `max_trajectories`).
      </ResponseField>

      <ResponseField name="n_designs_accepted" type="integer">
        Designs that passed all filters (equals `len(designs)`).
      </ResponseField>

      **Metrics**

      | Metric                       | Type  | Range        | Availability |
      | ---------------------------- | ----- | ------------ | ------------ |
      | `avg_plddt`                  | float | 0.0 to 1.0   |              |
      | `avg_ptm`                    | float | 0.0 to 1.0   |              |
      | `avg_iptm`                   | float | 0.0 to 1.0   |              |
      | `avg_pae`                    | float | ≥ 0.0        |              |
      | `avg_ipae`                   | float | ≥ 0.0        |              |
      | `avg_iplddt`                 | float | 0.0 to 1.0   |              |
      | `avg_ss_plddt`               | float | 0.0 to 1.0   |              |
      | `avg_binder_plddt`           | float | 0.0 to 1.0   |              |
      | `avg_binder_ptm`             | float | 0.0 to 1.0   |              |
      | `avg_binder_pae`             | float | ≥ 0.0        |              |
      | `binder_energy_score`        | float | unbounded    |              |
      | `dG`                         | float | unbounded    |              |
      | `dSASA`                      | float | ≥ 0.0        |              |
      | `dG_per_dSASA`               | float | unbounded    |              |
      | `interface_sasa_pct`         | float | 0.0 to 100.0 |              |
      | `interface_hydrophobicity`   | float | 0.0 to 100.0 |              |
      | `surface_hydrophobicity`     | float | 0.0 to 1.0   |              |
      | `shape_complementarity`      | float | 0.0 to 1.0   |              |
      | `packstat`                   | float | 0.0 to 1.0   |              |
      | `n_interface_hbonds`         | float | ≥ 0.0        |              |
      | `interface_hbonds_pct`       | float | 0.0 to 100.0 |              |
      | `n_interface_unsat_hbonds`   | float | ≥ 0.0        |              |
      | `interface_unsat_hbonds_pct` | float | 0.0 to 100.0 |              |
      | `n_interface_residues`       | float | ≥ 0.0        |              |
      | `binder_helix_pct`           | float | 0.0 to 100.0 |              |
      | `binder_betasheet_pct`       | float | 0.0 to 100.0 |              |
      | `binder_loop_pct`            | float | 0.0 to 100.0 |              |
      | `interface_helix_pct`        | float | 0.0 to 100.0 |              |
      | `interface_betasheet_pct`    | float | 0.0 to 100.0 |              |
      | `interface_loop_pct`         | float | 0.0 to 100.0 |              |
      | `hotspot_rmsd`               | float | ≥ 0.0        |              |
      | `target_rmsd`                | float | ≥ 0.0        |              |
      | `binder_rmsd`                | float | ≥ 0.0        |              |
      | `unrelaxed_clashes`          | float | ≥ 0.0        |              |
      | `relaxed_clashes`            | float | ≥ 0.0        |              |
    </Accordion>
  </div>

  #### Applications

  This tool is appropriate for de novo binder generation against a structurally characterised target where no curated antibody scaffold or pre-existing binder is available. Representative applications include designing miniprotein binders against cell-surface receptors, generating binders that occlude a specific epitope or active site through hotspot targeting, producing structurally diverse binder candidates for downstream therapeutic engineering, and benchmarking AlphaFold2-hallucination as a binder discovery method against alternative approaches.

  #### Usage Tips

  * **Provide a hotspot residue list when targeting a defined epitope.** Set `target_hotspot_residues` to a comma-separated list of residue positions on the target structure, with ranges supported (for example `"1-10,56,78"`). Residue numbering is 1-indexed to match standard biological residue numbering conventions. Without hotspots the binder may land anywhere on the target surface. With hotspots, BindCraft biases the hallucination loss to bring the binder into contact with the specified residues. Choose functional residues such as active sites, paratope contacts, or catalytic loops rather than arbitrary surface positions.
  * **`binder_lengths` defaults to `(65, 150)` residues, matching the upstream default.** Binders below approximately 50 residues are effectively peptides and the AlphaFold2 multimer signal weakens. Binders above approximately 200 residues introduce significant GPU memory and per-trajectory runtime costs. Choose a tighter range to focus a campaign on a specific binder size class.
  * **`weights_helicity` controls the helix bias during hallucination.** The default of `-0.3` is a mild anti-helix bias chosen by the upstream authors because AlphaFold2 tends to over-produce alpha-helical bundles. Set a positive value to encourage helices for helix-friendly targets, or set `random_helicity=True` to randomise the sign per trajectory and increase secondary-structure diversity across the campaign.
  * **`optimise_beta=True` (the default) adds extra hallucination iterations and AlphaFold2 recycles when a trajectory looks beta-heavy.** Keep this enabled for any target that may favour beta-strand interfaces, such as immunoglobulin folds. The behaviour is gated on detected sheet content during the trajectory.
  * **`filter_overrides` lets you relax or tighten individual filter thresholds.** Pass a dict keyed by upstream metric name (such as `"Average_i_pTM"`) and valued as a filter dict (`{"threshold": 0.45, "higher": True}`). Only the listed metrics are overridden; every other filter keeps its upstream default. Lower the interface pTM or shape complementarity threshold first if zero designs are accepted on a hard target.
  * **Production runs use `number_of_final_designs=100` and `max_trajectories=False`.** This is the upstream default and produces enough accepted designs for downstream triage and experimental ordering. For a smoke test, set both to `1` together with reduced iteration counts (for example `soft_iterations=10`, `temporary_iterations=5`, `hard_iterations=2`, `greedy_iterations=2`) to verify the install and produce a single sample.
  * **`enable_rejection_check=True` (the default) aborts a run early if the rolling acceptance rate falls below `acceptance_rate=0.01` after `start_monitoring=600` trajectories.** Disable this gate when working on stubborn targets where you are willing to grind through many failed trajectories before the first acceptance.
  * **The output is iterable.** Iterating directly over the returned `BindCraftOutput` yields each accepted `BindCraftDesign` in turn, and `len(result)` returns the number of accepted designs.
  * **Complementary tools cover adjacent design tasks.** Reach for `proteinmpnn-sample` when an existing target-bound binder backbone only needs sequence redesign, `alphafold2-gradient` (with the Germinal backend) or a dedicated antibody-design pipeline for CDR-only redesign on a fixed antibody framework, `rfdiffusion3-design` when only a backbone is required without an accompanying sequence, and chemistry-aware ligand generation, docking, and scoring tools when the target is a small-molecule ligand rather than a protein binder.
</div>

## Toolkit Notes

These apply to every BindCraft tool in this toolkit (`bindcraft-design`).

* **The pipeline runs on a single GPU per trajectory and benefits from 32 to 80 GB of GPU memory.** AlphaFold2 multimer dominates the memory footprint and scales with the combined target plus binder length. For targets larger than approximately 2000 residues, trim the target to its binder-accessible domain before running. To parallelise across multiple GPUs, run multiple instances of `bindcraft-design` concurrently through a `ToolPool`.
* **The first run downloads approximately 5.5 GB of AlphaFold2 weights together with the ColabDesign, ProteinMPNN, and BindCraft repositories.** Subsequent runs reuse the cached weights, which are shared with the proto-tools `alphafold2` toolkit.

<Tip>
  **Example notebook:** See the [full working example](https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/bindcraft/examples/example.ipynb) for a copy-paste-ready walkthrough.
</Tip>

## Infrastructure Guides

The following guides cover how to run tools efficiently and at scale.

<CardGroup cols={2}>
  <Card title="Tool Persistence" icon="repeat" href="/docs/tools/guides/tool-persistence">Keep a tool's model warm across calls instead of reloading it every invocation.</Card>
  <Card title="Device Management" icon="cpu" href="/docs/tools/guides/device-management">How GPUs are allocated to tools and how to target specific devices.</Card>
  <Card title="Parallel Execution" icon="layers" href="/docs/tools/guides/parallel-execution">Fan a batch of inputs out across multiple GPUs.</Card>
</CardGroup>
