> ## 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.

# FreeBindCraft

> [FreeBindCraft](https://github.com/cytokineking/FreeBindCraft) is a PyRosetta-free fork of [BindCraft](https://github.com/martinpacesa/BindCraft), the de novo protein binder design pipeline from the Correia Lab at EPFL. It hallucinates a binder against a frozen target with AlphaFold2, refines it with ProteinMPNN, re-validates the complex, and scores the interface — replacing every PyRosetta step with an open-source equivalent (OpenMM, FreeSASA, sc-rs). The result is a single registered tool that returns accepted binders with their relaxed complexes and per-design metrics, with no PyRosetta license restriction so it can be hosted commercially.

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

<Note>
  **License:** FreeBindCraft uses MIT for code and CC-BY-4.0 for model weights and may require explicit attribution when utilized. Please refer to the [code license](https://github.com/cytokineking/FreeBindCraft/blob/master/LICENSE) and [model weights license](https://github.com/google-deepmind/alphafold#model-parameters-license) for full terms.
</Note>

<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-freebindcraft" id="none-freebindcraft" class="tab-radio-input" />

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

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

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

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

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

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

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" 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-freebindcraft" class="tool-tab tab-open badge-proto"><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="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /></svg> Open on Proto</label><label for="none-freebindcraft" class="tool-tab tab-close badge-proto"><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="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /></svg> Open on Proto</label></span>
</div>

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

    <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> cytokineking/FreeBindCraft</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-freebindcraft">
  <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-freebindcraft">
  <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}
    }

    @misc{freebindcraft2025,
      title={FreeBindCraft: BindCraft with optional, PyRosetta-free scoring and relaxation},
      author={{cytokineking} and {FreeBindCraft contributors}},
      year={2025},
      howpublished={\url{https://github.com/cytokineking/FreeBindCraft}},
      note={MIT-licensed fork of BindCraft replacing PyRosetta with OpenMM, FreeSASA, and sc-rs}
    }
    ```
  </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/freebindcraft" target="_blank" class="tab-panel source-panel" data-tab="source-freebindcraft">
  <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/freebindcraft</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/freebindcraft/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-freebindcraft">
  <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" data-tab="proto-freebindcraft">
  <div class="proto-info">
    <div class="proto-cloud">
      <svg class="proto-cloud-bg" viewBox="0 0 640 512" xmlns="http://www.w3.org/2000/svg">
        <path d="M0 336c0 79.5 64.5 144 144 144H512c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z" />
      </svg>

      <img noZoom src="https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-light.svg?fit=max&auto=format&n=KVh0EKV-IKblvXR8&q=85&s=0cb66034ba45618505501aee6ea5f5c1" class="proto-panel-logo block dark:hidden" alt="Proto" width="198" height="151" data-path="assets/logo/evo-logo-light.svg" />

      <img noZoom src="https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-dark.svg?fit=max&auto=format&n=KVh0EKV-IKblvXR8&q=85&s=2c9e23a14635e60384a434e220788f54" class="proto-panel-logo hidden dark:block" alt="Proto" width="198" height="151" data-path="assets/logo/evo-logo-dark.svg" />
    </div>
  </div>

  <div class="proto-actions">
    <a href="https://proto.evodesign.org/tools/freebindcraft-design" target="_blank" class="proto-action-btn"><span>FreeBindCraft Binder Design</span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="7" y1="17" x2="17" y2="7" /><polyline points="7 7 17 7 17 17" /></svg></a>
  </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: 7 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: 2 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></span></div>

| Function                     | Description                                                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_freebindcraft_design()` | PyRosetta-free de novo binder design: AlphaFold2 hallucination + ProteinMPNN refinement + AlphaFo... (GPU) | <a href="#api-run-freebindcraft-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/freebindcraft/freebindcraft_design.py#L814" 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> |

## 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 high-throughput experimental screening or curated structural templates, reporting experimental success rates of 10 to 100 percent across diverse targets. FreeBindCraft preserves the identical AlphaFold2-hallucination and ProteinMPNN design logic — the hallucination losses, MPNN sampling, and AF2 validation are unchanged — while swapping out the proprietary scoring backend.

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 (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 foldable sequences while optionally holding interface residues fixed. Third, each 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. Fourth, the validated complex is relaxed and scored — where BindCraft uses PyRosetta, FreeBindCraft uses an OpenMM-based relaxation protocol (PDBFixer cleanup, FASPR side-chain packing, implicit solvation) and computes interface metrics with FreeSASA, Biopython, and the [sc-rs](https://github.com/cytokineking/sc-rs) shape-complementarity binary.

### PyRosetta-free metrics

FreeBindCraft computes the AlphaFold2 confidence metrics (pLDDT, pTM, interface pTM, ipSAE, PAE) and the geometry-based interface metrics — shape complementarity (sc-rs), buried surface area and SASA fractions (FreeSASA), interface-residue counts, secondary-structure composition, hotspot/target/binder RMSDs, and pre- and post-relaxation clash counts (geometric, Biopython) — for real. Metrics that depend on Rosetta's energy function and lack an open-source equivalent (interface binding energy `dG`, `dG/dSASA`, `Binder_Energy_Score`, `PackStat`, and hydrogen-bond counts) are emitted upstream as placeholders only to satisfy default filters; this toolkit does **not** surface them, so every metric returned by `freebindcraft-design` is a real measurement.

### Learning Resources

* [cytokineking/FreeBindCraft](https://github.com/cytokineking/FreeBindCraft). The PyRosetta-free fork, its `--no-pyrosetta` install/runtime flag, and the technical overview of the open-source scoring replacements.
* [martinpacesa/BindCraft](https://github.com/martinpacesa/BindCraft) (Correia Lab, EPFL). The upstream BindCraft repository, command-line interface, and reference filter configurations.

## Tools

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

<div class="tool-section-card tool-section-card--design">
  ### FreeBindCraft Binder Design (`freebindcraft-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 FreeBindCraft 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, an OpenMM-relaxed target-binder complex `Structure` with per-residue pLDDT in the B-factor column, and the per-design PyRosetta-free 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/freebindcraft/freebindcraft_design.py#L300" 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: FreeBindCraftInput">
      <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/freebindcraft/freebindcraft_design.py#L367" 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: FreeBindCraftConfig">
      <ParamField path="design_algorithm" type="enum" default="4stage">
        Hallucination algorithm. Drives which iteration-count fields below are actually consumed (see each field's description). 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="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="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, `num_seqs` / `max_mpnn_sequences` 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="optimise_beta" type="boolean" default="True">
        4stage-only — increase recycles + iterations mid-trajectory when the soft-stage output is beta-heavy.
      </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/freebindcraft/freebindcraft_design.py#L695" 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: FreeBindCraftOutput">
      <ResponseField name="designs" type="List[FreeBindCraftDesign]">
        Accepted binder designs (length is at most `FreeBindCraftInput.number_of_final_designs`).

        <Expandable title="FreeBindCraftDesign">
          <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>
            OpenMM-relaxed target+binder complex; B-factors are pLDDT on the 0-100 PDB scale (`b_factor_type=PLDDT`).
          </ResponseField>

          <ResponseField name="metrics" type="FreeBindCraftMetrics" 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_ipsae`                | float | 0.0 to 1.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        |              |
      | `dSASA`                    | float | ≥ 0.0        |              |
      | `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   |              |
      | `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, and where a permissive license is required for hosting or commercial use. Representative applications include designing miniprotein binders against cell-surface receptors, generating binders that occlude a specific epitope or active site through hotspot targeting, and producing structurally diverse binder candidates for downstream therapeutic engineering.

  #### Usage Tips

  * **Provide a hotspot residue list when targeting a defined epitope.** Set `target_hotspot_residues` to a comma-separated list of 1-indexed residue positions on the target structure, with ranges supported (for example `"1-10,56,78"`). Without hotspots the binder may land anywhere on the target surface.
  * **`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 runtime costs.
  * **`weights_helicity` controls the helix bias during hallucination.** The default of `-0.3` is a mild anti-helix bias because AlphaFold2 tends to over-produce alpha-helical bundles. Set a positive value to encourage helices, or set `random_helicity=True` to randomise the sign per trajectory.
  * **`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.
  * **`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}`). Lower the interface pTM or shape complementarity threshold first if zero designs are accepted on a hard target. Note that filters on PyRosetta-only metrics (`Average_dG`, H-bond counts, `Average_PackStat`) pass trivially against placeholder values, so design selection is driven by the AlphaFold2 confidence, shape-complementarity, SASA, and clash metrics.
  * **Production runs use `number_of_final_designs=100` and `max_trajectories=False`.** 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`).
  * **The output is iterable.** Iterating directly over the returned `FreeBindCraftOutput` yields each accepted `FreeBindCraftDesign` 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, `rfdiffusion3-design` when only a backbone is required without an accompanying sequence, and `bindcraft-design` (the PyRosetta variant) when Rosetta interface energetics are required for academic, non-commercial use.
</div>

## Toolkit Notes

These apply to the FreeBindCraft tool in this toolkit (`freebindcraft-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. To parallelise across multiple GPUs, run multiple instances of `freebindcraft-design` concurrently through a `ToolPool`.
* **OpenMM relaxation is GPU-accelerated and runs noticeably faster than PyRosetta's CPU-bound FastRelax**, so a FreeBindCraft trajectory typically completes faster than the equivalent BindCraft trajectory.
* **The first run downloads approximately 5.5 GB of AlphaFold2 weights together with the ColabDesign and FreeBindCraft 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/freebindcraft/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>
