I have a dislike of nextflow because it submits 10s of thousands of separate jobs to our HPC scheduler which causes a number of issues, though they've now added support for array jobs which should hopefully solve that.
We opted for implementing all of this in Go in SciPipe, where we get similar basic dataflow/flow-based functionality as Nextflow with the native concurrency primitives of Go, but the Go syntax probably/surely puts away some biologists who have written some python at most before, and Go won't let us customize the API and hide away as much of the plumbing under nice syntax, as Groovy.
In this regard, Groovy with the GPars library for the concurrency, doesn't seem as a particularly bad choice. There weren't that many options at the time either.
The downside has been tooling support though, such as editor intelligence and debugging support, although parts of that is finally improving now with a NF language server.
Today, one could probably implement something similar with Python's asyncio and queues for the channel semantics, and there is even the Crystal language that has Go-like concurrency in a much more script-like language (see a comparison between Go and Crystal concurrency syntax at [1]), but Crystal would of course be an even more fringe langauge than Groovy.
[1] https://livesys.se/posts/crystal-concurrency-easier-syntax-t...
For industrial purposes, I've started to approach these pipelines as a special case of feature extraction and so I'm reusing our ML infrastructure as much as possible.
Why did you rule out Nextflow or Snakemake? I believe they both work with k8 clusters.
Argo doesn’t look great from my standpoint as a workflow author.
Technically snakemake can do it all. But in practice NF seems to scale up a bit better.
That said, if you don’t need the UI for scientists, I’d stick to snakemake.
For example, snakemake makes it very difficult if not impossible to create pipelines that deviate from a DAG architecture. In cases where you need loops, conditionals and so on, Nextflow is a better option.
One thing that I didn't like about nextflow is that all processes can either run under apptainer or docker, you can mix and match docker/apptainer like you do in snakemake rules.
you meant "CAN'T", right?
That said, I do find snakemake easier to prototype with. And it also has plenty of production features (containers, cloud, etc). For many use cases, they’re functionally equivalent
totalperspectiv•8h ago
Nextflow and Snakemake are the two most-used options in bioinformatics these days, with WDL trailing those two.
I really wish Nextflow was based on Scala and not Groovy, but so it goes.
There is a Draft up for dsl3 that adds static types to the channels that I’m very excited about. https://github.com/nf-core/fetchngs/pull/309