Iggypop
End-to-end design of 100s of genetic parts in a single experiment
Install / Use
/learn @cutlersr/IggypopREADME
iggypop

iggypop is a pipeline for designing and synthesizing genes from oligonucleotide pools. Input sequences are fragmented into segments that can be amplified using gene-specific primers and reassembled by Golden Gate cloning. Sequence-verified constructs are then identified by nanopore sequencing of barcoded amplicons using IGGYPOPseq. An iggypop protocol is available here and the results described in Dvir et al. 2025
Installation
Linux
git clone https://github.com/cutlersr/iggypop
cd iggypop
conda create -n iggypop python=3.9 r-base=4.3.3 -c conda-forge
conda activate iggypop
chmod +x setup.sh
./setup.sh
Docker
Users can simply pull the image available at https://hub.docker.com/r/cutlerlab/iggypop.
# this is your best option on a mac
git clone https://github.com/cutlersr/iggypop
cd iggypop
docker pull cutlerlab/iggypop
docker run -it cutlerlab/iggypop
Running the Streamlit App
We developed a simple web application that allows users to access the basic functions of iggypop in a friendly manner.
# with the iggypop env activated
python -m streamlit run iggyapp.py
Working with Coding Sequences
Coding sequences are domesticated, fragmented, indexed, and appended with cut sites to yield oligonucleotides that can be amplified with gene-specific primers and then assembled using Golden Gate methods. Sequence domestication and optimization prior to fragmentation is conducted using the software package dnachisel; sequence optimization parameters can be set in a YAML file using dnachisel specifications. Several YAML files used in our common workflows are in the YAML folder.
To generate oligos using default settings:
./iggypop.py cds --i "test/10_TFs.fasta" --o "10_TFs"
# OUTPUTS to out/10_TFs folder:
# oligos: 10_TFs_oligo_pool.fasta
# sequences: designed_seqs.fasta
# gb annotation of all changes: all_reports.gb
# indexing primers: index_primers_required.fasta
# IGGYPOPseq template file: ReferenceInfo.xlsx
# summary file with run parameters, sequences, oligos: all_data.xlsx
# input fasta, yaml parameters file, code used: assets/
# dnachisel reports for each clone: reports/
The default settings (yaml/domesticate_cds.yml):
- Remove GG sites used for assembly and downstream MoClo (BsaI, BsmBI)
- Enforce synonymous changes
- Assemble from oligos ≤ 250 bp with BsmBI
- Create GoldenBraid / MoClo compatible ORFs
Oligos are PCR amplified and then cloned into pPOP or pPlantPOP vectors, which use AATG/GCT overhangs. These are available from Addgene (pPOP-BsmBI; pPOP-BbsI, and pPlantPOP).
Simulating assembly-- sanity check before ordering
You can use assemble_fragments.py to simulate golden gate assembly and confirm that none of your index primers are used on more than one gene and output the assembled sequences to a fasta file:
python scripts/assemble_fragments.py \
--i "out/10_TFs/10_TFs_oligo_pool.fasta" \
--o "out/10_TFs/10_TFs_assembled_oligos.fasta"
Sequence optimization using dnachisel functions:
dnachisel is a versatile sequence optimizer and its functions can be harnessed to both enforce constraints such as removing sequences like restriction cut sites or hairpins if present. It can also be used to optimize sequences, for example maximize a coding sequence's codon usage based on a target codon table (i.e. codon optimization), minimize the occurrences of repeated sequences, and many other parameters (as described here). The example below uses this yaml to remove common IIS sites, optimize using match_codon_usage, remove hairpins, and reduce ≥12 bp sequence repeats. The --species command line argument specifies a rice codon table instead of the default Arabidopsis codon table.
./iggypop.py cds \
--i "test/10_TFs.fasta" --o "10_TFs_mcu" \
--species "o_sativa" \
--yml "yaml/domesticate_cds_mcu.yml"
GC-boosting
The yaml in the example uses dnachisel to domesticate and GC-boost input coding sequences similarly to that used for STARBURST in Dvir et al. 2025.
./iggypop.py cds --i "test/edibles.fasta" --o "high_gc_edibles" \
--yml "yaml/domesticate_cds_mcu_gc_53.yml"
Overriding defaults:
To modify from the command line so that the only additions to the sequence are 5'-AATG and GCTT-3', which are required as terminal overhangs with the pPOP vectors:
./iggypop.py cds \
--i "test/10_TFs.fasta" --o "10_TFs_not_moclo" \
--base_5p_end "A" --base_3p_end "GCTT"
# `--base_5p_end A` together w/ the CDS's ATG creates the AATG needed for cloning into pPOP vectors
Changing cloning overhangs
You can change the external overhangs for cloning; all three parameters below need to be updated.
./iggypop.py cds --i "test/RUBY.fasta" \
--base_5p_end "AAAA" --base_3p_end "GCCG" \
--ext_overhangs "AAAA" "GCCG"
Using different enzymes, oligo lengths, and codon optimization:
To codon optimize coding sequences with an E. coli codon table, use BsaI sites for assembly, and synthesize ≤300 bp oligonucleotides:
./iggypop.py cds \
--i "test/10_TFs.fasta" --o "10_TFs_300bp_BsaI_coli_mcu" \
--pcr_5p_cut "GGTCTCA" --pcr_3p_cut "AGAGACC" \
--codon_opt "match_codon_usage" --species "e_coli" \
--oligo_length 300
MoClo compatibility:
Iggypop's defaults are oriented toward developing reusable MoClo/Goldenbraid compatible genetic parts. The default iggypop.py cds settings create sequences with 5'-BsaI-AATG and GCTT-BsaI-3' ends.
You can adjust the base_5p_end and base_3p_end parameters to modify this behavior.
If you want to make minimal changes to your input sequence, use the minimal yaml; it removes the IIS site used for cloning into pPOP-BsmBI, appends the required cloning overhangs (AATG/GCTT) but makes no other changes:
./iggypop.py cds --i "test/10_TFs.fasta" --o "10_TFs" \
--yml "yaml/domesticate_cds_minimal.yml"
Working with non-coding sequences:
iggypop.py cds checks to ensure that your sequence is an ORF (multiple of 3) that begins with an ATG; this is required so that only synonymous changes are made to your coding sequence when IIS sites are removed (required for proper assembly). If you want to generate oligos for non-coding sequences, such as promoters, you can use the --require_orf off flag. This example uses a yaml that will take an input fasta file and generate oligos to create constructs in pPOP with Goldenbraid compatible promoter fragments (BsaI--GGAG....AATG--BsaI); BsmBI and BsaI are removed if present.
./iggypop.py cds \
--i "test/10_At_promoters.fasta" --o "10_At_promoters" \
--yml "yaml/promoters.yml"
For complex constructs containing coding and non-coding sequences, use iggypop.py gb and an annotated GenBank file (see below).
Two-step assemblies
Although assembly of long (>2.5 kb) sequences is possible, the assembly efficiency can be low and identifying error-free clones often requires more amplicon sequencing. For longer sequences, we recommend that you use the two-step assembly mode; this breaks sequences into "step one" blocks which are assembled from oligo pools using BbsI into the pPOP-BbsI vector. Sequence validated step one clones are identified and the final genes are assembled in a second step using pPOP-BsmBI.
To do this, use the provided two_step YAML files:
./iggypop.py cds --i "test/RUBY.fasta" --o "RUBY_two_step" \
--yml "yaml/domesticate_two_step_cds.yml"
Note: the two-step assembly YAMLs add BbsI sites (instead of BsmBI) to the oligo ends for assembly of the PCR products amplified from pools into pPOP-BbsI.
Combining oligo pools from different runs
Use "--primer_index" to specify the starting row of the indexset file for new runs.
./iggypop.py cds --i "test/edibles.fasta" --o "edibles"
# First file has 10 genes in it, so we start the next run at 11
./iggypop.py cds --i "test/juiceables.fasta" --o "juiceables" --primer_index 11
# combine them for ordering:
cat out/juiceables/juiceables_oligo_pool.fasta \
out/edibles/edibles_oligo_pool.fasta > out/oligo_order.fasta
Generating oligos without modifications to input sequences
--mode no_mods will run the hinging process (i.e. identify high-fidelity overhang sets) and output indexed oligo for input sequences without making any changes to your input sequences.
Sequence optimization only
--mode no_hinge will output only dnachisel'd sequences. This example domesticates a set of input sequences using dnachisel. This is a convenient way to access
Related Skills
clearshot
Structured screenshot analysis for UI implementation and critique. Analyzes every UI screenshot with a 5×5 spatial grid, full element inventory, and design system extraction — facts and taste together, every time. Escalates to full implementation blueprint when building. Trigger on any digital interface image file (png, jpg, gif, webp — websites, apps, dashboards, mockups, wireframes) or commands like 'analyse this screenshot,' 'rebuild this,' 'match this design,' 'clone this.' Skip for non-UI images (photos, memes, charts) unless the user explicitly wants to build a UI from them. Does NOT trigger on HTML source code, CSS, SVGs, or any code pasted as text.
openpencil
2.0kThe world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
ui-ux-pro-max-skill
58.2kAn AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
ui-ux-pro-max-skill
58.2kAn AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
