---
title: "v0.7.0"
slug: releases/0.7.0
---

_2026-05-17_ · [GitHub release](https://github.com/pinin4fjords/nf-metro/releases/tag/0.7.0) · [Diff](https://github.com/pinin4fjords/nf-metro/compare/0.6.1...0.7.0)

A big one: 228 commits since 0.6.1. Existing `.mmd` files render with no changes - everything new is additive.

## HTML export

`nf-metro render mypipeline.mmd --format html` produces a self-contained, interactive HTML file that can be dropped into a docs page or blog post without any extra assets.

## Three new `%%metro` directives

**`off_track: node_id`** lifts file inputs above the line tracks so they sit clear of the metro lines instead of breaking them. Useful for FASTA/GTF inputs hanging off a workflow.

![Off-track file inputs](/nf-metro/0.7.2/assets/renders/off_track_convergence.svg)

**`center_ports: true`** (or `--center-ports`) centres inter-section ports on the shorter section, tidying up many fan-in/fan-out cases.

**`legend_min_height: N`** reserves a minimum legend height so a tall map's legend doesn't look stranded.

## Dashed and dotted line styles

Lines can be **dashed** or **dotted** to indicate optional or conditional routes. Add a fourth field to `%%metro line:`:

```metro ins={1-2}
%%metro line: qc | Quality Control | #2196F3 | dashed
%%metro line: optional | Optional path | #ff8800 | dotted
```

Both the route ink and the legend swatch reflect the style:

![Simple pipeline with dashed QC line](/nf-metro/0.7.2/assets/renders/simple_pipeline.svg)

## Richer file icons

Two new icon types join the existing single `file`:

- **`files`** - stacked pages, for paired-end or multi-file outputs
- **`dir`** - folder icon, for directory outputs

All three accept an optional caption to label exactly what's flowing in:

```metro
node[Label]:::files:Read 1, Read 2
```

![Files (stacked) icon](/nf-metro/0.7.2/assets/renders/05c_files_icon.svg)

![Directory icon](/nf-metro/0.7.2/assets/renders/05d_folder_icon.svg)

## New gallery example: nf-core/differentialabundance

![nf-core/differentialabundance](/nf-metro/0.7.2/assets/renders/differentialabundance.svg)

## Numbered sections in reading order

Sections are now numbered in visual reading order (left-to-right, top-to-bottom), so "1, 2, 3..." matches how you scan the map.

## Layout invariant framework

A phase-boundary guard system (`compute_layout(validate=True)`) catches layout engine bugs at the offending phase rather than several phases later. Combined with full-corpus parametrised tests and the C13 row-gap runtime guard, the engine is substantially more robust to new topology patterns.

The layout pipeline is organised into six named stages with flat `Stage X.Y` naming.

## Other improvements

- Fan-in merge junctions route cleanly onto the trunk
- Per-line path grouping gives consistent line z-order where lines cross
- Animated balls no longer fly off-piste at merge junctions
- Cached `station_lines()` across ~40 call sites (O(1) amortised)
- New [CONTRIBUTING.md](https://github.com/pinin4fjords/nf-metro/blob/main/CONTRIBUTING.md)
