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

# Introduction

> A constraint-based optimization framework for designing DNA, RNA, and protein sequences

<div class="card-strip-wrapper">
  <div class="card-strip" data-duration="618">
    <a href="/docs/language/constraints/dna-motif-contact-count" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-motif-contact-count/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/borzoi-chromatin-accessibility-morse" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/borzoi-chromatin-accessibility-morse/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/malinois-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/malinois-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/position-weight" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/position-weight/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/parade-utr-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/parade-utr-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-symmetry-ring" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-symmetry-ring/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/esm3" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/esm3/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-basepair-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-basepair-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/semigreedy-mutation" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/semigreedy-mutation/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/crispr-array" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/crispr-array/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-interface-contact" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-interface-contact/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/progen2" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/progen2/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/metal3d-probability" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/metal3d-probability/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/af3-chain-pair-prot-dna-iptm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/af3-chain-pair-prot-dna-iptm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-ensemble-rmsd" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-ensemble-rmsd/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/deeppbs-motif-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/deeppbs-motif-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-ptm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-ptm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/gap-gini" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/gap-gini/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/parade-utr-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/parade-utr-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-dna-ipsae" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-dna-ipsae/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/sequence-length" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/sequence-length/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-tmscore" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-tmscore/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/msa" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/msa/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-domain" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-domain/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-composite" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-composite/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/beam-search" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/beam-search/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/seq-motif" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/seq-motif/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dna-phosphate-contact" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-phosphate-contact/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-termini-distance" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-termini-distance/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dinucleotide-composition" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dinucleotide-composition/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/borzoi-track-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/borzoi-track-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-pae" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-pae/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mpnn-perplexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mpnn-perplexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-plddt" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-plddt/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-beta-strand" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-beta-strand/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/alphagenome-splice-junction" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/alphagenome-splice-junction/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/pyrosetta-interface" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/pyrosetta-interface/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/splice-transformer-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/splice-transformer-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/mcmc" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/mcmc/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-radius-gyration" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-radius-gyration/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/promoter-strength" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/promoter-strength/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/random-nucleotide" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/random-nucleotide/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/na-mpnn-motif-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/na-mpnn-motif-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-max-identity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-max-identity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dbp-design-metrics" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dbp-design-metrics/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dna-base-contact-quality" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-base-contact-quality/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-diversity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-diversity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/parade-utr-stability" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/parade-utr-stability/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/freebindcraft" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/freebindcraft/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-distogram-cce" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-distogram-cce/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/mpnn-mutation" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/mpnn-mutation/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/af3-offtarget-iptm-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/af3-offtarget-iptm-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mirna-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mirna-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-globularity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-globularity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/evo1" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/evo1/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-iptm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-iptm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/balanced-aa" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/balanced-aa/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/consensus-operator-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/consensus-operator-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-helix" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-helix/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-motif-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-motif-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-length" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-length/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/ligandmpnn" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/ligandmpnn/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-nearest-neighbor-gap-gini" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-nearest-neighbor-gap-gini/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/operator-site" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/operator-site/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/ablang-perplexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/ablang-perplexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/rejection-sampling" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/rejection-sampling/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mmseqs-gene-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mmseqs-gene-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-repetitiveness" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-repetitiveness/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/alphagenome-splice-site-usage" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/alphagenome-splice-site-usage/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/gyration-radius" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/gyration-radius/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/puffin-promoter-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/puffin-promoter-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/overall-protein-quality" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/overall-protein-quality/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/esm2" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/esm2/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/cycling" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/cycling/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-contact" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-contact/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mpnn-sequence-probability" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mpnn-sequence-probability/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-iplddt" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-iplddt/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/targetscan-site" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/targetscan-site/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-profile-hmm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-profile-hmm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-feature-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-feature-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/crispr-tracr-rna" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/crispr-tracr-rna/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/alphagenome-interval-track" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/alphagenome-interval-track/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-rmsd" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-rmsd/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/max-homopolymer" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/max-homopolymer/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/gc-content" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/gc-content/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/sigma70-promoter" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/sigma70-promoter/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/gradient" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/gradient/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/fampnn" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/fampnn/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-ipae" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-ipae/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/splice-transformer-intron-boundary" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/splice-transformer-intron-boundary/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/proteinmpnn" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/proteinmpnn/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-property-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-property-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/longest-orf-length" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/longest-orf-length/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/random-protein" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/random-protein/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/genetic-algorithm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/genetic-algorithm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-complexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-complexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/kmer-frequency" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/kmer-frequency/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/specific-kmer-frequency" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/specific-kmer-frequency/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/boltz2-binding-strength" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/boltz2-binding-strength/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/esm2-perplexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/esm2-perplexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/evo2" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/evo2/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/rfdiffusion-mpnn-binder" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/rfdiffusion-mpnn-binder/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/enformer-chromatin-accessibility-morse" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/enformer-chromatin-accessibility-morse/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dna-motif-contact-count" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-motif-contact-count/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/borzoi-chromatin-accessibility-morse" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/borzoi-chromatin-accessibility-morse/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/malinois-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/malinois-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/position-weight" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/position-weight/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/parade-utr-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/parade-utr-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-symmetry-ring" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-symmetry-ring/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/esm3" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/esm3/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-basepair-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-basepair-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/semigreedy-mutation" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/semigreedy-mutation/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/crispr-array" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/crispr-array/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-interface-contact" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-interface-contact/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/progen2" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/progen2/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/metal3d-probability" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/metal3d-probability/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/af3-chain-pair-prot-dna-iptm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/af3-chain-pair-prot-dna-iptm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-ensemble-rmsd" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-ensemble-rmsd/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/deeppbs-motif-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/deeppbs-motif-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-ptm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-ptm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/gap-gini" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/gap-gini/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/parade-utr-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/parade-utr-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-dna-ipsae" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-dna-ipsae/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/sequence-length" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/sequence-length/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-tmscore" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-tmscore/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/msa" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/msa/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-domain" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-domain/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-composite" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-composite/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/beam-search" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/beam-search/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/seq-motif" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/seq-motif/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dna-phosphate-contact" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-phosphate-contact/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-termini-distance" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-termini-distance/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dinucleotide-composition" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dinucleotide-composition/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/borzoi-track-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/borzoi-track-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-pae" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-pae/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mpnn-perplexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mpnn-perplexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-plddt" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-plddt/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-beta-strand" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-beta-strand/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/alphagenome-splice-junction" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/alphagenome-splice-junction/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/pyrosetta-interface" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/pyrosetta-interface/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/splice-transformer-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/splice-transformer-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/mcmc" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/mcmc/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-radius-gyration" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-radius-gyration/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/promoter-strength" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/promoter-strength/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/random-nucleotide" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/random-nucleotide/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/na-mpnn-motif-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/na-mpnn-motif-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-max-identity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-max-identity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dbp-design-metrics" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dbp-design-metrics/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/dna-base-contact-quality" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-base-contact-quality/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-diversity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-diversity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/parade-utr-stability" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/parade-utr-stability/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/freebindcraft" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/freebindcraft/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-distogram-cce" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-distogram-cce/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/mpnn-mutation" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/mpnn-mutation/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/af3-offtarget-iptm-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/af3-offtarget-iptm-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mirna-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mirna-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-globularity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-globularity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/evo1" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/evo1/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-iptm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-iptm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/balanced-aa" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/balanced-aa/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/consensus-operator-specificity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/consensus-operator-specificity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-helix" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-helix/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-motif-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-motif-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-length" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-length/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/ligandmpnn" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/ligandmpnn/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-nearest-neighbor-gap-gini" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-nearest-neighbor-gap-gini/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/operator-site" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/operator-site/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/ablang-perplexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/ablang-perplexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/rejection-sampling" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/rejection-sampling/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mmseqs-gene-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mmseqs-gene-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-repetitiveness" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-repetitiveness/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/alphagenome-splice-site-usage" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/alphagenome-splice-site-usage/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/gyration-radius" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/gyration-radius/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/puffin-promoter-activity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/puffin-promoter-activity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/overall-protein-quality" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/overall-protein-quality/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/esm2" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/esm2/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/cycling" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/cycling/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-contact" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-contact/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/mpnn-sequence-probability" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/mpnn-sequence-probability/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-iplddt" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-iplddt/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/targetscan-site" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/targetscan-site/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-profile-hmm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-profile-hmm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-feature-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-feature-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/crispr-tracr-rna" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/crispr-tracr-rna/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/alphagenome-interval-track" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/alphagenome-interval-track/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-rmsd" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-rmsd/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/max-homopolymer" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/max-homopolymer/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/gc-content" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/gc-content/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/sigma70-promoter" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/sigma70-promoter/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/gradient" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/gradient/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/fampnn" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/fampnn/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/structure-ipae" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-ipae/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/splice-transformer-intron-boundary" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/splice-transformer-intron-boundary/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/proteinmpnn" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/proteinmpnn/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/rna-property-similarity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/rna-property-similarity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/longest-orf-length" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/longest-orf-length/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/random-protein" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/random-protein/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/optimizers/genetic-algorithm" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/optimizer/genetic-algorithm/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/protein-complexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/protein-complexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/kmer-frequency" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/kmer-frequency/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/specific-kmer-frequency" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/specific-kmer-frequency/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/boltz2-binding-strength" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/boltz2-binding-strength/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/esm2-perplexity" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/esm2-perplexity/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/evo2" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/evo2/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/generators/rfdiffusion-mpnn-binder" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/generator/rfdiffusion-mpnn-binder/carousel.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/language/constraints/enformer-chromatin-accessibility-morse" class="card-strip-item">
      <img noZoom class="card-art" src="https://proto-bio.github.io/proto-assets/images/constraint/enformer-chromatin-accessibility-morse/carousel.png" alt="" loading="lazy" />
    </a>
  </div>
</div>

<a href="https://github.com/evo-design/proto-language" target="_blank">
  <img src="https://opengraph.githubassets.com/1/evo-design/proto-language" alt="evo-design/proto-language" className="gh-card-img img-fallback" style={{borderRadius: "8px", width: "100%"}} />
</a>

<div className="badge-row">
  <a href="https://github.com/evo-design/proto-language/blob/main/LICENSE" target="_blank" rel="noreferrer">
    <img noZoom src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" />
  </a>

  <a href="https://www.biorxiv.org/content/10.64898/2026.06.22.733870" target="_blank" rel="noreferrer">
    <img noZoom src="https://img.shields.io/badge/bioRxiv-2026.06.22.733870-b31b1b.svg" alt="bioRxiv" />
  </a>

  <a href="/docs/tools/modal-integration">
    <img noZoom src="https://img.shields.io/badge/Modal-ready--to--deploy-brightgreen?logo=modal&logoColor=white" alt="Modal" />
  </a>

  <a href="https://arcinstitute.org/news/proto" target="_blank" rel="noreferrer">
    <img noZoom src="https://img.shields.io/badge/Blog-0073E6?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAADrElEQVR42u2WX4jUVRTHv%2Bf%2BfjM7iqXWmFZGmWEFWiBR%2BxBBsSY9CFKQGT1ElKhsEuRrEVFPGVu2RpsplWGUCWbURpkSYZtDEj4oKmYvGxHUruui7czvz6eHuTPzm3HsaQSD%2BcIMzJl77znf7zn33CN10UUX%2F39YqwFvMS6xZ%2BySMCCnuGqztDMOXObwQFKfftUxHdVxHsYIOiwKxiz%2BoIrvJVyndQ8kdhJRJiZmSYddYBJFxoCUCBiQCNsyDaviYYTNQhIQ4jBcbU12YyixnjJfAxHwJzObqwkjvDgnrLXyWtbiJE7wObcACRHwZDsOXMdjfMprGDN4hRHeoafGg%2FsYosRJfmCQB5rCI5BYDKyUOAxUgIONKDCMhWzkSyYA2CYxDEDKHEliPnuBw6ynn1EANrcKNMQ40zDWAhEJCUt9%2BYoA40HOATBFxEs8BJSBCeZK3MRvwCf%2BtIVMkgArsgkuMMlmCeNqxjyHLQ2RMInZHCChDLzNUeAcE4xSxPEj8DfXSOQJJY4QU%2BHNevwYq4DbJfISW72Dv7iqoSR5iXeBCinjlFjFAuYwV%2BIJIGF3na9xEoD%2BbIJ%2F4oiEI8DorSd6TYZDiPEBMEXKPnIZgUdIgeex6lqM99jPFgqN4xcAT2PkCMlJHPQcSlg90aHE%2B8A%2FwCaJgg%2FnBqZIgNUXVp2rf69VRZ%2FJWWSxRTh9I8mU6i7dLdp0pQKm2FLJ0CL1KG5unbiq81DClBDoKX1hZySu1Uqt0B0KlShUrFDP2CHa3itq%2FXieJCRloq91Y%2Bc%2Fy1XUCyxmj47rOZ1Sv5Zqp9%2F2CEVL%2FvN9cH7lrW3vMoHEML8zxFk%2Bprf%2B5z31RD%2Fr9c%2Fm4C3%2FO5BY5vN1qFZF2eOdxHwmgRGW1KslIMAo%2BY2%2F4LCLOKjunwJi4H6JHq9%2FIHFbddFG4HV%2FdLZi1vgbDfdiBE0OBmsVg5P4jpQKKae4McPgUU6InMRpfq7dwKbGW2Tcc%2FhQIk%2BekO3ewRsEFDAvUh9QIQZG2cCd3EwfA8C6agdM2dW2AecZJaJMhTGu97YdREwSsb3loRoAUsr%2BPTwPwFeS%2BIgEgBKDLPKEHcZytnKaBs6wgWXsyFi%2BZRNF32cDiZeJyGIvs3ChAm1TLGmGisrXithSrtCVOqBhmZAp0XT1aJrO6tV64DM1XYGfoRKcvchuPa5ezdN5HdMe29W54acxlaj5BZGsqXckjXkOp9bHEXGBLclOgDg5pZZWnVlymc%2BEXXTRxeWDfwGkGF0Pfq%2BibAAAAABJRU5ErkJggg%3D%3D" alt="Arc Institute blog" />
  </a>
</div>

<div className="install-snippet">
  ```bash bash icon="terminal" theme={null}
  pip install git+https://github.com/evo-design/proto-language.git
  ```
</div>

# Proto

Proto is a high-level programming language for designing DNA, RNA, and protein sequences. The required properties of a sequence are expressed as constraints; generators propose candidate sequences and optimizers search for candidates that satisfy them.

## Overview

Biological sequence design is typically multi-objective: a single sequence must meet several requirements at once. A designed protein may need to fold to a target structure, bind a target, express in a host organism, and remain soluble. A coding sequence may need a controlled GC content, codon usage suited to its host, no long homopolymer runs, and the absence of specified restriction sites. Proto represents each requirement as a separate constraint and optimizes against the full set rather than a single objective.

A design is specified declaratively. The sequence regions to be designed are defined as **segments**; a **generator** is assigned to each region to propose candidates; **constraints** score how well each candidate meets a requirement; and one or more **optimizers** search sequence space to minimize the combined score.

```python python icon="python" theme={null}
from proto_language.core import Segment, Construct, Constraint, Program
from proto_language.generator import RandomNucleotideGenerator, RandomNucleotideGeneratorConfig
from proto_language.optimizer import MCMCOptimizer, MCMCOptimizerConfig
from proto_language.constraint import gc_content_constraint, max_homopolymer_constraint
from proto_tools.transforms.masking import MaskingStrategy

# Define a 200bp DNA sequence to optimize
dna = Segment(length=200, sequence_type="dna")
construct = Construct(segments=[dna])

# Generator: random point mutations to explore sequence space
gen = RandomNucleotideGenerator(RandomNucleotideGeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=3)))
gen.assign(dna)

# Constraints: what the sequence must satisfy
constraints = [
    Constraint(inputs=[dna], function=gc_content_constraint,
               function_config={"min_gc": 45, "max_gc": 55}, weight=1.0),
    Constraint(inputs=[dna], function=max_homopolymer_constraint,
               function_config={"max_length": 5}, threshold=0.0),
]

# Optimize with MCMC
optimizer = MCMCOptimizer(
    constructs=[construct], generators=[gen], constraints=constraints,
    config=MCMCOptimizerConfig(num_steps=500, num_results=5),
)

program = Program(optimizers=[optimizer], num_results=5)
program.run()

# Results: 5 optimized sequences ranked by quality
for seq in construct.joined_sequences:
    print(seq.sequence)
```

## How It Works

<Steps>
  <Step title="Segments and Constructs">
    **Segments** are contiguous sequence regions to be designed; they are grouped into **Constructs**. A segment is initialized either from a target length or from an existing sequence.

    ```python python icon="python" theme={null}
    promoter = Segment(length=50, sequence_type="dna")
    cds = Segment(sequence="ATGAAA...", sequence_type="dna")
    gene = Construct(segments=[promoter, cds])
    ```
  </Step>

  <Step title="Generators">
    A **generator** is assigned to a segment and proposes new sequences on each iteration. Generators range from random mutation to protein language models such as ESM2, ESM3, and ProteinMPNN.

    ```python python icon="python" theme={null}
    mutation_gen = RandomNucleotideGenerator(
        RandomNucleotideGeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=2))
    )
    mutation_gen.assign(promoter)
    ```
  </Step>

  <Step title="Constraints">
    A **constraint** scores how well each proposal meets a requirement, from 0.0 (perfect) to 1.0 (worst). It uses either `weight` for soft scoring or `threshold` for hard pass/fail filtering.

    ```python python icon="python" theme={null}
    gc = Constraint(
        inputs=[promoter],
        function=gc_content_constraint,
        function_config={"min_gc": 40, "max_gc": 60},
        weight=1.0,
    )
    ```
  </Step>

  <Step title="Optimizers and Programs">
    An **optimizer** searches sequence space to minimize the total constraint score. A **Program** chains several optimizers into a multi-stage pipeline, for example broad exploration followed by fine-tuning.

    ```python python icon="python" theme={null}
    program = Program(optimizers=[optimizer], num_results=5)
    program.run()
    results = construct.joined_sequences  # Ranked by quality
    ```
  </Step>
</Steps>

## Architecture

The framework has the following components, which form an optimization loop:

<div className="block dark:hidden">
  <svg viewBox="0 0 1360 344" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Proto architecture optimization loop" style={{width:"100%",height:"auto",display:"block"}}><defs><pattern id="gridintro1L" width="22" height="22" patternUnits="userSpaceOnUse"><circle cx="2" cy="2" r="1.2" fill="#344649" fillOpacity="0.10" /></pattern><marker id="arrintro1L" viewBox="0 0 10 10" refX="8.5" refY="5" markerWidth="6.5" markerHeight="6.5" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 L3,5 z" fill="#768b8e" /></marker></defs><rect x="12" y="12" width="1336" height="320" rx="16" fill="#f9fcfc" stroke="#dee9e8" strokeWidth="1.2" /><rect x="12" y="12" width="1336" height="320" rx="16" fill="url(#gridintro1L)" /><rect x="40" y="70" width="228" height="238" rx="14" fill="#eef5f4" stroke="#ced9d7" strokeWidth="1.3" fillOpacity="0.55" strokeDasharray="5 4" /><text x="58" y="91" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#768b8e" textAnchor="start" letterSpacing="1.6">1. Define</text><rect x="312" y="170" width="228" height="138" rx="14" fill="#eef5f4" stroke="#ced9d7" strokeWidth="1.3" fillOpacity="0.55" strokeDasharray="5 4" /><text x="330" y="191" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#768b8e" textAnchor="start" letterSpacing="1.6">2. Generate</text><rect x="584" y="70" width="228" height="238" rx="14" fill="#eef5f4" stroke="#ced9d7" strokeWidth="1.3" fillOpacity="0.55" strokeDasharray="5 4" /><text x="602" y="91" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#768b8e" textAnchor="start" letterSpacing="1.6">3. Evaluate</text><rect x="856" y="170" width="228" height="138" rx="14" fill="#eef5f4" stroke="#ced9d7" strokeWidth="1.3" fillOpacity="0.55" strokeDasharray="5 4" /><text x="874" y="191" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#768b8e" textAnchor="start" letterSpacing="1.6">4. Optimize</text><path d="M154,180 L154,210" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><path d="M252,251 L328,251" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><path d="M524,251 L600,251" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><path d="M698,180 L698,210" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><path d="M796,251 L872,251" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><path d="M1068,251 L1128,251" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><path d="M970,210 L970,38 L426,38 L426,210" fill="none" stroke="#9eb4b2" strokeWidth="1.6" markerEnd="url(#arrintro1L)" /><rect x="56" y="98" width="196" height="82" rx="10" fill="#eef2f4" stroke="#dbe3e6" strokeWidth="1.2" /><rect x="140" y="110" width="28" height="3.5" rx="2" fill="#768b8e" /><text x="154" y="137" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#344649" textAnchor="middle">Segments</text><text x="154" y="155" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">(sequence regions)</text><rect x="56" y="210" width="196" height="82" rx="10" fill="#eef2f4" stroke="#dbe3e6" strokeWidth="1.2" /><rect x="140" y="222" width="28" height="3.5" rx="2" fill="#768b8e" /><text x="154" y="249" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#344649" textAnchor="middle">Constructs</text><text x="154" y="267" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">(multi-segment units)</text><rect x="328" y="210" width="196" height="82" rx="10" fill="#eef2f4" stroke="#dbe3e6" strokeWidth="1.2" /><rect x="412" y="222" width="28" height="3.5" rx="2" fill="#768b8e" /><text x="426" y="241" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#344649" textAnchor="middle">Generators</text><text x="426" y="259" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">(mutation, ESM2, Evo2,</text><text x="426" y="274" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">ProteinMPNN, ...)</text><rect x="600" y="98" width="196" height="82" rx="10" fill="#eef2f4" stroke="#dbe3e6" strokeWidth="1.2" /><rect x="684" y="110" width="28" height="3.5" rx="2" fill="#768b8e" /><text x="698" y="129" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#344649" textAnchor="middle">Tools</text><text x="698" y="147" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">(ESMFold, Boltz, Enformer,</text><text x="698" y="162" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">MMseqs2, ...)</text><rect x="600" y="210" width="196" height="82" rx="10" fill="#eef2f4" stroke="#dbe3e6" strokeWidth="1.2" /><rect x="684" y="222" width="28" height="3.5" rx="2" fill="#768b8e" /><text x="698" y="241" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#344649" textAnchor="middle">Constraints</text><text x="698" y="259" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">(GC%, pLDDT, binding,</text><text x="698" y="274" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">expression, ...)</text><rect x="872" y="210" width="196" height="82" rx="10" fill="#eef2f4" stroke="#dbe3e6" strokeWidth="1.2" /><rect x="956" y="222" width="28" height="3.5" rx="2" fill="#768b8e" /><text x="970" y="241" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#344649" textAnchor="middle">Optimizers</text><text x="970" y="259" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">(MCMC, Rejection Sampling,</text><text x="970" y="274" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#768b8e" textAnchor="middle">Beam Search, ...)</text><rect x="1128" y="210" width="196" height="82" rx="10" fill="#2f8f6b" /><rect x="1212" y="222" width="28" height="3.5" rx="2" fill="#2f8f6b" /><text x="1226" y="249" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#ffffff" textAnchor="middle">5. Results</text><text x="1226" y="267" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#d4ebe0" textAnchor="middle">(ranked sequences)</text><g fill="#ffffff" stroke="#9eb4b2" strokeWidth="1.4"><circle cx="154" cy="180" r="3.2" /><circle cx="154" cy="210" r="3.2" /><circle cx="252" cy="251" r="3.2" /><circle cx="328" cy="251" r="3.2" /><circle cx="524" cy="251" r="3.2" /><circle cx="600" cy="251" r="3.2" /><circle cx="698" cy="180" r="3.2" /><circle cx="698" cy="210" r="3.2" /><circle cx="796" cy="251" r="3.2" /><circle cx="872" cy="251" r="3.2" /><circle cx="1068" cy="251" r="3.2" /><circle cx="1128" cy="251" r="3.2" /><circle cx="970" cy="210" r="3.2" /><circle cx="426" cy="210" r="3.2" /></g><rect x="667" y="27.25" width="62" height="21.5" rx="6" fill="#f9fcfc" stroke="#e2e9ea" strokeWidth="1" /><text x="698" y="42" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11" fontWeight="400" fill="#506467" textAnchor="middle">iterate</text></svg>
</div>

<div className="hidden dark:block">
  <svg viewBox="0 0 1360 344" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Proto architecture optimization loop" style={{width:"100%",height:"auto",display:"block"}}><defs><pattern id="gridintro1D" width="22" height="22" patternUnits="userSpaceOnUse"><circle cx="2" cy="2" r="1.2" fill="#9eb4b2" fillOpacity="0.10" /></pattern><marker id="arrintro1D" viewBox="0 0 10 10" refX="8.5" refY="5" markerWidth="6.5" markerHeight="6.5" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 L3,5 z" fill="#7e9498" /></marker></defs><rect x="12" y="12" width="1336" height="320" rx="16" fill="#0e1718" stroke="#2b3c3e" strokeWidth="1.2" /><rect x="12" y="12" width="1336" height="320" rx="16" fill="url(#gridintro1D)" /><rect x="40" y="70" width="228" height="238" rx="14" fill="#15211f" stroke="#33474a" strokeWidth="1.3" fillOpacity="0.5" strokeDasharray="5 4" /><text x="58" y="91" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#7e9498" textAnchor="start" letterSpacing="1.6">1. Define</text><rect x="312" y="170" width="228" height="138" rx="14" fill="#15211f" stroke="#33474a" strokeWidth="1.3" fillOpacity="0.5" strokeDasharray="5 4" /><text x="330" y="191" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#7e9498" textAnchor="start" letterSpacing="1.6">2. Generate</text><rect x="584" y="70" width="228" height="238" rx="14" fill="#15211f" stroke="#33474a" strokeWidth="1.3" fillOpacity="0.5" strokeDasharray="5 4" /><text x="602" y="91" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#7e9498" textAnchor="start" letterSpacing="1.6">3. Evaluate</text><rect x="856" y="170" width="228" height="138" rx="14" fill="#15211f" stroke="#33474a" strokeWidth="1.3" fillOpacity="0.5" strokeDasharray="5 4" /><text x="874" y="191" fontFamily="'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="10.5" fontWeight="500" fill="#7e9498" textAnchor="start" letterSpacing="1.6">4. Optimize</text><path d="M154,180 L154,210" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><path d="M252,251 L328,251" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><path d="M524,251 L600,251" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><path d="M698,180 L698,210" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><path d="M796,251 L872,251" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><path d="M1068,251 L1128,251" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><path d="M970,210 L970,38 L426,38 L426,210" fill="none" stroke="#566b6e" strokeWidth="1.6" markerEnd="url(#arrintro1D)" /><rect x="56" y="98" width="196" height="82" rx="10" fill="#1b2829" stroke="#33474a" strokeWidth="1.2" /><rect x="140" y="110" width="28" height="3.5" rx="2" fill="#7e9498" /><text x="154" y="137" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#d6e1df" textAnchor="middle">Segments</text><text x="154" y="155" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">(sequence regions)</text><rect x="56" y="210" width="196" height="82" rx="10" fill="#1b2829" stroke="#33474a" strokeWidth="1.2" /><rect x="140" y="222" width="28" height="3.5" rx="2" fill="#7e9498" /><text x="154" y="249" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#d6e1df" textAnchor="middle">Constructs</text><text x="154" y="267" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">(multi-segment units)</text><rect x="328" y="210" width="196" height="82" rx="10" fill="#1b2829" stroke="#33474a" strokeWidth="1.2" /><rect x="412" y="222" width="28" height="3.5" rx="2" fill="#7e9498" /><text x="426" y="241" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#d6e1df" textAnchor="middle">Generators</text><text x="426" y="259" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">(mutation, ESM2, Evo2,</text><text x="426" y="274" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">ProteinMPNN, ...)</text><rect x="600" y="98" width="196" height="82" rx="10" fill="#1b2829" stroke="#33474a" strokeWidth="1.2" /><rect x="684" y="110" width="28" height="3.5" rx="2" fill="#7e9498" /><text x="698" y="129" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#d6e1df" textAnchor="middle">Tools</text><text x="698" y="147" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">(ESMFold, Boltz, Enformer,</text><text x="698" y="162" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">MMseqs2, ...)</text><rect x="600" y="210" width="196" height="82" rx="10" fill="#1b2829" stroke="#33474a" strokeWidth="1.2" /><rect x="684" y="222" width="28" height="3.5" rx="2" fill="#7e9498" /><text x="698" y="241" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#d6e1df" textAnchor="middle">Constraints</text><text x="698" y="259" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">(GC%, pLDDT, binding,</text><text x="698" y="274" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">expression, ...)</text><rect x="872" y="210" width="196" height="82" rx="10" fill="#1b2829" stroke="#33474a" strokeWidth="1.2" /><rect x="956" y="222" width="28" height="3.5" rx="2" fill="#7e9498" /><text x="970" y="241" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#d6e1df" textAnchor="middle">Optimizers</text><text x="970" y="259" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">(MCMC, Rejection Sampling,</text><text x="970" y="274" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#9eb4b2" textAnchor="middle">Beam Search, ...)</text><rect x="1128" y="210" width="196" height="82" rx="10" fill="#2f8f6b" /><rect x="1212" y="222" width="28" height="3.5" rx="2" fill="#2f8f6b" /><text x="1226" y="249" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="14" fontWeight="600" fill="#ffffff" textAnchor="middle">5. Results</text><text x="1226" y="267" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11.5" fontWeight="400" fill="#cfeadd" textAnchor="middle">(ranked sequences)</text><g fill="#13201f" stroke="#566b6e" strokeWidth="1.4"><circle cx="154" cy="180" r="3.2" /><circle cx="154" cy="210" r="3.2" /><circle cx="252" cy="251" r="3.2" /><circle cx="328" cy="251" r="3.2" /><circle cx="524" cy="251" r="3.2" /><circle cx="600" cy="251" r="3.2" /><circle cx="698" cy="180" r="3.2" /><circle cx="698" cy="210" r="3.2" /><circle cx="796" cy="251" r="3.2" /><circle cx="872" cy="251" r="3.2" /><circle cx="1068" cy="251" r="3.2" /><circle cx="1128" cy="251" r="3.2" /><circle cx="970" cy="210" r="3.2" /><circle cx="426" cy="210" r="3.2" /></g><rect x="667" y="27.25" width="62" height="21.5" rx="6" fill="#13201f" stroke="#33474a" strokeWidth="1" /><text x="698" y="42" fontFamily="Geist, ui-sans-serif, system-ui, -apple-system, sans-serif" fontSize="11" fontWeight="400" fill="#9eb4b2" textAnchor="middle">iterate</text></svg>
</div>

| Component       | Purpose                                                             | Examples                                                                                     |
| --------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **Segments**    | Contiguous sequence regions to design                               | 200bp promoter, 100aa protein domain, variable CDR loop                                      |
| **Constructs**  | Multi-segment containers                                            | Promoter + CDS + terminator, multi-chain protein complex                                     |
| **Generators**  | Propose new proposal sequences each iteration                       | Random mutation, protein language models, inverse folding, autoregressive DNA/protein models |
| **Constraints** | Score how well sequences meet requirements (0 = perfect, 1 = worst) | Sequence composition, protein structure, RNA splicing, functional annotation, and more       |
| **Optimizers**  | Search algorithms that minimize the total constraint score          | MCMC, Rejection Sampling, Beam Search, Gradient descent, Cycling                             |
| **Programs**    | Multi-stage optimizer pipelines                                     | Rejection Sampling exploration then MCMC fine-tuning                                         |

## Applications

<Tabs>
  <Tab title="Protein Design">
    Proteins can be designed for predicted structural properties. ESM2 or ProteinMPNN generate proposals, which are scored by ESMFold or Boltz2 for folding confidence, by TM-score for structural similarity, and by additional quality metrics.

    ```python python icon="python" theme={null}
    from proto_language.core import Segment, Construct, Constraint, Program
    from proto_language.generator import ESM2Generator, ESM2GeneratorConfig
    from proto_language.optimizer import MCMCOptimizer, MCMCOptimizerConfig
    from proto_language.constraint import (
        structure_plddt_constraint, balanced_aa_constraint,
    )

    protein = Segment(length=80, sequence_type="protein")
    construct = Construct(segments=[protein])

    from proto_tools.transforms.masking import MaskingStrategy
    gen = ESM2Generator(ESM2GeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=3)))
    gen.assign(protein)

    constraints = [
        # High predicted structure confidence
        Constraint(inputs=[protein], function=structure_plddt_constraint,
                   function_config={"structure_tool": "esmfold"}, weight=2.0),
        # Balanced amino acid composition
        Constraint(inputs=[protein], function=balanced_aa_constraint,
                   function_config={}, weight=1.0),
    ]

    optimizer = MCMCOptimizer(
        constructs=[construct], generators=[gen], constraints=constraints,
        config=MCMCOptimizerConfig(num_steps=200, num_results=5),
    )
    Program(optimizers=[optimizer], num_results=5).run()
    ```
  </Tab>

  <Tab title="DNA Optimization">
    DNA sequences can be optimized for synthesis and expression: GC content, homopolymer runs, restriction sites, and promoter strength are controlled simultaneously.

    ```python python icon="python" theme={null}
    from proto_language.core import Segment, Construct, Constraint, Program
    from proto_language.generator import (
        RandomNucleotideGenerator, RandomNucleotideGeneratorConfig,
    )
    from proto_language.optimizer import MCMCOptimizer, MCMCOptimizerConfig
    from proto_language.constraint import (
        gc_content_constraint, max_homopolymer_constraint,
    )
    from proto_tools.transforms.masking import MaskingStrategy

    gene = Segment(length=300, sequence_type="dna")
    construct = Construct(segments=[gene])

    gen = RandomNucleotideGenerator(RandomNucleotideGeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=3)))
    gen.assign(gene)

    constraints = [
        Constraint(inputs=[gene], function=gc_content_constraint,
                   function_config={"min_gc": 40, "max_gc": 60}, weight=1.0),
        Constraint(inputs=[gene], function=max_homopolymer_constraint,
                   function_config={"max_length": 4}, threshold=0.0),
    ]

    optimizer = MCMCOptimizer(
        constructs=[construct], generators=[gen], constraints=constraints,
        config=MCMCOptimizerConfig(num_steps=1000, num_results=10),
    )
    Program(optimizers=[optimizer], num_results=10).run()
    ```
  </Tab>

  <Tab title="RNA Engineering">
    RNA sequences can be designed for target secondary structures, splice-site properties, or regulatory motifs, combining sequence-level constraints with structure predictions.

    ```python python icon="python" theme={null}
    from proto_language.core import Segment, Construct, Constraint, Program
    from proto_language.generator import (
        RandomNucleotideGenerator, RandomNucleotideGeneratorConfig,
    )
    from proto_language.optimizer import RejectionSamplingOptimizer, RejectionSamplingOptimizerConfig
    from proto_language.constraint import (
        gc_content_constraint, rna_property_similarity_constraint,
    )
    from proto_tools.transforms.masking import MaskingStrategy

    rna = Segment(length=150, sequence_type="rna")
    construct = Construct(segments=[rna])

    gen = RandomNucleotideGenerator(RandomNucleotideGeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=2)))
    gen.assign(rna)

    constraints = [
        Constraint(inputs=[rna], function=gc_content_constraint,
                   function_config={"min_gc": 40, "max_gc": 55}, weight=1.0),
        Constraint(inputs=[rna], function=rna_property_similarity_constraint,
                   function_config={"reference_sequence": "GGG" + "A" * 144 + "CCC"},
                   weight=2.0),
    ]

    optimizer = RejectionSamplingOptimizer(
        constructs=[construct], generators=[gen], constraints=constraints,
        config=RejectionSamplingOptimizerConfig(num_samples=500, num_results=10),
    )
    Program(optimizers=[optimizer], num_results=10).run()
    ```
  </Tab>
</Tabs>

## Key Features

<CardGroup cols={3}>
  <Card title="Declarative Design" icon="wand-sparkles">
    Sequences are specified by the properties they must satisfy rather than by a search procedure. Constraints define the requirements; the optimizer performs the search.
  </Card>

  <Card title="Composable Components" icon="puzzle">
    Generators, constraints, and optimizers combine freely. Multi-stage pipelines chain broad exploration with targeted refinement.
  </Card>

  <Card title="Integrated ML Models" icon="microchip">
    Built-in support for protein language models, structure predictors, inverse-folding models, and genomic deep-learning models.
  </Card>

  <Card title="Bioinformatics Tools" icon="toolbox">
    Tools for structure prediction, sequence search, motif analysis, splicing prediction, and annotation are callable as constraints.
  </Card>

  <Card title="Multi-Objective Optimization" icon="chart-line">
    Competing requirements are balanced through weighted scoring and hard threshold filters across any number of constraints.
  </Card>

  <Card title="CPU and GPU" icon="server">
    Lightweight generators and constraints run on CPU; structure prediction, language models, and genomic deep learning run on GPU when available.
  </Card>
</CardGroup>

## Get Started

<CardGroup cols={3}>
  <Card title="Installation" icon="download" href="/docs/language/installation">
    Install Proto on CPU or GPU, using pip or conda.
  </Card>

  <Card title="Quickstart" icon="play" href="/docs/language/quickstart">
    A step-by-step, runnable tutorial for a first design.
  </Card>

  <Card title="Core Concepts" icon="book-open" href="/docs/language/concepts/overview">
    Reference on segments, constructs, generators, constraints, optimizers, and programs.
  </Card>
</CardGroup>
