Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Comparison to Alternatives

Artisan targets batch scientific computation on HPC clusters with per-artifact provenance, queryable structured results, and content-addressed caching — all on a shared filesystem with no services to deploy. This page places Artisan alongside the major workflow frameworks so you can decide which fits your problem.

For the design rationale behind the differences highlighted here, see Design Principles.


Choosing a framework

If your work looks like this...Consider
Chaining CLI bioinformatics tools, nf-core pipelines availableNextflow
File-in/file-out transformations with wildcard naming patternsSnakemake
Scheduled recurring ETL/ELT with enterprise system integrationsAirflow
General-purpose Python workflow orchestration and observabilityPrefect
Batch scientific computation needing per-artifact lineage and queryable results on HPCArtisan

These are not mutually exclusive. Artisan uses Prefect internally as its dispatch layer (see below), and a team could use Airflow to trigger Artisan pipelines on a schedule.


Comparison matrix

DimensionNextflowSnakemakeAirflowPrefectArtisan
Fundamental unitProcess (channel-connected)Rule (file-matched)Task (operator-based)Task (decorator-based)Artifact (content-addressed)
Workflow languageGroovy DSLPython-embedded DSLPythonPythonPython
Data modelFile channels between processesFiles matched by wildcardsXComs (small JSON)Opaque task returnsTyped artifacts in Delta Lake tables
ProvenanceExecution-level (file checksums, task lineage)File-level metadata + HTML reportsExternal (OpenLineage)Flow/task run historyDual: execution + per-artifact derivation chains
CachingHash of inputs + command, automaticTimestamp + Merkle treeNone built-inOpt-in per-task (cache_key_fn)Content-addressed hashes, automatic (configurable via CachePolicy)
Result storageFiles in work/ dirsFiles on filesystemExternal (user-managed)External (opt-in persistence)Delta Lake tables (queryable, ACID)
Result queryingParse files or use Seqera PlatformParse filesExternal toolsExternal toolsDirect SQL-like queries via Polars/DuckDB
HPC / SLURMNative (+ PBS, LSF, SGE)Native (plugin-based)NoneIndirect (Dask + SLURMCluster)Native (SlurmBackend via job arrays)
Other executorsKubernetes, AWS Batch, Google CloudKubernetes, cloud via pluginsExtensive operator ecosystemWork pools (K8s, ECS, etc.)Extensible BackendBase architecture (LOCAL, SLURM, SLURM_INTRA built-in)
InfrastructureNone (file-based)None (file-based)Scheduler + DB + web serverServer or Prefect CloudNone (Delta Lake on filesystem)
Error modelPer-process retry with resource escalationDelete incomplete, retry with escalationTask retry + SLA alertsTask retry + state machinePer-item containment with configurable policy (CONTINUE or FAIL_FAST)
Ecosystemnf-core (100+ pipelines)Workflow Catalog, Bioconda1,000+ provider operatorsGrowing integrationsDomain-extensible artifact type registry

Mapping concepts across frameworks

If you are coming from another framework, this table maps its core abstractions to the closest Artisan equivalents.

Concept in other frameworksArtisan equivalent
Nextflow channel / Snakemake wildcard ruleOutputReference — a typed, resolvable pointer to a step’s output artifacts
Nextflow process / Snakemake rule / Airflow operator / Prefect taskOperationDefinition — a computation with declared inputs and outputs
Nextflow workflow / Snakemake Snakefile / Airflow DAG / Prefect flowPipelineManager — step sequencer with automatic caching and provenance
Nextflow publishDir / Snakemake output filesDelta Lake commit — artifacts are stored as table rows, not scattered files
Nextflow -resume / Snakemake timestamp check / Prefect cache_key_fnContent-addressed cache — automatic, no flags or per-task configuration
Nextflow work/ directoryStaging directory → atomic Delta Lake commit
Airflow XComArtifact — content-addressed, typed, and queryable
Nextflow operator chain / Snakemake rule dependenciesCompositeDefinition — compose multiple operations into a reusable unit with collapsed or expanded execution

Detailed comparisons

vs. Nextflow

Nextflow is the closest peer. Both target HPC, both wrap external tools, both support SLURM natively, and both have content-based caching.

Where Nextflow is stronger:

Where Artisan is stronger:

vs. Snakemake

Snakemake is file-centric and rule-based, inspired by GNU Make. It excels at reproducible file transformation chains.

Where Snakemake is stronger:

Where Artisan is stronger:

vs. Airflow

Airflow is an enterprise task scheduler for recurring data pipelines. It solves a different problem.

Where Airflow is stronger:

Where Artisan is stronger:

vs. Prefect

Prefect is a Python-native orchestration framework. Artisan uses Prefect internally as its dispatch backend, so this comparison describes what Artisan adds on top.

What Prefect gives you that Artisan does not:

What Artisan adds on top of Prefect:


How Artisan uses Prefect

Artisan does not compete with Prefect. It uses Prefect as a transport layer for dispatching work to workers, wrapped behind a BackendBase abstraction. Understanding this relationship clarifies every comparison above.

PipelineManager                          (Artisan: step sequencing, caching, provenance)
  └─ execute_step()
       └─ BackendBase.create_flow()      (Artisan: backend abstraction)
            └─ @flow(task_runner=...)     (Prefect: parallel dispatch + observability)
                 └─ execute_unit_task.map(units)
                      ├─ run_creator_flow()    (Artisan: single operation lifecycle)
                      └─ run_composite()        (Artisan: composite operations lifecycle)

Three built-in backends control which Prefect task_runner is used:

BackendTask runnerDispatch mechanism
LocalBackendProcessPoolTaskRunnerProcess pool on the orchestrator machine
SlurmBackendSlurmTaskRunner (from prefect_submitit)SLURM job arrays via submitit
SlurmIntraBackendSlurmTaskRunner (from prefect_submitit, srun mode)srun within existing SLURM allocation
ResponsibilityHandled by
Pipeline definition, step sequencingArtisan (PipelineManager)
Input resolution, cache lookupArtisan (orchestration layer)
Backend selection and flow creationArtisan (BackendBase)
Parallel dispatch to workersPrefect (via backend-selected task_runner)
Operation lifecycle (preprocess/execute/postprocess)Artisan (execution layer)
Composite routing (single ops vs. composed composites)Artisan (execute_unit_task)
Lineage capture, stagingArtisan (execution layer)
Atomic commit to Delta LakeArtisan (orchestration layer)
Flow/task run observability UIPrefect

Workers run the same execution code regardless of backend — Prefect is the transport, not the brain. Curator operations bypass Prefect dispatch and execute locally in a subprocess on the orchestrator. Custom backends can be created by subclassing BackendBase and implementing create_flow() and capture_logs().


See also