Skip to content
Merged
Show file tree
Hide file tree
Changes from 99 commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
ee4eaa0
Add plugin development side quest
pinin4fjords Jan 9, 2026
563b41d
Prettier
pinin4fjords Jan 9, 2026
68126be
Add editorconfig exception for Makefiles
pinin4fjords Jan 9, 2026
cc7f62e
Remove custom operators and factories from plugin development tutorial
pinin4fjords Jan 9, 2026
6689506
Update plugin development solution to remove operator usage
pinin4fjords Jan 9, 2026
a890483
Clarify extensionPoints description
pinin4fjords Jan 9, 2026
864b13c
Clean up plugin development solution files to match tutorial
pinin4fjords Jan 12, 2026
2a57b00
Address Adam's review comments on plugin development side quest
pinin4fjords Jan 14, 2026
4b2b637
Merge branch 'master' into plugin-development-side-quest
pinin4fjords Jan 14, 2026
f34c4c4
Remove 'Popular community plugins' section per Adam's feedback
pinin4fjords Jan 14, 2026
d975952
Clean up hyphen phrases and tone down language
pinin4fjords Jan 14, 2026
a196d96
Fix heading numbering and format tables
pinin4fjords Jan 14, 2026
9806b43
Add tip about type-safe configuration with annotations
pinin4fjords Jan 14, 2026
0ece040
Improve plugin development tutorial based on session feedback
pinin4fjords Jan 14, 2026
82797d4
Fix pipe syntax in random_id_example.nf starting file
pinin4fjords Jan 14, 2026
722c0dd
Merge branch 'master' into plugin-development-side-quest
pinin4fjords Jan 14, 2026
2c31a35
Fix writing style and update solutions in plugin development tutorial
pinin4fjords Jan 14, 2026
988acdd
Fix prettier formatting in plugin_development.md
pinin4fjords Jan 14, 2026
a3edfba
Convert plugin development side quest to Hello Plugins module
pinin4fjords Jan 15, 2026
dba78e0
Merge branch 'master' into plugin-development-side-quest
pinin4fjords Feb 2, 2026
98e8845
Address PR #761 review feedback: restructure Hello Plugins for goal-f…
pinin4fjords Feb 16, 2026
78b4744
Fix test output in Part 4 to match fresh run
pinin4fjords Feb 16, 2026
86a00ae
Fix Part 6: remove nonexistent @Description annotation, add config wa…
pinin4fjords Feb 16, 2026
9442317
Fix @Description import in Part 6: use nextflow.script.dsl.Description
pinin4fjords Feb 16, 2026
d30c4b1
Fix starting main.nf to be simple pipeline without plugin imports
pinin4fjords Feb 16, 2026
b23689c
Holistic review: merge Part 7, add exercises, standardize formatting
pinin4fjords Feb 17, 2026
a761dd9
Fix TraceObserver link to match scaffold code
pinin4fjords Feb 17, 2026
c34e37f
Replace early jargon with purpose-driven language
pinin4fjords Feb 17, 2026
2f024f4
Replace more jargon in early parts
pinin4fjords Feb 17, 2026
5614dc8
Fix markdown table formatting to pass pre-commit checks
pinin4fjords Feb 18, 2026
a86c630
Remove OO prerequisite; concepts are explained inline
pinin4fjords Feb 18, 2026
940c781
Rewrite audience section with clearer expectations for each part
pinin4fjords Feb 18, 2026
76e7de2
Add tree command before directory listing in orientation
pinin4fjords Feb 18, 2026
81c8bee
Expand plugin basics intro to explain the exercise arc
pinin4fjords Feb 18, 2026
1f09bec
Show and explain cat and run output in Part 1
pinin4fjords Feb 18, 2026
dca7576
Clarify motivation for using a plugin over a local function
pinin4fjords Feb 18, 2026
42f0a08
Improve terse explanations across Hello Plugins module
pinin4fjords Feb 18, 2026
2d893ea
Link to randomString source in nf-hello repo
pinin4fjords Feb 18, 2026
6c9cc3e
Add nf-schema and nf-co2footprint worked examples to Part 1
pinin4fjords Feb 18, 2026
53970e1
Use Before/After blocks for config changes in new plugin exercises
pinin4fjords Feb 18, 2026
5b5c356
Pre-provide schema_example.nf with splitCsv starting point
pinin4fjords Feb 18, 2026
1943cd7
Move 'How plugins work' to section 1, before exercises
pinin4fjords Feb 18, 2026
85864a7
Nest nf-hello and nf-schema under a single 'Use function plugins' sec…
pinin4fjords Feb 18, 2026
1a80440
Add transition summaries between plugin exercises in Part 1
pinin4fjords Feb 18, 2026
c99f3e4
Acknowledge all four extension types in post-exercise summary
pinin4fjords Feb 18, 2026
0b16aae
Separate pipeline files for Part 1 vs Parts 2-6
pinin4fjords Feb 18, 2026
5827a07
Restore inline randomString to hello.nf starting state
pinin4fjords Feb 18, 2026
1196e7a
Add #!groovy syntax highlighting to structured inline code
pinin4fjords Feb 19, 2026
d4124d1
Smooth out staccato prose in Part 1 plugin basics
pinin4fjords Feb 19, 2026
0f9267f
Move Java requirement to envsetup, remove from plugin prerequisites
pinin4fjords Mar 4, 2026
4682292
Introduce Plugin Registry on first mention
pinin4fjords Mar 4, 2026
7160ae4
Use 'workflow monitor' terminology in section 2.1.4 to match section …
pinin4fjords Mar 4, 2026
2dfa24a
Fix typo: Nexflow → Nextflow
pinin4fjords Mar 4, 2026
b974948
Add schema explainer info box to section 2.2
pinin4fjords Mar 4, 2026
ec85bca
Reduce excessive chain indentation in scripts and docs
pinin4fjords Mar 4, 2026
7a054d8
Add schema validation demo to section 2.2
pinin4fjords Mar 4, 2026
57a39e8
Improve co2footprint output explanation with actual warnings
pinin4fjords Mar 4, 2026
3945c39
Show co2footprint summary output with explanation
pinin4fjords Mar 4, 2026
efc376b
Show output of nextflow plugin create command
pinin4fjords Mar 4, 2026
b875700
Show source file contents in 'Tour the source files' section
pinin4fjords Mar 4, 2026
ee7310f
Replace detailed source tour with summary table
pinin4fjords Mar 4, 2026
f0b792d
Fix source files table: use filenames, clarify scope
pinin4fjords Mar 4, 2026
7c244b0
Polish Part 2: diagram text, cross-references, wording
pinin4fjords Mar 4, 2026
d8ff089
Add cross-reference to Gradle primer from gradlew info box
pinin4fjords Mar 4, 2026
c5bede1
Use -ansi-log false for plugin run to show observer messages reliably
pinin4fjords Mar 4, 2026
8c93b37
Show full cat output with hl_lines for key code in Parts 3 and 5
pinin4fjords Mar 4, 2026
7777fc1
Explain make command, show install path, motivate testing
pinin4fjords Mar 4, 2026
b6a516c
Expand Spock intro, move unit test explanation out of info box
pinin4fjords Mar 4, 2026
4a528ef
Add clickable code annotations throughout plugin development parts
pinin4fjords Mar 4, 2026
f7ed561
Add discovery-oriented code annotations to Parts 1, 3, 4, 5
pinin4fjords Mar 4, 2026
8d49925
Remove annotations for basic Nextflow operators
pinin4fjords Mar 4, 2026
c302187
Add cd nf-greeting instruction at start of Part 4
pinin4fjords Mar 4, 2026
2b259dc
Build test file progressively in Part 4 section 3
pinin4fjords Mar 4, 2026
43584c9
Add test explanations to Part 4 sections 3.2 and 3.3
pinin4fjords Mar 4, 2026
2647e3e
Update test report screenshot
pinin4fjords Mar 4, 2026
67b80f3
Expand test report explanation and What's next section in Part 4
pinin4fjords Mar 4, 2026
35eb1ab
Add step overview to Part 5 section 2
pinin4fjords Mar 4, 2026
c3763b2
Reframe Part 5 section 2 intro as goal-driven plan
pinin4fjords Mar 4, 2026
9773d43
Expand Part 5 section 1 with beginner-friendly concept explanations
pinin4fjords Mar 4, 2026
a13db96
Fix Part 5 section 2.3 output to match actual interleaved output
pinin4fjords Mar 4, 2026
760cebf
Make Part 5 section 2.4 friendlier to non-developers
pinin4fjords Mar 4, 2026
b66dac7
Improve transition from Part 5 to Part 6
pinin4fjords Mar 4, 2026
00c7215
Add plugin configuration demos to Part 1 (sections 2.2.6 and 3.4)
pinin4fjords Mar 4, 2026
1ebcd1d
Add Part 1 config callbacks to Part 6 intro and ConfigScope section
pinin4fjords Mar 4, 2026
c10434d
Clarify that plugins define their own configuration scopes
pinin4fjords Mar 4, 2026
4fd4e88
Make Part 6 config callbacks friendlier to non-developers
pinin4fjords Mar 4, 2026
0ee1ea6
Reframe Part 6 intro with objectives, plan, and file list
pinin4fjords Mar 4, 2026
55c69b2
Add motivation to each Part 6 section
pinin4fjords Mar 4, 2026
d00fd08
Add concluding remarks to Part 6 section 4
pinin4fjords Mar 4, 2026
3b34a94
Simplify technical language for non-developers across Parts 1-3
pinin4fjords Mar 4, 2026
9250743
Add section motivation throughout Parts 2-4
pinin4fjords Mar 4, 2026
1aae72c
Clarify relationship between navigate() and ConfigScope in Part 6
pinin4fjords Mar 4, 2026
328812d
Fix mermaid line breaks: use <br/> instead of \n
pinin4fjords Mar 4, 2026
2b7cb13
Summarize plugin capabilities before distribution section
pinin4fjords Mar 4, 2026
bff4855
Merge remote-tracking branch 'origin/master' into plugin-development-…
pinin4fjords Mar 5, 2026
0c42b39
Fix prettier formatting for tables and JSON files
pinin4fjords Mar 5, 2026
04fd485
Fix prettier formatting with CI version (3.2.5)
pinin4fjords Mar 5, 2026
6fb010f
Move hello_plugins docs into docs/en/docs/ so MkDocs can resolve them
robsyme Mar 5, 2026
c500a39
Add .gradle and bin to gitignore for plugin solution directories
robsyme Mar 5, 2026
39e1996
Address Adam's review: tighten prose, simplify config, add onFilePublish
pinin4fjords Mar 24, 2026
fa2410c
Remove stale friendlyGreeting from solutions, update run-tutorial skill
pinin4fjords Mar 24, 2026
8e52f64
Revert run-tutorial skill changes
pinin4fjords Mar 24, 2026
6b58df6
Move plugin development into side quests, restructure all side quests…
pinin4fjords Mar 24, 2026
0ff5fdb
Fix pre-commit: trailing whitespace in COPYING files, table alignment…
pinin4fjords Mar 24, 2026
789f684
Merge remote-tracking branch 'origin/master' into plugin-development-…
pinin4fjords Mar 24, 2026
80775cc
Fix prettier table formatting in index and 06_configuration
pinin4fjords Mar 24, 2026
d2d1c34
Update pre-commit exclude patterns for moved plugin_development files
pinin4fjords Mar 24, 2026
a40f351
Remove plugin development orientation and survey pages
pinin4fjords Mar 25, 2026
5e68575
Pin nf-co2footprint to version 1.1.0 in plugin basics lesson
pinin4fjords Mar 25, 2026
af5640e
Fix plugin basics lesson issues found during tutorial walkthrough
pinin4fjords Mar 25, 2026
83c4c7b
Fix hl_lines offset in observers lesson onFilePublish code block
pinin4fjords Mar 25, 2026
22651a0
Remove duplicate images, legacy solutions, and fix prettierignore path
pinin4fjords Mar 25, 2026
2744aac
Address review feedback: build command consistency and wording
pinin4fjords Mar 26, 2026
67de50e
Mention $NXF_HOME/plugins install location in Part 2
pinin4fjords Mar 26, 2026
fa1212c
Move -ansi-log false tip to first usage in Part 5
pinin4fjords Mar 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ indent_size = 2
[*.{py,md}]
indent_style = unset

# Makefiles require tabs
[Makefile]
indent_style = tab

# ignore nf-core generated files
[side-quests/solutions/nf-core/**]
charset = unset
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ transcript-index
__pycache__
*.pyc

# Gradle build artifacts
.gradle/

# Build outputs
site/
site_build/
Expand Down
5 changes: 3 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@ repos:
hooks:
- id: editorconfig-checker
alias: ec
exclude: hello-plugins/.*/nf-greeting/(COPYING|gradlew)$

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: trailing-whitespace
exclude_types:
- svg
exclude: ^hello-nf-core/solutions/core-hello-.*/
exclude: (^hello-nf-core/solutions/core-hello-.*/)|(hello-plugins/.*/COPYING$)
- id: end-of-file-fixer
exclude_types:
- svg
exclude: ^hello-nf-core/solutions/core-hello-.*/
exclude: (^hello-nf-core/solutions/core-hello-.*/)|(hello-plugins/.*/COPYING$)
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ side-quests/solutions/nf-core/**/*.yml

# Ignore nf-core pipeline solutions (generated by nf-core tools, not hand-authored)
hello-nf-core/solutions/core-hello-*/**

# Ignore auto-generated license files in plugin solutions
hello-plugins/**/COPYING
2 changes: 1 addition & 1 deletion docs/en/docs/envsetup/02_local.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Our training courses have a few additional requirements.
In total, you will need to have the following software installed:

- Bash or equivalent shell
- [Java 11 (or later, up to 21)](https://www.oracle.com/technetwork/java/javase/downloads/index.html)
- [Java 21 or later](https://www.oracle.com/technetwork/java/javase/downloads/index.html) (Java 11+ is sufficient for running Nextflow, but the [plugin development](../hello_plugins/index.md) course requires Java 21)
- [Git](https://git-scm.com/)
- [Docker](https://docs.docker.com/get-docker/)
- [Conda](https://conda.io/) 4.5 (or later)
Expand Down
115 changes: 115 additions & 0 deletions docs/en/docs/hello_plugins/00_orientation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Orientation

This page will help you set up your environment and navigate through the training.

!!! warning "Development sections are advanced"

Using existing plugins (Part 1) is straightforward and valuable for all Nextflow users.

Parts 2-6 cover building your own plugins, which many Nextflow developers may never need to do.
However, creating a plugin can be a good way to share reusable functions across pipelines or within a team.
These lessons involve Groovy code, build tools, and concepts that may be new if your background is in scripting or data analysis rather than software engineering.
No prior Java or Groovy experience is required; the lessons explain these concepts as they come up.

If the development sections feel challenging, focus on Part 1 and return to the rest when you have a specific plugin idea in mind.

---

## 1. Open the training environment

If you haven't yet done so, make sure to open the training environment as described in the [Environment Setup](../envsetup/index.md).

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/nextflow-io/training?quickstart=1&ref=master)

---

## 2. Verify Java installation

Plugin development (Parts 2-6) requires Java 21 or later, which is included in the training environment.
Verify it's available:

```bash
java -version
```

You should see Java 21 or later.

??? info "What are Java, Groovy, and Gradle?"

If these terms are unfamiliar, here's a quick primer:

**Java** is a widely-used programming language.
Nextflow itself is built with Java, and plugins must be compatible with the Java runtime.

**Groovy** is a programming language that runs on Java and is designed to be more concise and flexible.
Nextflow's DSL is based on Groovy, which is why Nextflow syntax looks the way it does.
Plugin code is typically written in Groovy.

**Gradle** is a build tool that compiles code, runs tests, and packages software.
You don't need to understand Gradle deeply; we'll use simple commands like `./gradlew build`.

You don't need to be an expert in any of these.
The plugin template handles most of the complexity for you.

---

## 3. Move into the project directory

```bash
cd hello-plugins
```

---

## 4. Review the materials

```bash
tree -L 1
```

```console
.
├── greetings.csv
├── greetings_schema.json
├── greet.nf
├── hello.nf
├── nextflow.config
└── solutions/
```

The directory contains two pipeline files: `hello.nf` for the Part 1 exercises (using existing plugins) and `greet.nf` for Parts 2-6 (building your own plugin).

---

## 5. What we'll cover

This training is organized into two tracks:

**Using plugins (Part 1):**

- Discover, install, configure, and use existing plugins like `nf-hello`

**Developing plugins (Parts 2-6):**

- Create a plugin project with `nf-greeting`
- Implement custom functions
- Build, test, and install locally
- Monitor workflow events for custom logging or notifications
- Make plugins configurable
- Distribute your plugin

---

## 6. Readiness checklist

- [ ] My codespace is running
- [ ] Java is installed (for plugin development parts)
- [ ] I'm in the `hello-plugins` directory

---

### What's next?

In the next section, you'll start using an existing plugin in a workflow.

[Continue to Part 1 :material-arrow-right:](01_plugin_basics.md){ .md-button .md-button--primary }
Loading