Piperine compiles abstract CRNs into DNA sequences and estimates how much the generated DNA implementations may participate in undesired DNA-DNA interactions during experiments.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Piperine is a software tool for the automated design of DNA molecules that mimic abstract chemical reaction networks (CRNs) in a test tube. It combines sequence design tools created by the DNA and Natural Algorithms Group with heuristic sequence quality measures. These heuristic functions detect sequence motifs that are detrimental to DNA strand displacement reactions; avoiding these motifs promotes fidelity of the in vitro DNA reaction to the target CRN.

Major Contributors :

  • James Parkin

  • Niranjan Srinivas

  • Erik Winfree

  • Harel Dor

Thanks to :

  • Chris Thachuk

  • Constantine Evans

Basic use of Piperine involves providing CRNs specified in text files and receiving a set of candidate DNA implementations. From this list of implementations, Piperine will select one as the optimal candidate relative to the set. Users can use command line utilities to adjust the design constraints and number of candidate implementations generated. Advance use may involve writing custom packages that define additional approaches to emulating CRNs with DNA strand displacement cascades.


OS requirements

Piperine has only been tested on Ubuntu and MacOSX Sierra. Windows is unsupported for now.

Python version

Piperine works with Python >= 2.7

Software dependencies

Piperine depends on

  • Numpy

  • Scipy

  • NUPACK (version 3.0.x)

  • stickydesign

  • peppercompiler

Make sure these are installed before installing Piperine.

Installing dependencies

Numpy and Scipy can both be installed easily through pip or conda. Install these packages before installing stickydesign.

pip install numpy scipy

NUPACK can be downloaded here. Stickydesign and peppercompiler can both be found on the DNA and Natural Algorithms Group Github page. These two packages should be installed using the following commands:

pip install git+https://github.com/DNA-and-Natural-Algorithms-Group/peppercompiler.git
pip install git+https://github.com/DNA-and-Natural-Algorithms-Group/stickydesign.git

This is described below for installing Piperine. Be sure to install NUPACK version 3.0.x, Piperine is only compatible with this legacy version for now. Once NUPACK is installed, make a terminal variable NUPACKHOME that points to installation destination (might be ~/Downloads/nupack3.0.6). Do this with the command export NUPACKHOME=the path to nupack.

Installing Piperine

For now, you can only install Piperine from the Github repository.

pip install git+https://github.com/DNA-and-Natural-Algorithms-Group/piperine.git

It will be necessary to manually install updates.

Brief tutorial

Piperine reads in plaintext files that specify an abstract CRN, converts the CRN into a domain-level DNA specification, then designs sequences implementing the domain-level constraints. Multiple sets of sequences are produced during each execution.

Command line utilities

Sequence design and selection

The command line utility piperine-design requires one argument, a file specifying an abstract CRN. An example CRN might be the following, saved in a file called my.crn

 -> B
B -> A
A + A -> A

This CRN can then be compiled into DNA sequences using the following call in a terminal session:

piperine-design my.crn -n 3

The -n 3 argument tells Piperine to generate three candidate sets of sequences. This execution will generate a number of intermediate files suffixed by .sys, .pil, .fixed, and .mfe. Most users will only be interested in the candidate comparison report suffixed by score_report.txt and the files suffixed by .seqs which contain the sequence identities of the strands. At the end of the process, the winning candidate will be announced. Sequence sets are indexed starting at 0 and saved to filenames myi.crn, for index i.

Users may also adjust toehold generation parameters through command line arguments. These optional arguments define the target binding energy, allowable deviation from the target energy, and maximum relative energy of unintended toehold interactions. To override the default values, apply arguments as in :

piperine-design my.crn --energy 7.5 --deviation 0.5 --maxspurious 0.5

This may be necessary when generating sequences for CRNs including more than 10 toeholds. If the default or user-specified toehold energetics parameters cannot be satisfied by the sequence designer, Piperine will suggest values that will generate a sufficient number of toeholds.

More complete information on the piperine-design utility may be found in its documentation:

piperine-design --help

Translation schemes

A translation scheme is a set of rules that define how a general CRN may be translated into a DNA implementation. For Piperine, translation schemes are Python packages that provide the information and functions required for Piperine to design and score DNA sequences. Two translation schemes are included with Piperine: Chen2013 and Srinivas2017. For more information on these schemes, review the publications listed in the references below.

By default Piperine will use the Srinivas2017 scheme when designing sequences. To use the Chen2013 scheme, use the --translation_scheme argument.

piperine-design my.crn --translation_scheme Chen2013


  1. Chen, Y. J. et al. Programmable chemical controllers made from DNA. Nat. Nanotechnol. 8, 755–762 (2013).
  2. Srinivas, N., Parkin, J., Seelig, G., Winfree, E. & Soloveichik, D. Enzyme-free nucleic acid dynamical systems. Science (80-. ). 358, (2017).