# How to understand process attributes?

**URL:** <https://community.seqera.io/t/how-to-understand-process-attributes/2668>\
**Category:** Training\
**Tags:** nextflow\
**Created:** [May 14, 2026, 3:12pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668 "2026-05-14T15:12:32Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Chris\_Shave](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/chris_shave/32/2446_2.png) [@Chris\_Shave](https://community.seqera.io/u/Chris_Shave)\
**Post date:** [May 14, 2026, 3:12pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/1 "2026-05-14T15:12:32Z")

</div>

I am working through the hello-nextflow material and I have reached the config file tutorial. In this tutorial, an approach to have variable output directory names is shown using `${process}.name`. A core part of the workflow, as demonstrated early on in the tutorials is chaining together processes using `${process}.out` or `${process}.out.specificNamedOutput`. I am new to groovy programming, but the instructor in the video referred to these as attributes. Is there documentation listing the attributes that processes can have?

---

<div class="post-metadata">

**Author:** ![bentsherman](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/bentsherman/32/52_2.png) [@bentsherman](https://community.seqera.io/u/bentsherman)\
**Post date:** [May 14, 2026, 6:00pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/2 "2026-05-14T18:00:13Z")

</div>

The only “attribute” that has been allowed historically is `.out`. However, this pattern is now discouraged as it is not supported with static typing.

You don’t really need it anyway because you can just assign the output of a process to a variable like in any other programming language.

There are no other such attributes. If the training is using something else like `.name` then that is likely an issue with the training. It may happen to work as a leaky abstraction from the runtime, but it is not really part of the Nextflow language so it should not be relied on.

---

<div class="post-metadata">

**Author:** ![Chris\_Shave](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/chris_shave/32/2446_2.png) [@Chris\_Shave](https://community.seqera.io/u/Chris_Shave)\
**Post date:** [May 15, 2026, 9:09am UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/3 "2026-05-15T09:09:15Z")

</div>

Interesting that the `out` attribute is discouraged - the tutorial uses it very consistently, and it is explicitly provided as a way to use the output in [Part 3: Hello Workflow - training.nextflow.io](https://training.nextflow.io/latest/hello_nextflow/03_hello_workflow/#13-add-a-call-to-the-new-process-in-the-workflow-block:)

> Conveniently, Nextflow automatically packages the output of a process into a channel, as shown in the diagram in the warmup section. We can refer to the output channel of a process as `<process>.out`.

Does this mean when chaining processes in a workflow I don’t need to include the `.out`? Later we use dot notation to access specific outputs from a process with two defined outputs. e.g. `<process>.out.report` vs `<process>.out.results`. Is there a way to reference these separate outputs without including `.out`? e.g. would `<process>.results` and `<process>.report` work in the same way?

---

<div class="post-metadata">

**Author:** ![Chris\_Shave](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/chris_shave/32/2446_2.png) [@Chris\_Shave](https://community.seqera.io/u/Chris_Shave)\
**Post date:** [May 15, 2026, 1:24pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/4 "2026-05-15T13:24:21Z")

</div>

I do not understand how to publish results without using the `.out` notation. I have attemted

```auto
workflow {

    main:
    // emit a greeting
    sayHello(params.greeting)

    publish:
    greeting_doc = sayHello[0]

}

```

which returns the error “Index file record must be a list, map, or file: ProcessDef[process sayHello] [ProcessDef]” and

```auto
workflow {

    main:
    // emit a greeting
    sayHello(params.greeting)

    publish:
    greeting_doc = sayHello

}

```

which returns the error “Missing process or function getAt([0])”

---

<div class="post-metadata">

**Author:** ![GeraldineVdA](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/geraldinevda/32/178_2.png) [@GeraldineVdA](https://community.seqera.io/u/GeraldineVdA)\
**Post date:** [May 15, 2026, 1:54pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/5 "2026-05-15T13:54:28Z")

</div>

Hi @Chris_Shave , I just had a quick conversation with @bentsherman to clarify this.

To be clear, the `.out` notation is still perfectly valid for now. Ben lives in the future 😅

Looking toward that future though, what he meant is that going forward we’ll switch to doing this (which is already valid and used in many pipelines):

```auto
workflow {

    main: 
    greeting_ch = sayHello(params.greeting)

    publish: 
    greeting_doc = greeting_ch
}

```

It’s a bit more verbose, and may feel like a bit much for a simple case like we have here, but once you start dealing with more complex workflows, the more explicit assignment becomes very helpful. Currently, you would learn about this syntax a bit later in the training materials.

We plan to update the training docs to phase out `.out` and use this more explicit style everywhere in the next round of major updates (most likely to be released in early 2027).

---

<div class="post-metadata">

**Author:** ![Chris\_Shave](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/chris_shave/32/2446_2.png) [@Chris\_Shave](https://community.seqera.io/u/Chris_Shave)\
**Post date:** [May 15, 2026, 2:08pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/6 "2026-05-15T14:08:26Z")

</div>

I see. But what would the syntax be where there are multiple outputs from one process? e.g. `<process>.out.report` vs `<process>.out.outfile`, as is demonstrated in [Part 3: Hello Workflow - training.nextflow.io](https://training.nextflow.io/latest/hello_nextflow/03_hello_workflow/#421-update-the-publish-section)

---

<div class="post-metadata">

**Author:** ![GeraldineVdA](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/geraldinevda/32/178_2.png) [@GeraldineVdA](https://community.seqera.io/u/GeraldineVdA)\
**Post date:** [May 15, 2026, 2:27pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/7 "2026-05-15T14:27:12Z")

</div>

Then the syntax would be eg:

```auto
workflow {

    main: 
    output_ch = myProcess(params.input)

    publish: 
    my_report = output_ch.report
    my_outfile = output_ch.outfile
}
    

```

You’re really just replacing `myProcess.out` with `output_ch` and the rest stays the same.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/flex013/user_avatar/community.seqera.io/system/32/2402_2.png) [@system](https://community.seqera.io/u/system)\
**Post date:** [May 22, 2026, 2:27pm UTC](https://community.seqera.io/t/how-to-understand-process-attributes/2668/8 "2026-05-22T14:27:53Z")

</div>

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.
