# Release 0.75

:material-calendar: 2026-04-27 · :material-list-status: [Full Changelog](https://github.com/srl-labs/containerlab/releases)

## Start, stop, and restart selected nodes

The day has finally come when you can start, stop, and restart selected nodes in a running lab **without nuking the whole lab**. 🎉🎉🎉

The [start](../cmd/start.md), [stop](../cmd/stop.md), and [restart](../cmd/restart.md) commands can now target a subset of nodes in a running lab. Pass `--node` (repeatable or comma-separated) to start or stop only the listed containers. The same [limitations](../cmd/start.md#limitations) as restart apply: veth-based dataplane links, single-container nodes, and a few other cases remain unsupported for partial lifecycle.

> This feature touched a lot of containerlab internal and there might be some fallout. Please report any issues you encounter in the issue tracker or our [discord](https://discord.gg/vAyddtaEV9).

Thanks @FloSch62 @steiler @kaelemc #3055

## Topology template composition

Templated topologies (`.clab.gotmpl`) are easier to build and share.

- The `--vars` flag can be used **more than once**; files are **merged** with **later** files **overwriting** keys from earlier ones. Automatic discovery of variable files is extended: alongside `template.clab_vars.y[a]ml[|json]`, the pattern `template.clab_vars.*.y[a]ml[|json]` is also picked up when the vars file is auto-resolved.
- Place additional `*.gotmpl` files in a `clab_templates` directory next to the main template; they are loaded and invokable with Go's `{{ template "name.gotmpl" . }}` from the top-level file.
- A companion change applies topology variable paths when a workflow resolves the lab **without** passing `-t` (so `--vars` still takes effect in those cases).

See [Generated topologies](../manual/topo-def-file.md#generated-topologies).

Thanks @amtelekom #3169 #3171

## Juniper cSRX

The new [`juniper_csrx`](../manual/kinds/csrx.md) kind runs Juniper cSRX firewall containers in the lab, with a baked-in day-0 config (default `root:clab123`, SSH and NETCONF enabled), `startup-config` for your Junos config, optional `license` handling, and `save` writing the running config to `juniper.conf`.

Thanks @mtucker502 #3170

## Export the rendered topology YAML

[`deploy`](../cmd/deploy.md) and [`generate`](../cmd/generate.md) accept `--export-rendered <path>` to write the **fully expanded** topology YAML (after template rendering and environment-variable substitution) to a file—before the rest of deployment. That gives you a reproducible, inspectable file for debugging templates or for checking into version control.

```bash
containerlab deploy -t lab.clab.gotmpl --vars lab.clab_vars.yml --export-rendered lab.rendered.clab.yml
```

Thanks @Aprazor #3145

## Credentials in the topology file

You can set [credentials](../manual/nodes.md#credentials) (`username` and `password`) at `defaults`, per `kinds`, `groups`, and per `nodes`, with a well-defined “most specific wins” rule. Ansible and Nornir [inventory outputs](../manual/inventory.md) use the resolved per-node values.

Thanks @antoinekh #3136

## Point-to-point link IP addresses (VyOS and cEOS)

The [VyOS Networks VyOS](../manual/kinds/vyosnetworks_vyos.md) and [Arista cEOS](../manual/kinds/ceos.md) kinds now support [link `ipv4` and `ipv6`](../manual/topo-def-file.md#ip-addresses) the same way other kinds do, so addresses from the `links` section are applied to dataplane interfaces on those nodes.

Thanks @evilhamsterman #3158

## Classic SR OS CLI (vr-sros) automation

For [`nokia_sros`](../manual/kinds/vr-sros.md) VM nodes, the default automation uses the MD-CLI `nokia_sros` scrapligo platform. If your image runs in **classic** or **mixed** CLI mode, set the `CLAB_SROS_CONFIG_MODE` environment variable to `classic` or `mixed` so containerlab uses the matching `nokia_sros_classic` platform for partial config apply, save, and related operations.

Thanks @antoinekh #3129

## VxLAN tools: delete by exact name

[`clab tools vxlan delete`](../cmd/tools/vxlan/delete.md) now accepts `--name` for deleting **one** VxLAN interface by exact name; it is **mutually exclusive** with the existing `--prefix` option.

Thanks @Rucdev #3167

## Miscellaneous

- Fixed the **Arch (AUR)** [installation link](../install.md#archlinux) in the install guide. Thanks @andywhitaker #3151
- Clarified **Juniper vMX** [startup-config](../manual/kinds/vr-vmx.md) form in the docs. Thanks @endn #3168
- VxLAN link data: `sync.Once` initialization, safer handling when a link namespace is missing, correct `vxlan` type in YAML, and a fix for a panic when the DNS `Search` list was an empty slice. #3147 #3131
- Runtimes: explicit errors when a container’s PID is `0` before `GetNSPath`, closing `ExecNotWait` connections, and a clearer path when `NetworkInspect` fails. #3144 #3148
- **Core:** close netns and netlink handles in interface listing; fix a tool-container cleanup loop when `exec` fails; return errors for bad PEM in cert code paths; stricter `PreDeploy` certificate error propagation; safer env var splitting and `CreateFile` error checks; and closing files to avoid leaks. #3161 #3159 #3130 #3138 #3139 #3140 #3132
- **VyOS:** save errors are reported with the real failure from the node. #3160
- Merged work for full SR-OS in automated tests. #3142
- The default [`fdio_vpp`](../manual/kinds/fdio_vpp.md) image is updated so VPP-related configuration is provided under `/config` as expected by the image. Thanks @pimvanpelt #3152
- SR-SIM and related content point to the **current official SR-OS YANG model browser** URL. Thanks @schavezc #3154
- SR Linux topology `type` may use **`ixr-x4` as an alias** for `ixr-x4-d` (fixes a mismatch with documentation). Thanks @schavezc #3157
