Note
An updated version of dEVA is actively maintained at gelnesr/dEVA. If you have any issues, please report it there and we will get back to you ASAP.
dEVA was introduced in Zero-shot design of a de novo metalloenzyme to design metalloproteins and metalloenzymes. This repository contains the code and examples from the paper, as well as additional examples and functionalities of how dEVA can be used as a general-purpose protein design method.
A dEVA design proposal proposes sequence mutations, then scores each design on more than one objective at once via a genetic algorithm. After the run, the top designs on the Pareto front are returned.
In the paper those objectives were:
- p(seq) — does this sequence belong on this backbone? (LigandMPNN)
- p(catalytic metal) — is there still a catalytic metal at the site? (Metal3D-Cat)
python run.py -c configs/your_run.yml --models seq_model metal3d_modelMetal3D and Metal3D-Cat use the same wrapper; to toggle between them, swap the checkpoint. See examples/example_metal3d.md.
If a method returns a number from a sequence or a structure, it can be an objective. Nothing needs to be differentiable, just swap the scores or add new ones.
Each score is a small Python class (a model). It looks at the current design and returns one or more numbers. Higher is better. You name it and list that name on --models.
python run.py -c configs/your_run.yml --models seq_model <optional relax> <your scores>seq_model is always first. Everything after that is an objective, in the order they run.
A full list of examples can be found at examples/README.md.
These are other possible additions to the dEVA design loop.
| example functionality | what it is | where |
|---|---|---|
| Theozyme placement | Seat a QM geometry in a scaffold before you evolve | examples/example_theozyme_placement.md |
| Flexible backbone | Move nearby backbone during design. | examples/example_relax.md |
| Physics terms | Ex. electric field, desolvation, etc. | examples/example_physics.md |
| Geometric terms | Ex. geometric enclosure of a fixed ligand pose | examples/example_substrate.md |
| Predictive scores | Ex. apo pKa of one lysine (PROPKA3) | examples/example_pka.md |
Write a file in models/, register a name, add a yaml block, put that name on --models.
Step-by-step template: examples/add_your_own.md.
If you are using our code, datasets, or model, please use the following citation:
@article {ElNesr-2026,
author = {El Nesr, Gina and Duerr, Simon L. and Mathews, Irimpan I. and Wen, Qi and Zhao, Kewei and Sarangi, Ritimukta and Roethlisberger, Ursula and Sunden, Fanny and Huang, Possu},
title = {Zero-shot design of a de novo metalloenzyme},
year = {2026},
doi = {10.64898/2026.04.23.720277},
journal = {bioRxiv}
}