C6 is a JavaScript-based synthetic biology toolkit for modeling, designing, and simulating DNA construction strategies. It provides functionality for sequence manipulation, cloning simulation, annotation, oligo design, and more. This demo site illustrates how to use each part of the C6 library in live browser-based code.
Functions for cleaning, validating, reversing, and analyzing DNA sequences, as well as representing DNA molecules as structured objects that include strandedness, end chemistries, and circularity.
// Clean up and validate a DNA sequence
const cleaned = C6.cleanup("4201 ACAACCCCAA GGACCGCGCC");
console.log("Cleaned:", cleaned);
// Reverse complement
const rev = C6.revcomp("ACAACCCCAA");
console.log("Reverse complement:", rev);
// GC content
const gc = C6.gccontent("ACAACCCCAA");
console.log("GC content:", gc);
// Base balance
const balance = C6.basebalance("ACAACCCCAA");
console.log("Base balance:", balance);
// Max repeat
const repeat = C6.maxrepeat("AAACCCGGGTTT");
console.log("Max repeat:", repeat);
// Palindromic check
console.log("AATT is palindromic?", C6.isPalindromic("AATT"));
// Translate
console.log("Translated protein:", C6.translate("ATGGAGAACTAGGGTCTC"));
// Instantiating a double stranded circular plasmid as a Polynucleotide:
const plasmid1 = C6.plasmid("ACAACCCCAA");
console.log("Plasmid object:", plasmid1);
// Instantiating a single stranded linear oligo as a Polynucleotide:
const oligo1 = C6.oligo("ACAACCCCAA");
console.log("Oligo object:", oligo1);
// Instantiating a double stranded linear DNA:
const dsdna1 = C6.dsDNA("ACAACCCCAA");
console.log("dsDNA object:", dsdna1);
// Instantiating a double stranded linear DNA with sticky ends:
const sticky = C6.polynucleotide("ACAACCCCAA", "GATC", "-TGCA", true, false, false, "", "");
console.log("Sticky-Ended DNA object:", sticky);
Functions for designing and evaluating oligonucleotides for synthetic biology applications, including support for standards like BioBrick, BglBrick, MoClo, and more.
// BglBrick oligos
const orf = "atgcatgtaagtaattttacagctggattgctattacttgtaatagcatttggcggaacataa";
console.log("BglBrick Forward:", C6.bglbrick(orf, 'F'));
console.log("BglBrick Reverse:", C6.bglbrick(orf, 'R'));
// BioBrick oligos
console.log("BioBrick Forward:", C6.biobrick(orf, true, 'F'));
console.log("BioBrick Reverse:", C6.biobrick(orf, true, 'R'));
// MoClo oligos
const ptet = "tccctatcagtgatagagattgacatccctatcagtgatagagatactgagcac";
console.log("MoClo Forward:", C6.moclo(ptet, 'P', 'F'));
console.log("MoClo Reverse:", C6.moclo(ptet, 'P', 'R'));
// Genejoin oligo
console.log("Genejoin Forward:", C6.genejoin(ptet, orf, 'F'));
// PCA synthesis oligos
const pcaseq = "ccataGAATTCATGCCGTCTGGTCGGCCACTGGGGCACCACCCCGGGCCTGAACTTCCTTCTCGCCCACATCAACCGCCTGATCGCCGATCACCAGCAGAACACCGTGTTCATCATGGGTCCTGGCCACGGCGGCCCCGGATCCatcag";
console.log("PCA oligos:", C6.pca(pcaseq));
// LCA synthesis oligos
const lcaseq = "ccataGAATTCATGCCGTCTGGTCGGCCACTGGGGCACATACACCCCGGTATGCCTGAACTTCCTTCTCGCCATACACATCAACCGCCTGATCGCCGATCACCAGCAGAACACCGTGTTCATCATGGGTCCTGGCCACGGCGGCCCCTAAGGATCCcatag";
console.log("LCA oligos:", C6.lca(lcaseq));
// RBS library
const glgS = "atggatcatagtcttaattctttaaataatttcgatttcctggcgcgtagttttgccagaatgcacgcagaaggtcgcccggtcgatattctggccgttactggtaacatggatgaagaacatagaacctggttttgcgcacgttatgcctggtattgtcaacagatgatgcaggcaagagagctggagttagagcactga";
const utr = "gccttaaaaggtatgcgataaccggaggatgtgctt";
console.log("RBS Library Forward:", C6.rbslib(glgS, utr, 'F'));
console.log("RBS Library Reverse:", C6.rbslib(glgS, utr, 'R'));
Run full molecular simulations of cloning workflows defined in Construction Files (CFs).
// PCR simulation
const fwd = C6.oligo("gacttGAATTCgcggccgctTCTAGAgTCCCTATCAGTGATAGAG");
const rev = C6.oligo("catcaACTAGTaGTGCTCAGTATCTCTATCAC");
const tmpl = C6.plasmid("tccctatcagtgatagagattgacatccctatcagtgatagagatactgagcac");
console.log("PCR product:", C6.PCR(fwd, rev, tmpl));
// Golden Gate Assembly
const frag1 = C6.dsDNA("ccaaaGGTCTCAGCTTTGATCGATTCAACCTACTTCCCCTTCATAATCGGTACTAGAGACCacgac");
const frag2 = C6.dsDNA("GGTCTCATACTCAAAATTTACTGACTGGACATGGTCACCACTTAAGTAAGCTTTGAGACC");
console.log("GoldenGate product:", C6.goldengate([frag1, frag2], "BsaI"));
// Gibson Assembly
const gfrag1 = C6.dsDNA("TTGGGTGCACGAGTGGGTTACatcgaactggatctcaacagcggtaagatccttgagagttttcgccccgaagaacgttttccaatgatgagcacttttaaagttctgctatgtggcgcggtattatcccgtATTGACGCCGGGCAAGAGCAACT");
const gfrag2 = C6.dsDNA("ATTGACGCCGGGCAAGAGCAACTcggtcgccgcatacactattctcagaatgacttggttgagtactcaccagtcacagaaaagcatcttacggatggcatgacagtaagagaattatgcagtgctgccataaccatgagtgataacactgcggccaacttacttctgacaacgatcggaggaccgaaggagctaaccgcttttttgcacaacATGGGGGATCATGTAACTCg");
const gfrag3 = C6.dsDNA("ATGGGGGATCATGTAACTCgccttgatcgaaagtaaaagatgctgaagatcagTTGGGTGCACGAGTGGGTTAC");
console.log("Gibson product:", C6.gibson([gfrag1, gfrag2, gfrag3]));
// Restriction Digest
const digestTarget = C6.plasmid("AAAAAGAATTCTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGATCCGGGGG");
const digestResult = C6.digest(digestTarget, ["EcoRI", "BamHI"], 0);
console.log("Digest product:", digestResult);
// Simulate a full Construction File
const CF = {
steps: [
{
operation: "PCR",
output: "P6",
forward_oligo: "P6libF",
reverse_oligo: "P6libR",
template: "pTP1"
},
{
operation: "GoldenGate",
output: "pP6",
enzyme: "BsaI",
dnas: ["P6"]
},
{
operation: "Transform",
dna: "pP6",
output: "colonies"
}
],
sequences: {
P6libF: C6.oligo("ccaaaggtctcATTATANNNNNNNNNNNNNNNNNTGTCAANNNNGAacccaggactcctcgaagtcgttcttaagacaac"),
P6libR: C6.oligo("cagttGGTCTCAATAATNNNNNNANNNNGTtagtatttctcctcgtctacggttaactgatactc"),
pTP1: C6.plasmid("ATTACCGCCTTTGAGTGAGCTGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCGAGTCAGTGAGCGAGGAAGCCTGCAATGTCTGCCACGTATCGCCAGATGTTCCAGACTAGAATAAAGAAAAAGGGAGCCCATGGGCTCCCTTAATTTAAAATGGTTGTCTTAAGAACGACTTCTTTACATTTTTGCTTCCGTGTGGTATTATGGGAGCAGTAGGTCTACGGTTAACTGATACTCCCTAATACAGGAGATACTAGATGTCTTATTCAAAGCATGGCATCGTACAAGAAATGAAGACGAAATACCATATGGAAGGCAGTGTCAATGGCCATGAATTTACGATCGAAGGTGTAGGAACTGGGTACCCTTACGAAGGGAAACAGATGTCCGAATTAGTGATCATCAAGCCTGCGGGAAAACCCCTTCCATTCTCCTTTGACATACTGTCATCAGTCTTTCAATATGGAAACCGTTGCTTCACAAAGTACCCGGCAGACATGCCTGACTATTTCAAGCAAGCATTCCCAGATGGAATGTCATATGAAAGGTCATTTCTATTTGAGGATGGAGCAGTTGCTACAGCCAGCTGGAACATTCGACTCGAAGGAAATTGCTTCATCCACAAATCCATCTTTCATGGCGTAAACTTTCCCGCTGATGGACCCGTAATGAAAAAGAAGACCATTGACTGGGATAAGTCCTTCGAAAAAATGACTGTGTCTAAAGAGGTGCTAAGAGGTGACGTGACTATGTTTCTTATGCTCGAAGGAGGTGGTTCTCACAGATGCCAATTTCACTCCACTTACAAAACAGAGAAGCCGGTCACACTGCCCCCGAATCATGTCGTAGAACATCAAATTGTGAGGACCGACCTTGGCCAAAGTGCAAAAGGCTTTACAGTCAAGCTGGAAGCACATGCCGCGGCTCATGTTAACCCTTTGAAGGTTAAATAAGTTCCGGTGGAGCTCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTGCGCGCTTGGCGGCCGGCTTATCGGTCAGTTTCACCTGATTTACGTAAAAACCCGCTTCGGCGGGTTTTTGCTTTTGGAGGGGCAGAAAGATGAATGACTGTCCACGACGCTATACCCAAAAGAAATGTTCATGGTCATAGCTGTTTCCTGTGTGGTGGTAGATCCTCTACGCCGGACGCATCGTGGCCGGCATCACCGGCGCCACAGGTGCGGTTGCTGGCGCCTATATCGCCGACATCACCCAGAAATCATCCTTAGCGAAAGCTAAGGATTTTTTTTATCTGAAATTCTGCCTCGTGATACGCCTATTTTTATAGGTTAATGTCATGATAATAATGGTTTCTTAGACGTCAGGTGGCACTTTTCGGGGAAATGTGCGCGGAACCCCTATTTGTTTATTTTTCTAAATACATTCAAATATGTATCCGCTCATGAGACAATAACCCTGATAAATGCTTCAATAATATTGAAAAAGGAAGAGTATGAGTATTCAACATTTCCGTGTCGCCCTTATTCCCTTTTTTGCGGCATTTTGCCTTCCTGTTTTTGCTCACCCAGAAACGCTGGTGAAAGTAAAAGATGCTGAAGATCAGTTGGGTGCACGAGTGGGTTACATCGAACTGGATCTCAACAGCGGTAAGATCCTTGAGAGTTTTCGCCCCGAAGAACGTTTTCCAATGATGAGCACTTTTAAAGTTCTGCTATGTGGCGCGGTATTATCCCGTATTGACGCCGGGCAAGAGCAACTCGGTCGCCGCATACACTATTCTCAGAATGACTTGGTTGAGTACTCACCAGTCACAGAAAAGCATCTTACGGATGGCATGACAGTAAGAGAATTATGCAGTGCTGCCATAACCATGAGTGATAACACTGCGGCCAACTTACTTCTGACAACGATCGGAGGACCGAAGGAGCTAACCGCTTTTTTGCACAACATGGGGGATCATGTAACTCGCCTTGATCGTTGGGAACCGGAGCTGAATGAAGCCATACCAAACGACGAGCGTGACACCACGATGCCTGTAGCAATGGCAACAACGTTGCGCAAACTATTAACTGGCGAACTACTTACTCTAGCTTCCCGGCAACAATTAATAGACTGGATGGAGGCGGATAAAGTTGCAGGACCACTTCTGCGCTCGGCCCTTCCGGCTGGCTGGTTTATTGCTGATAAATCTGGAGCCGGTGAGCGTGGCTCTCGCGGTATCATTGCAGCACTGGGGCCAGATGGTAAGCCCTCCCGTATCGTAGTTATCTACACGACGGGGAGTCAGGCAACTATGGATGAACGAAATAGACAGATCGCTGAGATAGGTGCCTCACTGATTAAGCATTGGTAATTTTTTTAAGGCAGTTATTGGTGCCTACTATGGAACTGCCTCGGTGAGTTTTCTCCTTCATTACAGAAACGGCTTTTTCAAAAATATGGTATTGATAATCCTGATATGAATAAATTGCAGTTTCATTTGATGCTCGATGAGTTTTTCTAACTGAACTCTTTACAAATCTAAAATGTTTGTGACTGTATTATAAGAACAGAAATCCCCCTTACACGGAGGCATCAGTGACCAAACAGGAAAAAACCGCCCTTAACATGGCCCGCTTTATCAGAAGCCAGACATTAACGCTTCTGGAGAAACTCAACGAGCTGGACGCGGATGAACAGGCAGACATCTGTGAATCGCTTCACGACCACGCTGATGAGCTTTACCGCAGCTGCCTCGCGCGTTTCGGTGATGACGGTGAAAACCTCTGACACATGCAGCTCCCAGCAAAAGGCCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGGACAGTATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAGGATCTTCACCTAGATCCTTCG")
}
};
console.log("Simulated CF:", C6.simCF(CF));
Annotate sequences with biological features and infer transcriptional units and expression.
// Load and annotate a plasmid sequence
const seq = "ATTACCGCCTTTGAGTGAGCaGATACCGCTCGCCGCAGCCGAACGACCGAGCGCAGCTTTGATCGATTCAACCTCTGATCATCACATTCTGACCCTGCTCCGGCAGGGTTTTTTGTTATCGAGTACCTAGCCTACGACGAGTCGTGATTGACATCTGGCCGATCCCAGCCTATAATCTGTCCATGAGGTGAGACTTCCCCTTCATAATCGGTACTGAGGTTGTCGTTGGTAATGAACtctagatttaagaaggagatatacatatgagtaaaggagaagctgtgattaaagagttcatgcgcttcaaagttcacatggagggttctatgaacggtcacgagttcgagatcgaaggcgaaggcgagggccgtccgtatgaaggcacccagaccgccaaactgaaagtgactaaaggcggcccgctgcctttttcctgggacatcctgagcccgcaatttatgtacggttctagggcgttcatcaaacacccagcggatatcccggactattataagcagtcttttccggaaggtttcaagtgggaacgcgtaatgaattttgaagatggtggtgccgtgaccgtcactcaggacacctccctggaggatggcaccctgatctataaagttaaactgcgtggtactaattttccacctgatggcccggtgatgcagaaaaagacgatgggttgggaggcgtctaccgaacgcttgtatccggaagatggtgtgctgaaaggcgacattaaaatggccctgcgcctgaaagatggcggccgctatctggctgacttcaaaaccacgtacaaagccaagaaacctgtgcagatgcctggcgcgtacaatgtggaccgcaaactggacatcacctctcataatgaagattatacggtggtagagcaatatgagcgctccgagggtcgtcattctaccggtggcatggatgaactatacaaataaCTTCATGTATGACCTTAAGCGCGCTTGATTCTTAGTTTCTCGTTGGGCTGCTTTAAGCAGGATGGGGATTTCTCCCCATTCATTTTATTCCCAACATCACATGGACAAGTTCGACTCTGAATTTACAGGACCAGTCCTAAATGATATAATGAATCGACTTGGTGGGCTTCCTTTATTAGCACATGTACTTTGTCGTAGTATCCCGAGTACACGAATAACATTAGTCTCCTTCGGGAGACTTTTTTTCATTTTACCAGCCACGTATCGCCAGATGTTTACATTTAATGATAATGTATTGACTGTAACAGAAGGATCTAAAATAACTCTATCAATGATAGAGTGTCAACAAAAATTAGGAATTAATGATGAGTAGATTAGATAAAAGTAAAGTGATTAACAGCGCATTAGAGCTGCTTAATGAGGTCGGAATCGAAGGTTTAAAAACCCGTAAACTCGCCCAGAAACTTGGTGTAGAGCAGCCTACATTGTATTGGCATGTAAAAAATAAGCGGGCTTTGCTCGACGCCTTAGCCATTGAGATGTTAGATAGGCACCATACTCACTTTTGCCCTTTAGAAGGGGAAAGCTGGCAAGATTTTTTACGTAATAACGCTAAAAGTTTTAGATGTGCTTTACTAAGTCATCGCGATGGAGCAAAAGTACATTTAGGTACACGGCCTACAGAAAAACAGTATGAAACTCTCGAAAATCAATTAGCCTTTTTATGCCAACAAGGTTTTTCACTAGAGAATGCATTATATGCACTCAGCGCTGTGGGGCATTTTACTTTAGGTTGCGTATTGGAAGATCAAGAGCATCAAGTCGCTAAAGAAGAAAGGGAAACACCTACTACTGATAGTATGCCGGCATTATTACGACAAGCTATCGAATTATTTGAACACCAAGGTGCAGAGCCAGCCTTCTTATTCGGCCTTGAATTGATCATATGCGGATTAGAAAAACAACTTAAATGTGAAAGTGGGTCTTAACGACTGCTCCAAGCTATCGGCTTggacataagcctgttcggttcgtaagctgtaatgcaagtagcgtatgcgctcacgcaactggtccagaaccttgaccgaacgcagcggtggtaacggcgcagtggcggttttcatggcttgttatgactgtttttttggggtacagtctatgcctcgggcatccaagcagcaagcgcgttacgccgtgggtcgatgtttgatgttatggagcagcaacgatgttacgcagcagggcagtcgccctaaaacaaagttaaacatcatgagggaagcggtgatcgccgaagtatcgactcaactatcagaggtagttggcgtcatcgagcgccatctcgaaccgacgttgctggccgtacatttgtacggctccgcagtggatggcggcctgaagccacacagtgatattgatttgctggttacggtgaccgtaaggcttgatgaaacaacgcggcgagctttgatcaacgaccttttggaaacttcggcttcccctggagagagcgagattctccgcgctgtagaagtcaccattgttgtgcacgacgacatcattccgtggcgttatccagctaagcgcgaactgcaatttggagaatggcagcgcaatgacattcttgcaggtatcttcgagccagccacgatcgacattgatctggctatcttgctgacaaaagcaagagaacatagcgttgccttggtaggtccagcggcggaggaactctttgatccggttcctgaacaggatctatttgaggcgctaaatgaaaccttaacgctatggaactcgccgcccgactgggctggcgatgagcgaaatgtagtgcttacgttgtcccgcatttggtacagcgcagtaaccggcaaaatcgcgccgaaggatgtcgctgccgactgggcaatggagcgcctgccggcccagtatcagcccgtcatacttgaagctagacaggcttatcttggacaagaagaagatcgcttggcctcgcgcgcagatcagttggaagaatttgtccactacgtgaaaggcgagatcaccaaggtagtcggcaaataatgtctaacaattcgttcaagcGCTTCCGGCTTATCGGTCAGTTTCACCTGATTTACGTAAAAACCCGCTTCGGCGGGTTTTTGCTTTTGGAGGGGCAGAAAGATGAATGACTGTCCACGACGCTATACCCAAAAGAAATGTTCATGGTCATAGCTGTTTCCTGTGTGGTGGTAGATCCTCTACGCCGGACGCATCGTGGCCGGCATCACCGGCGCCACAGGTGCGGTTGCTGGCGCCTATATCGCCGACATCACCCAGAAATCATCCTTAGCGAAAGCTAAGGATTTTTTTTATCTGAAATTCTGCCTCGTGATACgttgatgataccgctgccttactgggtgcattagccagtctgaatgacctgtcacgggataatccgaagtggtcagactggaaaatcagagggcaggaactgctgaacagcaaaaagtcagatagcaccacatagcagacccgccataaaacgccctgagaagcccgtgacgggcttttcttgtattatgggtagtttccttgcatgaatccataaaaggcgcctgtagtgccatttacccccattcactgccagagccgtgagcgcagcgaactgaatgtcacgaaaaagacagcgactcaggtgcctgatggtcggagacaaaaggaatattcagcgatttgcccgattgcggccgcaaccgagcttgcgagggtgctacttaagcctttagggttttaaggtctgttttgtagaggagcaaacagcgtttgcgacatccttttgtaatactgcggaactgactaaagtagtgagttatCcacagggctgggatctattctttttatctttttttattctttctttattctataaattataaccacttgaatataaacaaaaaaaacacacaaaggtctagcggaatttacagagggtctagcagaatttacaagttttccagcaaaggtctagcagaatttacagatacccacaactcaaaggaaaaggactagtaattatcattgactagcccatctcaattggtatagtgattaaaatcacctagaccaattgagatgtatgtctgaattagttgttttcaaagcaaatgaactagcgattagtcgctatgacttaacggagcatgaaaccaagctaattttatgctgtgtggcactactcaaccccacgattgaaaaccctacaaggaaagaacggacggtatcgttcacttataaccaatacgctcagatgatgaacatcagtagggaaaatgcttatggtgtattagctaaagcaaccagagagctgatgacgagaactgtggaaatcaggaatcctttggttaaaggctttgagattttccagtggacaaactatgccaagttctcaagcgaaaaattagaattagtttttagtgaagagatattgccttatcttttccagttaaaaaaattcataaaatataatctggaacatgttaagtcttttgaaaacaaatactctatgaggatttatgagtggttattaaaagaactaacacaaaagaaaactcacaaggcaaatatagagattagccttgatgaatttaagttcatgttaatgcttgaaaataactaccatgagtttaaaaggcttaaccaatgggttttgaaaccaataagtaaagatttaaacacttacagcaatatgaaattggtggttgataagcgaggccgcccgactgatacgttgattttccaagttgaactagatagacaaatggatctcgtaaccgaacttgagaacaaccagataaaaatgaatggtgacaaaataccaacaaccattacatcagattcctacctacgtaacggactaagaaaaacactacacgatgctttaactgcaaaaattcagctcaccagttttgaggcaaaatttttgagtgacatgcaaagtaagcatgatctcaatggttcgttctcatggctcacgcaaaaacaacgaaccacactagagaacatactggctaaatacggaaggatctgaggttcttatggctcttgtatC";
const features = C6.annotateSequence(seq);
console.log("Features:", features);
// Infer transcriptional units
const tus = C6.inferTranscriptionalUnits(features);
console.log("TUs:", tus);
// Expressed proteins
const proteins = C6.inferExpressedProteins(tus);
console.log("Expressed proteins:", proteins);
// Non-expressed CDS
const missing = C6.findNonExpressedCDS(features, proteins);
console.log("Non-expressed CDS:", missing);
Open your browser console (press F12 or Ctrl+Shift+I) to interact with the C6 library directly.
All C6 modules are accessible via the global C6
object.
Try commands like:
console.log(C6.revcomp("ATGC"));
console.log(C6.plasmid("ACAACCCCAA"));