diff --git a/nextflow/build.gradle b/nextflow/build.gradle
new file mode 100644
index 00000000..01f789da
--- /dev/null
+++ b/nextflow/build.gradle
@@ -0,0 +1,10 @@
+import org.labkey.gradle.util.BuildUtils
+
+plugins {
+ id 'org.labkey.build.module'
+}
+
+dependencies {
+ BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: BuildUtils.getPlatformModuleProjectPath(project.gradle, "pipeline"), depProjectConfig: "published", depExtension: "module")
+}
+
diff --git a/nextflow/module.properties b/nextflow/module.properties
new file mode 100644
index 00000000..be867ce9
--- /dev/null
+++ b/nextflow/module.properties
@@ -0,0 +1,8 @@
+ModuleClass: org.labkey.nextflow.NextFlowModule
+Label: NextFlow module
+Description: This module provides the functionality \
+ for running the NextFlow pipeline jobs on PanoramaWeb.
+License: Apache 2.0
+LicenseURL: http://www.apache.org/licenses/LICENSE-2.0
+SupportedDatabases: pgsql
+ManageVersion: false
diff --git a/nextflow/resources/views/begin.html b/nextflow/resources/views/begin.html
new file mode 100644
index 00000000..9ba623a2
--- /dev/null
+++ b/nextflow/resources/views/begin.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nextflow/resources/views/nextFlowConfiguration.html b/nextflow/resources/views/nextFlowConfiguration.html
new file mode 100644
index 00000000..fd2a895c
--- /dev/null
+++ b/nextflow/resources/views/nextFlowConfiguration.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
diff --git a/nextflow/resources/views/nextFlowConfiguration.view.xml b/nextflow/resources/views/nextFlowConfiguration.view.xml
new file mode 100644
index 00000000..8a589d3c
--- /dev/null
+++ b/nextflow/resources/views/nextFlowConfiguration.view.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/nextflow/src/org/labkey/nextflow/NextFlowController.java b/nextflow/src/org/labkey/nextflow/NextFlowController.java
new file mode 100644
index 00000000..ed9600c7
--- /dev/null
+++ b/nextflow/src/org/labkey/nextflow/NextFlowController.java
@@ -0,0 +1,308 @@
+package org.labkey.nextflow;
+
+import org.apache.logging.log4j.Logger;
+import org.labkey.api.action.ApiResponse;
+import org.labkey.api.action.ApiSimpleResponse;
+import org.labkey.api.action.FormViewAction;
+import org.labkey.api.action.MutatingApiAction;
+import org.labkey.api.action.ReadOnlyApiAction;
+import org.labkey.api.action.SpringActionController;
+import org.labkey.api.data.PropertyManager;
+import org.labkey.api.data.PropertyStore;
+import org.labkey.api.module.Module;
+import org.labkey.api.module.ModuleHtmlView;
+import org.labkey.api.module.ModuleLoader;
+import org.labkey.api.pipeline.PipeRoot;
+import org.labkey.api.pipeline.PipelineJob;
+import org.labkey.api.pipeline.PipelineService;
+import org.labkey.api.pipeline.PipelineStatusUrls;
+import org.labkey.api.security.AdminConsoleAction;
+import org.labkey.api.security.RequiresPermission;
+import org.labkey.api.security.SecurityManager;
+import org.labkey.api.security.permissions.AdminOperationsPermission;
+import org.labkey.api.security.permissions.AdminPermission;
+import org.labkey.api.security.permissions.SiteAdminPermission;
+import org.labkey.api.util.Button;
+import org.labkey.api.util.PageFlowUtil;
+import org.labkey.api.util.URLHelper;
+import org.labkey.api.util.logging.LogHelper;
+import org.labkey.api.view.ActionURL;
+import org.labkey.api.view.HtmlView;
+import org.labkey.api.view.NavTree;
+import org.labkey.api.view.ViewBackgroundInfo;
+import org.labkey.nextflow.pipeline.NextFlowPipelineJob;
+import org.springframework.validation.BindException;
+import org.springframework.validation.Errors;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.labkey.api.util.DOM.Attribute.method;
+import static org.labkey.api.util.DOM.DIV;
+import static org.labkey.api.util.DOM.LK.FORM;
+import static org.labkey.api.util.DOM.P;
+import static org.labkey.api.util.DOM.at;
+import static org.labkey.nextflow.NextFlowManager.NEXTFLOW_CONFIG;
+
+public class NextFlowController extends SpringActionController
+{
+ private static final DefaultActionResolver _actionResolver = new DefaultActionResolver(NextFlowController.class);
+ public static final String NAME = "nextflow";
+ private static final String IS_NEXTFLOW_ENABLED = "enabled";
+
+ private static final Logger LOG = LogHelper.getLogger(NextFlowController.class, NAME);
+
+ public NextFlowController()
+ {
+ setActionResolver(_actionResolver);
+ }
+
+ @RequiresPermission(AdminPermission.class)
+ public class GetNextFlowConfigurationAction extends ReadOnlyApiAction