diff --git a/R/helper_functions.R b/R/helper_functions.R
index d15e5a14e9f732ea083f19b07668f16c161932cd..d94bc7b10998a3618322599d31b1717f9eda0929 100644
--- a/R/helper_functions.R
+++ b/R/helper_functions.R
@@ -15,6 +15,45 @@ getPackagesWithTitle <- function() {
    }
 
 
+getWorkflows <- function() {
+  
+  data <- allWORKFLOWS
+  
+  size <- 0 
+  
+  for (tools in data) {
+    if(length(tools$install) > 0) {
+      size <- size + 1
+    }
+  }
+  
+  Tool <- character(size)
+  Version <- character(size)
+  Author <- character(size)
+  Description <- character(size)
+  Link <- character(size)
+  
+  i=1
+  for (tools in data) {
+    Tool[i] = tools$name
+    Version[i] = tools$version
+    Author[i] = tools$author
+    Description[i] = tools$description
+    Link[i] = paste0("<a href='", tools$documentation, "'>documentation</a>")
+    i = i + 1
+  }
+
+  
+  result <- data.frame(Workflow=Tool,
+                       Version=Version,
+                       Author=Author,
+                       Description=Description,
+                       Link=Link)
+  
+  return(result)
+  
+  
+}
 
 
 getBioconductorPackage <- function() {
@@ -61,6 +100,38 @@ getBioconductorPackage <- function() {
   return(result)
 }
 
+getInstallToolPackageWorkflow <- function(tool, containerType) {
+  
+  data <- allWORKFLOWS
+  
+  size <- length(data)
+  
+  intalls <- ""
+  res <- ""
+  
+  for (tools in data) {
+    splitB <- strsplit(tool, "%")  
+    name <- splitB[[1]][1]
+    version <- splitB[[1]][2]
+    
+    if(tools$name == name) {
+      if(tools$version == version) {
+        for (c in tools$dependencies) {
+          tt <- paste0(c$name, "%", c$version)
+          print(tt)
+          res <- paste0(res, getInstallToolPackageBioContainer(tt, containerType))
+          res <- paste0(res, "\n")
+        }
+        res <- paste0(res, "\t", tools$install, collapse='\n' )
+        return(res)
+      }
+    }
+  }
+  
+  return("\t")
+  
+}
+
 getInstallToolPackageBioContainer <- function(tool, containerType) {
   
   data <- allBIOCONTAINER
@@ -76,6 +147,9 @@ getInstallToolPackageBioContainer <- function(tool, containerType) {
       
       if(tools$name == name) {
         if(tools$version == version) {
+          
+                      
+          
             res <- paste0("\t", tools$install, collapse='\n' )
           return(res)
         }
@@ -113,5 +187,33 @@ getInstallToolEnvBioContainer <- function(tool, containerType) {
   return (FALSE)
 }
 
+getInstallToolEnvWorkflows <- function(tool, containerType) {
+  
+  data <- allWORKFLOWS
+  
+  size <- length(data)
+  
+  intalls <- ""
+  
+  for (tools in data) {
+    splitB <- strsplit(tool, "%")  
+    name <- splitB[[1]][1]
+    version <- splitB[[1]][2]
+    
+    if(tools$name == name) {
+      if(tools$version == version) {
+        if(is.null(tools$env)) {
+          return (FALSE)
+        } else {
+          return(tools$env)
+        }
+      }
+    }
+  }
+  
+  return (FALSE)
+}
+
+
 
 
diff --git a/app.R b/app.R
index 1beba587877f94760c610d14a7c05d09f692bc26..6bebe07bd52d2cf3ebb4bdbd00afb27732d6a24b 100644
--- a/app.R
+++ b/app.R
@@ -65,6 +65,20 @@ server <- function( input, output, session) {
     i = i + 1
   }
   
+  allWORKFLOWS <<- list()
+  TMP <<- yaml.load_file("workflow.yaml")$workflows 
+  i = 1
+  j = 1
+  allWORKFLOWS <<- list()
+  for(x in TMP) {
+    if(length(TMP[[i]]$install) > 0) {
+      
+      allWORKFLOWS[[j]] <<- TMP[[i]]
+      j = j + 1
+    }
+    i = i + 1
+  }
+  
   hide("downloadContainerFile")
 
   source("./server/opt_home.R", local=TRUE)
diff --git a/pages/pages_def_home.R b/pages/pages_def_home.R
index f71c8de3bcfd052a7b43517fd47ad87d47d7da35..266135fcc869de1e0009488992a111670de44b4d 100755
--- a/pages/pages_def_home.R
+++ b/pages/pages_def_home.R
@@ -91,7 +91,14 @@ tabHome = fluidPage(align="left",
                                             selectizeInput('rgithubpackagelist', 'R Github selected:', choices = NULL, multiple=TRUE, options = list(maxItems = 30000)),
                                             
                                             br(), br(),
-                                            DT::dataTableOutput('dtrgithubpackage')))
+                                            DT::dataTableOutput('dtrgithubpackage'))),
+                                         
+                                          tabPanel('Workflows',
+                                            div(id = "formWorkflows",
+                                              br(),
+                                              selectizeInput('selectedWorkflows', 'Workflows selected:', choices = NULL, multiple=TRUE, options = list(maxItems = 30000))),
+                                                              
+                                              DT::dataTableOutput('dtWorkflows'))
                                           
                              )
                           )
diff --git a/server/opt_home.R b/server/opt_home.R
index afcd5e2db1862667a6cf0d2d708e5456a881ea10..9a0234615413bb137f0867533d63bc940cf8efc2 100755
--- a/server/opt_home.R
+++ b/server/opt_home.R
@@ -31,6 +31,19 @@ output$dtbiocontainer <- DT::renderDataTable({
   return(result)
 }, filter='top', escape = FALSE, rownames= FALSE,server = TRUE)
 
+getWorkflows
+
+output$dtWorkflows <- DT::renderDataTable({
+  result <- data.frame(Workflow=character(),
+                       Author=character(),
+                       Version=character(),
+                       Description=character())
+  
+  result <- getWorkflows()
+  
+  
+  return(result)
+}, filter='top', escape = FALSE, rownames= FALSE,server = TRUE)
 
 
 createHeader <- function() {
@@ -76,7 +89,10 @@ createEnv <- function(result) {
         result <- paste(result, "\texport R_CONFIG_DIR", sep = "\n")
       }
       
+      
+      haveB <- FALSE 
       if(!is.null(input$dtbiocontainer_rows_all)) {
+        haveB <- TRUE
         result <- paste(result, "\texport PATH=/opt/conda/bin:$PATH", sep = "\n")
         result <- paste(result, "\texport PATH=/opt/biotools/bin:$PATH", sep = "\n")
         result <- paste(result, "\texport ROOTSYS=/opt/biotools/root", sep = "\n")
@@ -85,6 +101,18 @@ createEnv <- function(result) {
         result <- createPathBiocontainer(result)
       }
       
+      if(!is.null(input$dtWorkflows_rows_all)) {
+        if(!haveB) {
+          result <- paste(result, "\texport PATH=/opt/conda/bin:$PATH", sep = "\n")
+          result <- paste(result, "\texport PATH=/opt/biotools/bin:$PATH", sep = "\n")
+          result <- paste(result, "\texport ROOTSYS=/opt/biotools/root", sep = "\n")
+          result <- paste(result, "\texport LD_LIBRARY_PATH='$LD_LIBRARY_PATH:$ROOTSYS/lib'", sep = "\n")
+        }
+
+        result <- paste(result, "\texport PATH=/opt/workflows/bin:$PATH", sep = "\n")
+        result <- createPathWorkflow(result)
+      }
+      
       
   } else {
       if(input$rtemplate == "none" || input$fromTemplate == "r-base") {
@@ -102,7 +130,9 @@ createEnv <- function(result) {
         result <- paste(result, "RUN export R_CONFIG_DIR", sep = "\n")
       }
       
+      haveB <- FALSE
       if(!is.null(input$dtbiocontainer_rows_all)) {
+        haveB <- TRUE
         result <- paste(result, "RUN export PATH=/opt/conda/bin:$PATH", sep = "\n")
         result <- paste(result, "RUN export PATH=/opt/biotools/bin:$PATH", sep = "\n")
         result <- paste(result, "RUN export ROOTSYS=/opt/biotools/root", sep = "\n")
@@ -110,6 +140,17 @@ createEnv <- function(result) {
         
         result <- createPathBiocontainer(result)
       }
+    
+      if(!is.null(input$dtWorkflows_rows_all)) {
+        if(!haveB) {
+          result <- paste(result, "RUN export PATH=/opt/conda/bin:$PATH", sep = "\n")
+          result <- paste(result, "RUN export PATH=/opt/biotools/bin:$PATH", sep = "\n")
+          result <- paste(result, "RUN export ROOTSYS=/opt/biotools/root", sep = "\n")
+          result <- paste(result, "RUN export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:$ROOTSYS/lib'", sep = "\n")
+        }
+        result <- paste(result, "RUN export PATH=/opt/workflows/bin:$PATH", sep = "\n")
+        result <- createPathWorkflow(result)
+      }
   }
 
   result <- paste0(result, "\n")
@@ -355,6 +396,40 @@ createBioconductorPackage <- function(result) {
   return(result)
 }
 
+
+createPathWorkflow <- function(result) {
+  
+  if(input$containerType == "singularity") {
+    selectBioTool <- input$selectedWorkflows
+    for (tool in selectBioTool){
+      
+      to <- getInstallToolEnvWorkflows(tool, input$containerType)
+      
+      if(is.character(to)) {
+        result <- paste0(result, "\n\t", to)
+      }
+      
+    }
+    
+  } else {
+    selectBioTool <- input$selectedWorkflows
+    for (tool in selectBioTool){
+      
+      to <- getInstallToolEnvWorkflows(tool, input$containerType)
+      
+      if(is.character(to)) {
+        result <- paste0(result, "\nRUN ", to)
+      }
+      
+    }
+    
+  }
+  
+  return(result)
+  
+}
+
+
 createPathBiocontainer <- function(result) {
 
   if(input$containerType == "singularity") {
@@ -385,6 +460,132 @@ createPathBiocontainer <- function(result) {
   
   return(result)
   
+}
+#' Use for create Workflows content
+createWorkflows <- function(result, haveR, haveConda) {
+  
+  if(input$containerType == "singularity") {
+    selectWorkflows <- input$selectedWorkflows
+    
+    result <- paste0(result, "\n")
+    
+    if(!haveConda) {
+    
+        result <- paste(result, "\tapt-get install -y  autotools-dev automake cmake curl grep sed dpkg fuse git zip openjdk-8-jre build-essential pkg-config python python-dev python-pip bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 mercurial subversion zlib1g-dev libncurses5-dev libncursesw5-dev", sep = "\n")
+        result <- paste(result, "\tapt-get update", sep = "\n")
+        
+        result <- paste0(result, "\n")
+        
+        result <- paste(result, "\techo \'export PATH=/opt/conda/bin:$PATH\' > /etc/profile.d/conda.sh && \\",
+                        "\twget --quiet https://repo.continuum.io/miniconda/Miniconda2-4.0.5-Linux-x86_64.sh -O ~/miniconda.sh && \\",
+                        "\t/bin/bash ~/miniconda.sh -b -p /opt/conda && \\",
+                        "\trm ~/miniconda.sh", sep = "\n")
+        
+        result <- paste0(result, "\n")
+        
+        result <- paste(result, "\tTINI_VERSION=`curl https://github.com/krallin/tini/releases/latest | grep -o \"/v.*\\\"\" | sed \'s:^..\\(.*\\).$:\\1:\'` && \\",
+                        "\tcurl -L \"https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini_${TINI_VERSION}.deb\" > tini.deb && \\",
+                        "\tdpkg -i tini.deb && \\",
+                        "\trm tini.deb && \\",
+                        "\tapt-get clean", sep = "\n")
+        
+        result <- paste0(result, "\n")
+        
+        result <- paste(result, '\tif [ ! -d "/opt/biotools" ];then mkdir /opt/biotools; fi', sep = "\n")
+        result <- paste(result, '\tif [ ! -d "/opt/biotools/bin" ];then mkdir /opt/biotools/bin; fi', sep = "\n")
+        result <- paste(result, "\tchmod 777 -R /opt/biotools/", sep = "\n")
+        result <- paste(result, "\texport PATH=/opt/biotools/bin:$PATH", sep = "\n")
+        
+        result <- paste(result, "\tchmod 777 -R /opt/conda/", sep = "\n")
+        result <- paste(result, "\texport PATH=/opt/conda/bin:$PATH", sep = "\n")
+        
+        if(!haveR) {
+          result <- paste(result, "\tconda config --add channels r", sep = "\n")
+        }
+        
+        result <- paste(result, "\tconda config --add channels bioconda", sep = "\n")
+        result <- paste(result, "\tconda upgrade conda", sep = "\n")
+        
+        result <- paste0(result, "\n")
+    
+    }
+    
+    result <- paste(result, '\tif [ ! -d "/opt/workflows" ];then mkdir /opt/workflows; fi', sep = "\n")
+    result <- paste(result, '\tif [ ! -d "/opt/workflows/bin" ];then mkdir /opt/workflows/bin; fi', sep = "\n")
+    result <- paste(result, "\tchmod 777 -R /opt/workflows/", sep = "\n")
+    result <- paste(result, "\texport PATH=/opt/workflows/bin:$PATH", sep = "\n")
+    
+    for (tool in selectWorkflows){
+      
+      result <- paste(result, '############### Install Workflow tools ##############', sep = "\n")
+      
+      
+      result <- paste(result, getInstallToolPackageWorkflow(tool, input$containerType), sep="\n\n")
+    }
+  } else {
+    selectBioTool <- input$selectedBiocontainer
+    
+    result <- paste0(result, "\n")
+    
+    if(!haveConda) {
+    
+        result <- paste(result, "RUN apt-get install -y  autotools-dev automake cmake curl grep sed dpkg fuse git zip openjdk-8-jre build-essential pkg-config python python-dev python-pip bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 mercurial subversion zlib1g-dev libncurses5-dev libncursesw5-dev", sep = "\n")
+        result <- paste(result, "RUN apt-get update", sep = "\n")
+        
+        result <- paste0(result, "\n")
+        
+        result <- paste(result, "RUN echo \'export PATH=/opt/conda/bin:$PATH\' > /etc/profile.d/conda.sh && \\",
+                        "\twget --quiet https://repo.continuum.io/miniconda/Miniconda2-4.0.5-Linux-x86_64.sh -O ~/miniconda.sh && \\",
+                        "\t/bin/bash ~/miniconda.sh -b -p /opt/conda && \\",
+                        "\trm ~/miniconda.sh", sep = "\n")
+        
+        result <- paste0(result, "\n")
+        
+        result <- paste(result, "RUN TINI_VERSION=`curl https://github.com/krallin/tini/releases/latest | grep -o \"/v.*\\\"\" | sed \'s:^..\\(.*\\).$:\\1:\'` && \\",
+                        "\tcurl -L \"https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini_${TINI_VERSION}.deb\" > tini.deb && \\",
+                        "\tdpkg -i tini.deb && \\",
+                        "\trm tini.deb && \\",
+                        "\tapt-get clean", sep = "\n")
+        
+        result <- paste0(result, "\n")
+        
+        result <- paste(result, "RUN mkdir /opt/biotools", sep = "\n")
+        result <- paste(result, "RUN mkdir /opt/biotools/bin", sep = "\n")
+        result <- paste(result, "RUN chmod 777 -R /opt/biotools/", sep = "\n")
+        result <- paste(result, "ENV PATH=/opt/biotools/bin:${PATH}", sep = "\n")
+        
+        result <- paste(result, "RUN chmod 777 -R /opt/conda/", sep = "\n")
+        result <- paste(result, "ENV PATH=/opt/conda/bin:${PATH}", sep = "\n")
+        
+        if(!haveR) {
+          result <- paste(result, "RUN conda config --add channels r", sep = "\n")
+        }
+        
+        result <- paste(result, "RUN conda config --add channels bioconda", sep = "\n")
+        result <- paste(result, "RUN conda upgrade conda", sep = "\n")
+        
+        result <- paste0(result, "\n")
+    
+    }
+    
+    result <- paste(result, "RUN mkdir /opt/workflows", sep = "\n")
+    result <- paste(result, "RUN mkdir /opt/workflows/bin", sep = "\n")
+    result <- paste(result, "RUN chmod 777 -R /opt/workflows/", sep = "\n")
+    result <- paste(result, "ENV PATH=/opt/workflows/bin:${PATH}", sep = "\n")
+    
+    for (tool in selectBioTool){
+      
+      result <- paste(result, '############### Install Workflow ##############', sep = "\n")
+      
+      
+      result <- paste0(result, "\nRUN ", getInstallToolPackageWorkflow(tool, input$containerType))
+    }
+    
+  }
+  
+  result <- paste0(result, "\n")
+  return(result)
+  
 }
 
 #' Use for create Biocontainer content
@@ -530,10 +731,14 @@ createContentFile <- function() {
       result <- createBioconductorPackage(result)
       result <- createGithubPackage(result)
 
+  haveBiocontainer <- FALSE
   if(!is.null(input$selectedBiocontainer)) {
+    haveBiocontainer <- TRUE
     result <- createBiocontainer(result, haveR)
   }
   
+  result <- createWorkflows(result, haveR, haveBiocontainer)
+  
   result <- createExect(result)
   
   result <- paste(result, input$customDataContainer, sep = "\t\n")
@@ -605,6 +810,25 @@ observe({
 })
 
 
+
+
+observe({
+  
+  if(is.null(input$dtWorkflows_rows_selected)) {
+    shinyjs::reset("formWorkflows")
+  } else {
+    i = 1
+    selectWorkflows <- list()
+    for(x in input$dtWorkflows_rows_selected) {
+      selectWorkflows[i] = paste(allWORKFLOWS[[x]]$name, allWORKFLOWS[[x]]$version, sep = "%")
+      i = i + 1
+    }
+    selectWorkflows <- c(unlist(selectWorkflows))
+    updateSelectizeInput(session,"selectedWorkflows", choices = selectWorkflows, selected = selectWorkflows, options = list())
+  }
+})
+
+
 observe({
   
   if(is.null(input$dtrcranpackage_rows_selected)) {