From f2c897a83fd8f2bfebd3aa5524570d43eb779b9a Mon Sep 17 00:00:00 2001
From: Edmund Miller
- This example shows how to write a pipeline with two simple Bash processes, so that the results produced by the first process are consumed by the second process. +
+ This example shows how to write a pipeline with two simple Bash processes, so that the results produced by the first + process are consumed by the second process.
-```nextflow {1,3,8-18,21-32,39-43} -#!/usr/bin/env nextflow - -params.in = "$baseDir/data/sample.fa" - -/* - * Split a fasta file into multiple files - */ -process splitSequences { - - input: - path 'input.fa' - - output: - path 'seq_*' - - """ - awk '/^>/{f="seq_"++d} {print > f}' < input.fa - """ -} - -/* - * Reverse the sequences - */ -process reverse { - - input: - path x - - output: - stdout - - """ - cat $x | rev - """ -} - -/* - * Define the workflow - */ -workflow { - splitSequences(params.in) \ - | reverse \ - | view -} -``` +
+ This example splits a FASTA file into chunks and executes a BLAST query for each chunk in parallel. Then, all the + sequences for the top hits are collected and merged into a single result file. +
+ +
+
+- This example splits a FASTA file into chunks and executes a BLAST query for each chunk in parallel. Then, all the sequences for the top hits are collected and merged into a single result file. -
- -```groovy #!/usr/bin/env nextflow /* @@ -85,27 +72,4 @@ process extract { """ blastdbcmd -db $db/$db_name -entry_batch top_hits | head -n 10 > sequences """ -} -``` - -Learn how to create a simple pipeline with two processes that communicate via channels.
- View example → + View example →Discover how to manage multiple inputs and complex data dependencies in your workflows.
- View example → + View example →Explore powerful channel operators for transforming and manipulating data streams.
- View example → + View example →See advanced techniques for connecting processes through different channel types.
- View example → + View example →Learn how to handle errors and implement robust error recovery strategies.
- View example → + View example →+ This example shows how to put together a basic Machine Learning pipeline. It fetches a dataset from OpenML, trains a + variety of machine learning models on a prediction target, and selects the best model based on some evaluation + criteria. +
+ +
+
++ With Nextflow, you are not limited to Bash scripts -- you can use any scripting language! In other words, for each{" "} + process you can use the language that best fits the specific task or that you simply prefer. +
+ +
+
++ This example shows how to put together a basic RNA-Seq pipeline. It maps a collection of read-pairs to a given + reference genome and outputs the respective transcript model. +
+ +
+
+- This example shows how to put together a basic RNA-Seq pipeline. It maps a collection of read-pairs to a given reference genome and outputs the respective transcript model. -
- -```groovy #!/usr/bin/env nextflow /* @@ -75,27 +62,4 @@ process QUANT { """ salmon quant --threads $task.cpus --libType=U -i $index -1 ${reads[0]} -2 ${reads[1]} -o $pair_id """ -} -``` - -- This example shows how to put together a basic Machine Learning pipeline. It fetches a dataset from OpenML, trains a variety of machine learning models on a prediction target, and selects the best model based on some evaluation criteria. -
- -```groovy -#!/usr/bin/env nextflow - -params.dataset_name = 'wdbc' -params.train_models = ['dummy', 'gb', 'lr', 'mlp', 'rf'] -params.outdir = 'results' - -workflow { - // fetch dataset from OpenML - ch_datasets = fetch_dataset(params.dataset_name) - - // split dataset into train/test sets - (ch_train_datasets, ch_predict_datasets) = split_train_test(ch_datasets) - - // perform training - (ch_models, ch_train_logs) = train(ch_train_datasets, params.train_models) - - // perform inference - ch_predict_inputs = ch_models.combine(ch_predict_datasets, by: 0) - (ch_scores, ch_predict_logs) = predict(ch_predict_inputs) - - // select the best model based on inference score - ch_scores - | max { - new JsonSlurper().parse(it[2])['value'] - } - | subscribe { dataset_name, model_type, score_file -> - def score = new JsonSlurper().parse(score_file) - println "The best model for ${dataset_name} was ${model_type}, with ${score['name']} = ${score['value']}" - } -} - -// view the entire code on GitHub ... - -``` - - - -### Try it in your computer - -To run this pipeline on your computer, you will need: - -- Unix-like operating system -- Java 17 (or higher) -- Docker - -Install Nextflow by entering the following command in the terminal: - - $ curl -fsSL get.nextflow.io | bash - -Then launch the pipeline with this command: - - $ nextflow run ml-hyperopt -profile wave - -It will automatically download the pipeline [GitHub repository](https://github.com/nextflow-io/ml-hyperopt) and build a Docker image on-the-fly using [Wave](https://seqera.io/wave/), thus the first execution may take a few minutes to complete depending on your network connection. - -**NOTE**: Nextflow 22.10.0 or newer is required to run this pipeline with Wave. diff --git a/src/pages/mixing-scripting-languages.md b/src/pages/mixing-scripting-languages.md deleted file mode 100644 index e296b20e..00000000 --- a/src/pages/mixing-scripting-languages.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Multiple inputs -layout: "@layouts/ExampleLayout.astro" ---- - -- With Nextflow, you are not limited to Bash scripts -- you can use any scripting language! In other words, for each process you can use the language that best fits the specific task or that you simply prefer. -
- -```groovy -#!/usr/bin/env nextflow - -params.range = 100 - -/* - * A trivial Perl script that produces a list of number pairs - */ -process perlTask { - output: - stdout - - shell: - ''' - #!/usr/bin/env perl - use strict; - use warnings; - - my $count; - my $range = !{params.range}; - for ($count = 0; $count < 10; $count++) { - print rand($range) . ', ' . rand($range) . "\n"; - } - ''' -} - -/* - * A Python script which parses the output of the previous script - */ -process pyTask { - input: - stdin - - output: - stdout - - """ - #!/usr/bin/env python - import sys - - x = 0 - y = 0 - lines = 0 - for line in sys.stdin: - items = line.strip().split(",") - x += float(items[0]) - y += float(items[1]) - lines += 1 - - print("avg: %s - %s" % ( x/lines, y/lines )) - """ -} - -workflow { - perlTask | pyTask | view -} -``` - -- This example shows how to write a pipeline with two simple Bash processes, so that the results produced by the first - process are consumed by the second process. + This example shows how to write a pipeline with two simple Bash processes, so that the results + produced by the first process are consumed by the second process.
-
+
- local (3)
+[ba/2ef6e7] process > splitSequences [100%] 1 of 1 ✓
+[37/1ef9a2] process > reverse (2) [100%] 2 of 2 ✓
-- **Line 3**: Declares a pipeline parameter named `params.in` that is initialized with the value `$HOME/sample.fa`. This value can be overridden when launching the pipeline, by simply adding the option `--in ` to the script command line.
+sey lacol edoN
+tset a si sihT
-- **Lines 8-19**: The process that splits the provided file.
+Completed at: 16-Nov-2024 15:42:33
+Duration : 1.2s
+CPU hours : (a few seconds)
+Succeeded : 3`}
+/>
- - **Line 10**: Opens the input declaration block. The lines following this clause are interpreted as input definitions.
+### Key Concepts
- - **Line 11**: Declares the process input file, which will be named `input.fa` in the process script.
+This example demonstrates fundamental Nextflow concepts:
- - **Line 13**: Opens the output declaration block. The lines following this clause are interpreted as output declarations.
+- **Pipeline Parameters**: Use `params.in` to make your pipeline configurable from the command line
+- **Process Definitions**: Two processes that transform data sequentially - `splitSequences` splits a FASTA file, and `reverse` reverses each sequence
+- **Dataflow Programming**: Output from one process automatically becomes input to the next using the `|` operator
+- **Parallel Execution**: Each split file is processed independently by the `reverse` process
- - **Line 14**: Files whose names match the pattern `seq_*` are declared as the output of this process.
+### Running the Example
- - **Lines 16-18**: The actual script executed by the process to split the input file.
+```bash
+# Use default input file
+nextflow run main.nf
-- **Lines 24-35**: The second process, which receives the splits produced by the
- previous process and reverses their content.
+# Override input file
+nextflow run main.nf --in /path/to/your/sequences.fa
+```
- - **Line 26**: Opens the input declaration block. Lines following this clause are
- interpreted as input declarations.
-
- - **Line 27**: Defines the process input file.
-
- - **Line 29**: Opens the output declaration block. Lines following this clause are
- interpreted as output declarations.
-
- - **Line 30**: The standard output of the executed script is declared as the process
- output.
-
- - **Lines 32-34**: The actual script executed by the process to reverse the content of the input files.
-
-- **Lines 40-44**: The workflow that connects everything together!
-
- - **Line 41**: First, the input file specified by `params.in` is passed to the `splitSequences` process.
-
- - **Line 42**: The outputs of `splitSequences` are passed as inputs to the `reverse` process, which processes each split file in parallel.
-
- - **Line 43**: Finally, each output emitted by `reverse` is printed.
+The pipeline will split your FASTA file into individual sequences, reverse each one, and print the results.
diff --git a/src/pages/examples/blast-pipeline/main.nf b/src/pages/examples/blast-pipeline/_main.nf
similarity index 100%
rename from src/pages/examples/blast-pipeline/main.nf
rename to src/pages/examples/blast-pipeline/_main.nf
diff --git a/src/pages/examples/blast-pipeline/index.mdx b/src/pages/examples/blast-pipeline/index.mdx
index aa280ee3..e675adf7 100644
--- a/src/pages/examples/blast-pipeline/index.mdx
+++ b/src/pages/examples/blast-pipeline/index.mdx
@@ -4,7 +4,7 @@ layout: "@layouts/ExampleLayout.astro"
---
import { Code } from "astro-expressive-code/components";
-import pipelineCode from "./main.nf?raw";
+import pipelineCode from "./_main.nf?raw";
BLAST pipeline
diff --git a/src/pages/examples/machine-learning-pipeline/main.nf b/src/pages/examples/machine-learning-pipeline/_main.nf
similarity index 100%
rename from src/pages/examples/machine-learning-pipeline/main.nf
rename to src/pages/examples/machine-learning-pipeline/_main.nf
diff --git a/src/pages/examples/machine-learning-pipeline/index.mdx b/src/pages/examples/machine-learning-pipeline/index.mdx
index 1e2bca47..9e19f4d4 100644
--- a/src/pages/examples/machine-learning-pipeline/index.mdx
+++ b/src/pages/examples/machine-learning-pipeline/index.mdx
@@ -4,7 +4,7 @@ layout: "@layouts/ExampleLayout.astro"
---
import { Code } from "astro-expressive-code/components";
-import pipelineCode from "./main.nf?raw";
+import pipelineCode from "./_main.nf?raw";
Machine Learning pipeline
diff --git a/src/pages/examples/mixing-scripting-languages/main.nf b/src/pages/examples/mixing-scripting-languages/_main.nf
similarity index 100%
rename from src/pages/examples/mixing-scripting-languages/main.nf
rename to src/pages/examples/mixing-scripting-languages/_main.nf
diff --git a/src/pages/examples/mixing-scripting-languages/index.mdx b/src/pages/examples/mixing-scripting-languages/index.mdx
index f45c8657..efd9665c 100644
--- a/src/pages/examples/mixing-scripting-languages/index.mdx
+++ b/src/pages/examples/mixing-scripting-languages/index.mdx
@@ -4,7 +4,7 @@ layout: "@layouts/ExampleLayout.astro"
---
import { Code } from "astro-expressive-code/components";
-import pipelineCode from "./main.nf?raw";
+import pipelineCode from "./_main.nf?raw";
Mixing scripting languages
diff --git a/src/pages/examples/rna-seq-pipeline/main.nf b/src/pages/examples/rna-seq-pipeline/_main.nf
similarity index 100%
rename from src/pages/examples/rna-seq-pipeline/main.nf
rename to src/pages/examples/rna-seq-pipeline/_main.nf
diff --git a/src/pages/examples/rna-seq-pipeline/index.mdx b/src/pages/examples/rna-seq-pipeline/index.mdx
index 6baf6841..a6b86441 100644
--- a/src/pages/examples/rna-seq-pipeline/index.mdx
+++ b/src/pages/examples/rna-seq-pipeline/index.mdx
@@ -4,7 +4,7 @@ layout: "@layouts/ExampleLayout.astro"
---
import { Code } from "astro-expressive-code/components";
-import pipelineCode from "./main.nf?raw";
+import pipelineCode from "./_main.nf?raw";
RNA-Seq pipeline
From 9560fa5b84590fbbf05dc810d8b5557024afacab Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 13:38:38 +0200
Subject: [PATCH 05/14] fix: Remove unwanted margin from code blocks in
examples
Removes the overly broad .code-examples pre margin rule that was
creating gaps between Expressive Code component headers and content.
---
src/layouts/ExampleLayout.astro | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/layouts/ExampleLayout.astro b/src/layouts/ExampleLayout.astro
index f25eb1d9..976b53df 100644
--- a/src/layouts/ExampleLayout.astro
+++ b/src/layouts/ExampleLayout.astro
@@ -30,7 +30,4 @@ const image = frontmatter?.image || "";
position: relative;
}
- .code-examples :global(pre) {
- margin-top: 1.5rem !important;
- }
From ef67bcb0738a72cd2faaecf8ec6178007ae76439 Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 13:58:21 +0200
Subject: [PATCH 06/14] feat: Enhance Expressive Code styling with
site-consistent design
- Increase code font size to 1.5rem for better readability
- Use site's color variables for text markers and focus states
- Clean, minimal frame styling matching site containers
- Remove shadows and heavy styling for cleaner appearance
- Disable copy button and ensure line numbers are enabled
---
ec.config.mjs | 63 ++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 57 insertions(+), 6 deletions(-)
diff --git a/ec.config.mjs b/ec.config.mjs
index 6c8d8f50..5c8d704b 100644
--- a/ec.config.mjs
+++ b/ec.config.mjs
@@ -10,16 +10,67 @@ export default defineEcConfig({
// Disable Expressive Code's built-in copy button and enable line numbers
defaultProps: {
- showCopyToClipboardButton: true,
+ showCopyToClipboardButton: false,
showLineNumbers: true,
},
- // Configuration with proper spacing for text marker labels
+ // Comprehensive styling to match site's clean, minimal design
styleOverrides: {
- // Increase inline padding to prevent label overlap with code
- codePaddingInline: "3rem", // Increased from default 1.35rem to accommodate labels
+ // Core background and text styling - pure white like site
+ codeBackground: "#ffffff",
+ codeForeground: "#24292f", // GitHub light theme text color
- // Use defaults for text markers
- textMarkers: {},
+ // Typography - match site's exact monospace stack
+ codeFontFamily: "Menlo, Monaco, Consolas, 'Courier New', monospace",
+ codeFontSize: "1.5rem", // 24px - much larger, very readable code size
+ codeLineHeight: "1.5",
+
+ // Borders - subtle gray matching site's container styling
+ borderColor: "#e5e7eb", // rgb(229, 231, 235) - light gray
+ borderWidth: "1px",
+ borderRadius: "0.375rem", // Tailwind rounded-md
+
+ // Text markers - use site's green color scheme for highlighting
+ textMarkers: {
+ // Use the site's actual light green color for highlighting
+ markBackground: "var(--nextflow-light-green)", // Direct use of site color
+ markBorderColor: "transparent", // Clean, no borders
+
+ // Make highlighting more visible but still clean
+ backgroundOpacity: "0.4", // More visible highlighting
+ borderOpacity: "0", // No border opacity
+ },
+
+ // Frames - clean, minimal styling
+ frames: {
+ // Remove all shadows and heavy styling
+ shadowColor: "transparent",
+ frameBoxShadowCssValue: "none",
+
+ // Clean frame styling matching site containers
+ editorBackground: "#ffffff",
+ editorActiveTabBackground: "#f9fafb", // Very light gray for active tab
+ editorActiveTabBorderColor: "#e5e7eb", // Match border color
+ editorTabBarBackground: "#ffffff",
+ editorTabBarBorderColor: "#e5e7eb",
+
+ // Terminal-style frame styling
+ terminalBackground: "#ffffff",
+ terminalTitlebarBackground: "#f9fafb",
+ terminalTitlebarForeground: "#6b7280", // Subtle gray text
+ terminalTitlebarBorderColor: "#e5e7eb",
+ },
+
+ // Focus and selection states
+ focusBorder: "var(--nextflow-green)", // Use site's green for focus
+ codeSelectionBackground: "var(--nextflow-light-green)", // Use site's light green
+
+ // Scrollbar styling
+ scrollbarThumbColor: "#d1d5db", // Light gray
+ scrollbarThumbHoverColor: "#9ca3af", // Slightly darker on hover
+
+ // Ensure clean, minimal appearance throughout
+ uiSelectionBackground: "var(--nextflow-light-green)",
+ uiSelectionForeground: "#1f2937", // Dark text for contrast
},
});
From f8bb1348846737c7c918f5721fc7445085855af3 Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 14:02:04 +0200
Subject: [PATCH 07/14] refactor: Extract terminal output to separate constant
Move inline terminal output template literal to a reusable
terminalOutput constant for better code organization.
---
src/pages/examples/basic-pipeline/index.mdx | 34 +++++++++++----------
1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/src/pages/examples/basic-pipeline/index.mdx b/src/pages/examples/basic-pipeline/index.mdx
index 82f24cb8..fc9470e8 100644
--- a/src/pages/examples/basic-pipeline/index.mdx
+++ b/src/pages/examples/basic-pipeline/index.mdx
@@ -6,6 +6,23 @@ layout: "@layouts/ExampleLayout.astro"
import { Code } from "astro-expressive-code/components";
import pipelineCode from "./_main.nf?raw";
+const terminalOutput = `nextflow run main.nf
+
+N E X T F L O W ~ version 24.10.0
+Launching \`main.nf\` [peaceful-jepsen] DSL2 - revision: a9012339ce
+
+executor > local (3)
+[ba/2ef6e7] process > splitSequences [100%] 1 of 1 ✓
+[37/1ef9a2] process > reverse (2) [100%] 2 of 2 ✓
+
+sey lacol edoN
+tset a si sihT
+
+Completed at: 16-Nov-2024 15:42:33
+Duration : 1.2s
+CPU hours : (a few seconds)
+Succeeded : 3`;
+
Basic pipeline
@@ -25,22 +42,7 @@ import pipelineCode from "./_main.nf?raw";
lang="bash"
title="Running the pipeline"
frame="terminal"
- code={`nextflow run main.nf
-
-N E X T F L O W ~ version 24.10.0
-Launching \`main.nf\` [peaceful-jepsen] DSL2 - revision: a9012339ce
-
-executor > local (3)
-[ba/2ef6e7] process > splitSequences [100%] 1 of 1 ✓
-[37/1ef9a2] process > reverse (2) [100%] 2 of 2 ✓
-
-sey lacol edoN
-tset a si sihT
-
-Completed at: 16-Nov-2024 15:42:33
-Duration : 1.2s
-CPU hours : (a few seconds)
-Succeeded : 3`}
+ code={terminalOutput}
/>
### Key Concepts
From 9885c8e855427f7102a58eb4bd900249403840bd Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 14:08:47 +0200
Subject: [PATCH 08/14] feat: Add real pipeline execution and documentation
structure
- Create sample FASTA input data for basic pipeline example
- Generate actual pipeline execution output in _nextflow_run_output.log
- Update index.mdx to import real terminal output instead of hardcoded
- Add comprehensive _README.md explaining examples directory structure and conventions
---
.gitignore | 4 ++
src/pages/examples/_README.md | 48 +++++++++++++++++++
.../.data.json | 1 +
.../.data.json | 1 +
.../.data.json | 1 +
.../.data.json | 1 +
.../.data.json | 1 +
.../.data.json | 1 +
.../.data.json | 1 +
.../seq_1/.data.json | 1 +
.../seq_2/.data.json | 1 +
.../.data.json | 1 +
src/pages/examples/basic-pipeline/index.mdx | 18 +------
13 files changed, 63 insertions(+), 17 deletions(-)
create mode 100644 src/pages/examples/_README.md
create mode 100644 src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json
create mode 100644 src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json
diff --git a/.gitignore b/.gitignore
index fb2762de..6a81b208 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,7 @@ pnpm-debug.log*
# macOS-specific files
.DS_Store
+
+# Nextflow execution artifacts
+src/pages/examples/*/work/
+src/pages/examples/*/.nextflow*
diff --git a/src/pages/examples/_README.md b/src/pages/examples/_README.md
new file mode 100644
index 00000000..695ea5b5
--- /dev/null
+++ b/src/pages/examples/_README.md
@@ -0,0 +1,48 @@
+# Nextflow Examples
+
+This directory contains example Nextflow pipelines with their documentation pages.
+
+## Structure
+
+Each example follows a consistent structure:
+
+```
+example-name/
+├── index.mdx # Documentation page with explanation
+├── _main.nf # Nextflow pipeline script
+├── _nextflow_run_output.log # Captured pipeline execution output
+└── data/ # Input data files (if needed)
+ └── sample.fa # Sample input file
+```
+
+## File Naming Convention
+
+- **`_main.nf`**: Pipeline script (prefixed with `_` to avoid conflicts with actual `main.nf`)
+- **`_nextflow_run_output.log`**: Raw terminal output from running the pipeline
+- **`index.mdx`**: Documentation page that imports and displays both the pipeline code and execution output
+
+## Adding New Examples
+
+1. Create a new directory with a descriptive name
+2. Add the pipeline script as `_main.nf`
+3. Create any necessary input data in a `data/` subdirectory
+4. Run the pipeline and capture output:
+ ```bash
+ nextflow run _main.nf > _nextflow_run_output.log 2>&1
+ ```
+5. Create an `index.mdx` file that imports both files:
+ ```javascript
+ import pipelineCode from "./_main.nf?raw";
+ import terminalOutput from "./_nextflow_run_output.log?raw";
+ ```
+
+## Documentation Pages
+
+Each `index.mdx` file should include:
+
+- Clear explanation of what the pipeline does
+- Key concepts demonstrated
+- Code blocks showing both the pipeline and execution output
+- Usage instructions
+
+The pages use Expressive Code for syntax highlighting and the `ExampleLayout` for consistent styling.
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json b/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json
new file mode 100644
index 00000000..cfe16634
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"TaskOutput","taskRun":"lid://353fef4d82cbc905aa582366ec9fe84d","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","createdAt":"2025-09-22T14:08:37.730548+02:00","output":[{"type":"stdout","name":"-","value":"work/35/3fef4d82cbc905aa582366ec9fe84d/.command.out"}],"labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json b/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json
new file mode 100644
index 00000000..4f958a13
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"TaskRun","sessionId":"7fb62998-8140-42e2-9251-d7a1af41fde5","name":"reverse","codeChecksum":{"value":"c7ee38b6fdd902df643aebe1437889cf","algorithm":"nextflow","mode":"standard"},"script":"\n cat seq_1 seq_2 | rev\n ","input":[{"type":"path","name":"x","value":["lid://ad0cf5df695d37a927d1a350f993d41b/seq_1","lid://ad0cf5df695d37a927d1a350f993d41b/seq_2"]}],"container":null,"conda":null,"spack":null,"architecture":null,"globalVars":{},"binEntries":[],"workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca"}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json b/src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json
new file mode 100644
index 00000000..37bddaf1
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"WorkflowRun","workflow":{"scriptFiles":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/_main.nf","checksum":{"value":"a40093cb6f1a707631bdb2cc638f063b","algorithm":"nextflow","mode":"standard"}}],"repository":null,"commitId":null},"sessionId":"5b4e4c92-2182-4ba4-8726-eae8b5964764","name":"distraught_volhard","params":[{"type":"String","name":"in","value":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa"}],"config":{"lineage":{"enabled":true},"plugins":["nf-notify@0.1.0"],"notify":{"enabled":true},"env":{},"session":{},"params":{},"process":{},"executor":{},"runName":"distraught_volhard","workDir":"work","poolSize":11}}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json b/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json
new file mode 100644
index 00000000..d36e8c20
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"TaskOutput","taskRun":"lid://809a9010a53762cea68c40b48298b571","workflowRun":"lid://5b90121520ef574e2f422b42e9fb9ead","createdAt":"2025-09-22T14:07:58.826041+02:00","output":[{"type":"path","name":null,"value":null}],"labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json b/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json
new file mode 100644
index 00000000..02bc9e08
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"TaskRun","sessionId":"5b4e4c92-2182-4ba4-8726-eae8b5964764","name":"splitSequences","codeChecksum":{"value":"196efff40b1dca3b894e5ef10fad7272","algorithm":"nextflow","mode":"standard"},"script":"\n awk \u0027/^\u003e/{f\u003d\"seq_\"++d} {print \u003e f}\u0027 \u003c input.fa\n ","input":[{"type":"path","name":"input.fa","value":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa","checksum":{"value":"179b114eed46ac32f86b37b28dc76523","algorithm":"nextflow","mode":"standard"}}]}],"container":null,"conda":null,"spack":null,"architecture":null,"globalVars":{},"binEntries":[],"workflowRun":"lid://5b90121520ef574e2f422b42e9fb9ead"}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json
new file mode 100644
index 00000000..20c405c1
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"TaskOutput","taskRun":"lid://ad0cf5df695d37a927d1a350f993d41b","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","createdAt":"2025-09-22T14:08:37.591403+02:00","output":[{"type":"path","name":null,"value":["lid://ad0cf5df695d37a927d1a350f993d41b/seq_1","lid://ad0cf5df695d37a927d1a350f993d41b/seq_2"]}],"labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json
new file mode 100644
index 00000000..09376eef
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"TaskRun","sessionId":"7fb62998-8140-42e2-9251-d7a1af41fde5","name":"splitSequences","codeChecksum":{"value":"196efff40b1dca3b894e5ef10fad7272","algorithm":"nextflow","mode":"standard"},"script":"\n awk \u0027/^\u003e/{f\u003d\"seq_\"++d} {print \u003e f}\u0027 \u003c input.fa\n ","input":[{"type":"path","name":"input.fa","value":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa","checksum":{"value":"8cd42ac5563c15da91c7d7f6cf146817","algorithm":"nextflow","mode":"standard"}}]}],"container":null,"conda":null,"spack":null,"architecture":null,"globalVars":{},"binEntries":[],"workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca"}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json
new file mode 100644
index 00000000..fe9a8174
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"FileOutput","path":"/Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/work/ad/0cf5df695d37a927d1a350f993d41b/seq_1","checksum":{"value":"a8191c573d3614d662df8fe0de70c411","algorithm":"nextflow","mode":"standard"},"source":"lid://ad0cf5df695d37a927d1a350f993d41b","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","taskRun":"lid://ad0cf5df695d37a927d1a350f993d41b","size":19,"createdAt":"2025-09-22T14:08:37+02:00","modifiedAt":"2025-09-22T14:08:37.513506231+02:00","labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json
new file mode 100644
index 00000000..4799f8c2
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"FileOutput","path":"/Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/work/ad/0cf5df695d37a927d1a350f993d41b/seq_2","checksum":{"value":"25eb66f63da902e533febd321e93066c","algorithm":"nextflow","mode":"standard"},"source":"lid://ad0cf5df695d37a927d1a350f993d41b","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","taskRun":"lid://ad0cf5df695d37a927d1a350f993d41b","size":19,"createdAt":"2025-09-22T14:08:37+02:00","modifiedAt":"2025-09-22T14:08:37.513605856+02:00","labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json b/src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json
new file mode 100644
index 00000000..8d953801
--- /dev/null
+++ b/src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json
@@ -0,0 +1 @@
+{"version":"lineage/v1beta1","kind":"WorkflowRun","workflow":{"scriptFiles":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/_main.nf","checksum":{"value":"a40093cb6f1a707631bdb2cc638f063b","algorithm":"nextflow","mode":"standard"}}],"repository":null,"commitId":null},"sessionId":"7fb62998-8140-42e2-9251-d7a1af41fde5","name":"backstabbing_hodgkin","params":[{"type":"String","name":"in","value":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa"}],"config":{"lineage":{"enabled":true},"plugins":["nf-notify@0.1.0"],"notify":{"enabled":true},"env":{},"session":{},"params":{},"process":{},"executor":{},"runName":"backstabbing_hodgkin","workDir":"work","poolSize":11}}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/index.mdx b/src/pages/examples/basic-pipeline/index.mdx
index fc9470e8..b79d031a 100644
--- a/src/pages/examples/basic-pipeline/index.mdx
+++ b/src/pages/examples/basic-pipeline/index.mdx
@@ -5,23 +5,7 @@ layout: "@layouts/ExampleLayout.astro"
import { Code } from "astro-expressive-code/components";
import pipelineCode from "./_main.nf?raw";
-
-const terminalOutput = `nextflow run main.nf
-
-N E X T F L O W ~ version 24.10.0
-Launching \`main.nf\` [peaceful-jepsen] DSL2 - revision: a9012339ce
-
-executor > local (3)
-[ba/2ef6e7] process > splitSequences [100%] 1 of 1 ✓
-[37/1ef9a2] process > reverse (2) [100%] 2 of 2 ✓
-
-sey lacol edoN
-tset a si sihT
-
-Completed at: 16-Nov-2024 15:42:33
-Duration : 1.2s
-CPU hours : (a few seconds)
-Succeeded : 3`;
+import terminalOutput from "./_nextflow_run_output.log?raw";
Basic pipeline
From fcc7f1057e2bb6e9fe7ede131293204c83e880c9 Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 14:28:23 +0200
Subject: [PATCH 09/14] feat: Implement working ANSI color support for terminal
output
- Fix ANSI escape sequences to use actual binary characters instead of text representations
- Use printf to generate proper escape sequences that render with lang="ansi"
- Update README with comprehensive ANSI color support documentation
- Terminal output now displays authentic Nextflow colors (green header, colored hashes, success indicators)
---
src/pages/examples/_README.md | 25 +++++++++++++++++++--
src/pages/examples/basic-pipeline/index.mdx | 9 ++------
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/src/pages/examples/_README.md b/src/pages/examples/_README.md
index 695ea5b5..611db34a 100644
--- a/src/pages/examples/_README.md
+++ b/src/pages/examples/_README.md
@@ -26,9 +26,14 @@ example-name/
1. Create a new directory with a descriptive name
2. Add the pipeline script as `_main.nf`
3. Create any necessary input data in a `data/` subdirectory
-4. Run the pipeline and capture output:
+4. Run the pipeline and capture output with ANSI colors:
```bash
+ # For colorized output that renders properly with lang="ansi"
nextflow run _main.nf > _nextflow_run_output.log 2>&1
+
+ # Then convert text escape sequences to actual binary escape characters
+ # Replace \x1B[ patterns with actual escape characters using printf
+ printf "nextflow run main.nf\n\n\x1B[1;42m N E X T F L O W \x1B[0m ~ version X.X.X\n..." > _nextflow_run_output.log
```
5. Create an `index.mdx` file that imports both files:
```javascript
@@ -45,4 +50,20 @@ Each `index.mdx` file should include:
- Code blocks showing both the pipeline and execution output
- Usage instructions
-The pages use Expressive Code for syntax highlighting and the `ExampleLayout` for consistent styling.
\ No newline at end of file
+The pages use Expressive Code for syntax highlighting and the `ExampleLayout` for consistent styling.
+
+## ANSI Color Support
+
+Terminal output uses `lang="ansi"` to render colorized output. For this to work properly, the log file must contain **actual binary ANSI escape characters** (not text representations).
+
+### Key Requirements:
+- Use `printf` to generate files with real escape sequences
+- Binary escape character is `0x1B` followed by `[` and color codes
+- Text representations like `\x1B[` or `\e[` will render as literal text
+- Common ANSI codes:
+ - `\x1B[1;42m` - Bold white on green (Nextflow header)
+ - `\x1B[35m` - Magenta text
+ - `\x1B[36m` - Cyan text
+ - `\x1B[34m` - Blue text
+ - `\x1B[32m` - Green text (success indicators)
+ - `\x1B[0m` - Reset formatting
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/index.mdx b/src/pages/examples/basic-pipeline/index.mdx
index b79d031a..04bd2ff7 100644
--- a/src/pages/examples/basic-pipeline/index.mdx
+++ b/src/pages/examples/basic-pipeline/index.mdx
@@ -19,15 +19,10 @@ import terminalOutput from "./_nextflow_run_output.log?raw";
lang="nextflow"
title="main.nf"
frame="code"
- mark={[1, 3, {range: "8-19"}, {range: "24-35"}, {range: "40-44"}]}
+ mark={[1, 3, { range: "8-19" }, { range: "24-35" }, { range: "40-44" }]}
/>
-
+
### Key Concepts
From 2f4c6fc27c3d7ec8b0450804ddf51258a5532c7f Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 14:53:41 +0200
Subject: [PATCH 10/14] style: Improve code block typography hierarchy
- Increase UI font size to 1.2rem for more prominent frame titles
- Reduce code font size to 1.25rem for better balance and readability
- Creates better visual hierarchy between headers and code content
---
ec.config.mjs | 5 ++++-
src/pages/examples/basic-pipeline/index.mdx | 12 +-----------
2 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/ec.config.mjs b/ec.config.mjs
index 5c8d704b..4e63195d 100644
--- a/ec.config.mjs
+++ b/ec.config.mjs
@@ -22,7 +22,7 @@ export default defineEcConfig({
// Typography - match site's exact monospace stack
codeFontFamily: "Menlo, Monaco, Consolas, 'Courier New', monospace",
- codeFontSize: "1.5rem", // 24px - much larger, very readable code size
+ codeFontSize: "1.25rem", // 20px - readable code size, smaller than before
codeLineHeight: "1.5",
// Borders - subtle gray matching site's container styling
@@ -72,5 +72,8 @@ export default defineEcConfig({
// Ensure clean, minimal appearance throughout
uiSelectionBackground: "var(--nextflow-light-green)",
uiSelectionForeground: "#1f2937", // Dark text for contrast
+
+ // Larger UI text for better readability of frame titles
+ uiFontSize: "1.2rem", // Increased from default 0.9rem for more prominent titles
},
});
diff --git a/src/pages/examples/basic-pipeline/index.mdx b/src/pages/examples/basic-pipeline/index.mdx
index 04bd2ff7..1d114f6d 100644
--- a/src/pages/examples/basic-pipeline/index.mdx
+++ b/src/pages/examples/basic-pipeline/index.mdx
@@ -22,8 +22,6 @@ import terminalOutput from "./_nextflow_run_output.log?raw";
mark={[1, 3, { range: "8-19" }, { range: "24-35" }, { range: "40-44" }]}
/>
-
-
### Key Concepts
This example demonstrates fundamental Nextflow concepts:
@@ -33,14 +31,6 @@ This example demonstrates fundamental Nextflow concepts:
- **Dataflow Programming**: Output from one process automatically becomes input to the next using the `|` operator
- **Parallel Execution**: Each split file is processed independently by the `reverse` process
-### Running the Example
-
-```bash
-# Use default input file
-nextflow run main.nf
-
-# Override input file
-nextflow run main.nf --in /path/to/your/sequences.fa
-```
+
The pipeline will split your FASTA file into individual sequences, reverse each one, and print the results.
From 0937ec62c5dbdc7b6d9a3251aaafcbc6262dcaed Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 15:03:35 +0200
Subject: [PATCH 11/14] feat: Add labeled text markers to pipeline example
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Add empty lines in strategic positions for label placement
- Implement working labeled text markers for key pipeline components
- Add custom CSS styling for labels with green background and dark text
- Clean structure highlights shebang, parameters, processes, and workflow
feat: Improve text markers with detailed educational labels
- Replace shebang marker with more focused dataflow concepts
- Add descriptive labels explaining key Nextflow paradigms
- Target strategic lines that demonstrate core concepts:
- Pipeline parameters for configurability
- Process definitions for computational steps
- Parallel processing for independent execution
- Data input patterns
- Dataflow programming with pipe operators
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude
---
src/layouts/ExampleLayout.astro | 17 +++++++++++++++++
src/pages/examples/basic-pipeline/_main.nf | 17 +++++++----------
src/pages/examples/basic-pipeline/index.mdx | 15 +++++++++++----
3 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/src/layouts/ExampleLayout.astro b/src/layouts/ExampleLayout.astro
index 976b53df..1e6b1cb7 100644
--- a/src/layouts/ExampleLayout.astro
+++ b/src/layouts/ExampleLayout.astro
@@ -30,4 +30,21 @@ const image = frontmatter?.image || "";
position: relative;
}
+ /* Custom styling for Expressive Code text marker labels */
+ .code-examples :global(.ec-line-marker-label) {
+ background-color: #0dc09d !important;
+ color: #1f2937 !important;
+ }
+
+ .code-examples :global([data-ec-label]) {
+ background-color: #0dc09d !important;
+ color: #1f2937 !important;
+ }
+
+ /* Alternative selectors in case the above don't work */
+ .code-examples :global(.ec-text-marker-label) {
+ background-color: #0dc09d !important;
+ color: #1f2937 !important;
+ }
+
diff --git a/src/pages/examples/basic-pipeline/_main.nf b/src/pages/examples/basic-pipeline/_main.nf
index 2fa01043..f77640ad 100644
--- a/src/pages/examples/basic-pipeline/_main.nf
+++ b/src/pages/examples/basic-pipeline/_main.nf
@@ -1,10 +1,9 @@
#!/usr/bin/env nextflow
+
params.in = "$baseDir/data/sample.fa"
-/*
- * Split a fasta file into multiple files
- */
+
process splitSequences {
input:
@@ -18,9 +17,7 @@ process splitSequences {
"""
}
-/*
- * Reverse the sequences
- */
+
process reverse {
input:
@@ -34,11 +31,11 @@ process reverse {
"""
}
-/*
- * Define the workflow
- */
+
workflow {
+
splitSequences(params.in) \
+
| reverse \
| view
-}
\ No newline at end of file
+}
diff --git a/src/pages/examples/basic-pipeline/index.mdx b/src/pages/examples/basic-pipeline/index.mdx
index 1d114f6d..abc40585 100644
--- a/src/pages/examples/basic-pipeline/index.mdx
+++ b/src/pages/examples/basic-pipeline/index.mdx
@@ -19,7 +19,13 @@ import terminalOutput from "./_nextflow_run_output.log?raw";
lang="nextflow"
title="main.nf"
frame="code"
- mark={[1, 3, { range: "8-19" }, { range: "24-35" }, { range: "40-44" }]}
+ mark={[
+ { range: "3", label: "1. Pipeline Parameters - Make workflows configurable" },
+ { range: "6", label: "2. Process Definition - Define computational steps" },
+ { range: "20", label: "3. Parallel Process - Each split runs independently" },
+ { range: "36", label: "4. Data Input - Pass parameters to first process" },
+ { range: "38", label: "5. Dataflow Pipeline - Connect processes with pipes" },
+ ]}
/>
### Key Concepts
@@ -27,9 +33,10 @@ import terminalOutput from "./_nextflow_run_output.log?raw";
This example demonstrates fundamental Nextflow concepts:
- **Pipeline Parameters**: Use `params.in` to make your pipeline configurable from the command line
-- **Process Definitions**: Two processes that transform data sequentially - `splitSequences` splits a FASTA file, and `reverse` reverses each sequence
-- **Dataflow Programming**: Output from one process automatically becomes input to the next using the `|` operator
-- **Parallel Execution**: Each split file is processed independently by the `reverse` process
+- **Process Definition**: Define computational steps as isolated, reusable processes
+- **Parallel Processing**: Each split file is processed independently and automatically in parallel
+- **Data Input**: Pass data into workflows using parameter references
+- **Dataflow Programming**: Connect processes using the pipe (`|`) operator for seamless data flow
From 2178a0cd04a50e33b5458f5c59a86326b555a493 Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 16:10:12 +0200
Subject: [PATCH 12/14] fix: Add script labels and improve Nextflow code
formatting
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Add required script: labels to both processes to fix linting errors
- Improve string interpolation with proper ${} syntax
- Clean up indentation and remove unnecessary backslashes
- Format workflow pipe operators for better readability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude
fix: Add script labels and improve Nextflow code formatting
- Add required script: labels to both processes to fix linting errors
- Improve string interpolation with proper curly brace syntax
- Clean up indentation and remove unnecessary backslashes
- Format workflow pipe operators for better readability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude
---
src/pages/examples/basic-pipeline/_main.nf | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/pages/examples/basic-pipeline/_main.nf b/src/pages/examples/basic-pipeline/_main.nf
index f77640ad..40ab51a2 100644
--- a/src/pages/examples/basic-pipeline/_main.nf
+++ b/src/pages/examples/basic-pipeline/_main.nf
@@ -1,17 +1,17 @@
#!/usr/bin/env nextflow
-params.in = "$baseDir/data/sample.fa"
+params.in = "${baseDir}/data/sample.fa"
process splitSequences {
-
input:
path 'input.fa'
output:
path 'seq_*'
+ script:
"""
awk '/^>/{f="seq_"++d} {print > f}' < input.fa
"""
@@ -19,23 +19,22 @@ process splitSequences {
process reverse {
-
input:
path x
output:
stdout
+ script:
"""
- cat $x | rev
+ cat ${x} | rev
"""
}
workflow {
- splitSequences(params.in) \
-
- | reverse \
- | view
+ splitSequences(params.in)
+ | reverse
+ | view
}
From efbf1fb95226575004f89dd65c58d037e248279b Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 16:10:36 +0200
Subject: [PATCH 13/14] chore: Remove Nextflow execution artifacts and
development files
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Remove .nextflow logs and runtime directories
- Clean up work directory and lineage files
- Remove development artifacts like playwright cache
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude
---
.../.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json | 1 -
.../.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json | 1 -
.../.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json | 1 -
.../.lineage/809a9010a53762cea68c40b48298b571#output/.data.json | 1 -
.../.lineage/809a9010a53762cea68c40b48298b571/.data.json | 1 -
.../.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json | 1 -
.../.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json | 1 -
.../.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json | 1 -
.../.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json | 1 -
.../.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json | 1 -
10 files changed, 10 deletions(-)
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json
delete mode 100644 src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json
diff --git a/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json b/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json
deleted file mode 100644
index cfe16634..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d#output/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"TaskOutput","taskRun":"lid://353fef4d82cbc905aa582366ec9fe84d","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","createdAt":"2025-09-22T14:08:37.730548+02:00","output":[{"type":"stdout","name":"-","value":"work/35/3fef4d82cbc905aa582366ec9fe84d/.command.out"}],"labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json b/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json
deleted file mode 100644
index 4f958a13..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/353fef4d82cbc905aa582366ec9fe84d/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"TaskRun","sessionId":"7fb62998-8140-42e2-9251-d7a1af41fde5","name":"reverse","codeChecksum":{"value":"c7ee38b6fdd902df643aebe1437889cf","algorithm":"nextflow","mode":"standard"},"script":"\n cat seq_1 seq_2 | rev\n ","input":[{"type":"path","name":"x","value":["lid://ad0cf5df695d37a927d1a350f993d41b/seq_1","lid://ad0cf5df695d37a927d1a350f993d41b/seq_2"]}],"container":null,"conda":null,"spack":null,"architecture":null,"globalVars":{},"binEntries":[],"workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca"}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json b/src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json
deleted file mode 100644
index 37bddaf1..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/5b90121520ef574e2f422b42e9fb9ead/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"WorkflowRun","workflow":{"scriptFiles":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/_main.nf","checksum":{"value":"a40093cb6f1a707631bdb2cc638f063b","algorithm":"nextflow","mode":"standard"}}],"repository":null,"commitId":null},"sessionId":"5b4e4c92-2182-4ba4-8726-eae8b5964764","name":"distraught_volhard","params":[{"type":"String","name":"in","value":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa"}],"config":{"lineage":{"enabled":true},"plugins":["nf-notify@0.1.0"],"notify":{"enabled":true},"env":{},"session":{},"params":{},"process":{},"executor":{},"runName":"distraught_volhard","workDir":"work","poolSize":11}}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json b/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json
deleted file mode 100644
index d36e8c20..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571#output/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"TaskOutput","taskRun":"lid://809a9010a53762cea68c40b48298b571","workflowRun":"lid://5b90121520ef574e2f422b42e9fb9ead","createdAt":"2025-09-22T14:07:58.826041+02:00","output":[{"type":"path","name":null,"value":null}],"labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json b/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json
deleted file mode 100644
index 02bc9e08..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/809a9010a53762cea68c40b48298b571/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"TaskRun","sessionId":"5b4e4c92-2182-4ba4-8726-eae8b5964764","name":"splitSequences","codeChecksum":{"value":"196efff40b1dca3b894e5ef10fad7272","algorithm":"nextflow","mode":"standard"},"script":"\n awk \u0027/^\u003e/{f\u003d\"seq_\"++d} {print \u003e f}\u0027 \u003c input.fa\n ","input":[{"type":"path","name":"input.fa","value":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa","checksum":{"value":"179b114eed46ac32f86b37b28dc76523","algorithm":"nextflow","mode":"standard"}}]}],"container":null,"conda":null,"spack":null,"architecture":null,"globalVars":{},"binEntries":[],"workflowRun":"lid://5b90121520ef574e2f422b42e9fb9ead"}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json
deleted file mode 100644
index 20c405c1..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b#output/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"TaskOutput","taskRun":"lid://ad0cf5df695d37a927d1a350f993d41b","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","createdAt":"2025-09-22T14:08:37.591403+02:00","output":[{"type":"path","name":null,"value":["lid://ad0cf5df695d37a927d1a350f993d41b/seq_1","lid://ad0cf5df695d37a927d1a350f993d41b/seq_2"]}],"labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json
deleted file mode 100644
index 09376eef..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"TaskRun","sessionId":"7fb62998-8140-42e2-9251-d7a1af41fde5","name":"splitSequences","codeChecksum":{"value":"196efff40b1dca3b894e5ef10fad7272","algorithm":"nextflow","mode":"standard"},"script":"\n awk \u0027/^\u003e/{f\u003d\"seq_\"++d} {print \u003e f}\u0027 \u003c input.fa\n ","input":[{"type":"path","name":"input.fa","value":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa","checksum":{"value":"8cd42ac5563c15da91c7d7f6cf146817","algorithm":"nextflow","mode":"standard"}}]}],"container":null,"conda":null,"spack":null,"architecture":null,"globalVars":{},"binEntries":[],"workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca"}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json
deleted file mode 100644
index fe9a8174..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_1/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"FileOutput","path":"/Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/work/ad/0cf5df695d37a927d1a350f993d41b/seq_1","checksum":{"value":"a8191c573d3614d662df8fe0de70c411","algorithm":"nextflow","mode":"standard"},"source":"lid://ad0cf5df695d37a927d1a350f993d41b","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","taskRun":"lid://ad0cf5df695d37a927d1a350f993d41b","size":19,"createdAt":"2025-09-22T14:08:37+02:00","modifiedAt":"2025-09-22T14:08:37.513506231+02:00","labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json b/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json
deleted file mode 100644
index 4799f8c2..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/ad0cf5df695d37a927d1a350f993d41b/seq_2/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"FileOutput","path":"/Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/work/ad/0cf5df695d37a927d1a350f993d41b/seq_2","checksum":{"value":"25eb66f63da902e533febd321e93066c","algorithm":"nextflow","mode":"standard"},"source":"lid://ad0cf5df695d37a927d1a350f993d41b","workflowRun":"lid://d47025256f47dd1e4fd84d78cd12c7ca","taskRun":"lid://ad0cf5df695d37a927d1a350f993d41b","size":19,"createdAt":"2025-09-22T14:08:37+02:00","modifiedAt":"2025-09-22T14:08:37.513605856+02:00","labels":null}
\ No newline at end of file
diff --git a/src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json b/src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json
deleted file mode 100644
index 8d953801..00000000
--- a/src/pages/examples/basic-pipeline/.lineage/d47025256f47dd1e4fd84d78cd12c7ca/.data.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"lineage/v1beta1","kind":"WorkflowRun","workflow":{"scriptFiles":[{"path":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/_main.nf","checksum":{"value":"a40093cb6f1a707631bdb2cc638f063b","algorithm":"nextflow","mode":"standard"}}],"repository":null,"commitId":null},"sessionId":"7fb62998-8140-42e2-9251-d7a1af41fde5","name":"backstabbing_hodgkin","params":[{"type":"String","name":"in","value":"file:///Users/edmundmiller/src/nextflow/website/src/pages/examples/basic-pipeline/data/sample.fa"}],"config":{"lineage":{"enabled":true},"plugins":["nf-notify@0.1.0"],"notify":{"enabled":true},"env":{},"session":{},"params":{},"process":{},"executor":{},"runName":"backstabbing_hodgkin","workDir":"work","poolSize":11}}
\ No newline at end of file
From 8d3eced9ac52236e5afcb6e91f8b91959663db60 Mon Sep 17 00:00:00 2001
From: Edmund Miller
Date: Mon, 22 Sep 2025 16:12:27 +0200
Subject: [PATCH 14/14] style: Set lineMarkerLabelColor to bright green for
text markers
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Add lineMarkerLabelColor: #0dc09d to textMarkers config
- Ensures label styling uses the site's bright green color
- Improves visibility and consistency with design system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude
---
ec.config.mjs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/ec.config.mjs b/ec.config.mjs
index 4e63195d..65f6b2af 100644
--- a/ec.config.mjs
+++ b/ec.config.mjs
@@ -39,6 +39,12 @@ export default defineEcConfig({
// Make highlighting more visible but still clean
backgroundOpacity: "0.4", // More visible highlighting
borderOpacity: "0", // No border opacity
+
+ // Make text more readable on light green background
+ markForeground: "#1f2937", // Dark text for better contrast
+
+ // Label styling with bright green background
+ lineMarkerLabelColor: "#0dc09d", // Bright green for labels
},
// Frames - clean, minimal styling