# Release 0.74

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

## Spirent STC

The [`spirent_stc`](../manual/kinds/spirent_stc.md) kind adds support for running Spirent containerized Test Center in your labs. The node handles the quirks of STC's cgroups v1 dependency and interface renaming automatically, exposing test ports with `portX` naming that matches the Spirent GUI — so what you see in the topology is what you see in the Spirent interface.

Thanks @kaelemc #3066

## Lab name magic variable

A new `__clabLabName__` magic variable joins the existing set of [magic variables](../manual/topo-def-file.md#magic-variables). Combined with `__clabNodeName__`, it unlocks a powerful workflow for the [`save --copy`](../cmd/save.md) command: save your running configs to a directory, then reference them as startup configs using magic variables — no hardcoded paths needed.

```yaml
name: mylab
topology:
  nodes:
    node1:
      startup-config: startup-configs/__clabLabName__/__clabNodeName__/config.json
    node2:
      startup-config: startup-configs/__clabLabName__/__clabNodeName__/config.json
```

Magic variables are now also resolved inside node `extras` section (`ceos-copy-to-flash` and `srl-agents`), so you can use templated paths everywhere in your topology definition. #3099

## Events enhancements

The [`events`](../cmd/events.md) stream gets two improvements in this release. First, container exposed ports are now included in the event data, giving consumers full visibility into which ports are mapped for each container. Second, internal event processing was reworked to batch interface queries — replacing per-interface lookups with a single snapshot per tick and caching netem state — cutting CPU usage by up to 30%.

Thanks @FloSch62 #3062 #3070

## VxLAN stitched links fix

A race condition in VxLAN stitched link deployment has been fixed. Previously, TC stitch rules could be applied before the underlying veth and VxLAN interfaces were ready, causing intermittent deployment failures. The deployment ordering now guarantees that all veth pairs are created before VxLAN interfaces, and VxLAN interfaces exist before TC rules are applied.

Additionally, the TC action was corrected from `mirred egress mirror` (which copies packets) to `mirred egress redirect` (which moves packets) — the correct behavior for bridging two interfaces. #3083

## TX offload on clab network

The long-standing code that disabled TX checksum offload on the Containerlab management bridge has been removed. This code was originally added to work around checksum issues with SR Linux, but since then SR Linux started recomputing checksums and the per-veth offload disable (which remains in place) is the correct fix. The stale bridge-level disable was causing DNS failures for containers running under Orbstack and potentially other hypervisors. #3082

## SSH-agent fallback

Containerlab now gracefully handles restricted execution environments (such as Cursor remote sessions) where the process runs with setuid but lacks `CAP_DAC_OVERRIDE`. When the SSH agent socket cannot be accessed with elevated privileges, Containerlab falls back to the original user's credentials to retrieve SSH public keys — ensuring that SSH key injection into nodes works regardless of the host's capability restrictions. #3098

## veesix osvbng

:wave: to the [`veesix_osvbng`](../manual/kinds/veesix_osvbng.md) kind! Containerlab can now run [veesix ::networks](https://github.com/veesix-networks) Open Source vBNG nodes, bringing broadband network gateway functionality to your labs. Packaged as a native container image and available on Docker Hub.

Thanks @BSpendlove #3072

## Fresh looks

The Containerlab startup banner got a visual refresh — the logo text now renders using braille characters for a crisper, more compact look in your terminal.

![New logo](https://gitlab.com/rdodin/pics/-/wikis/uploads/80616342b5fc98b00a52e6d008f65260/CleanShot_2026-03-08_at_12.40.08.png)

Thanks @kaelemc #3051

## Miscellaneous

- Fixed distributed SR-SIM nodes becoming unreachable when deployed with `--skip-post-deploy` by moving TX offload disable to `DeployEndpoints()`. Also fixed `PostDeploy` timeout loop that never iterated. Thanks @bayars #3045
- Disabled TX offload on IOL node management interface, fixing SSH connectivity from other devices on the bridge. Thanks @bendergm #3077
- Fixed overly restrictive JSON schema regex for `nokia_sros` custom variant `type`, which rejected valid distributed chassis definitions from the documentation. Thanks @antoinekh #3081
- Added magic variable prefix support to the JSON schema. Thanks @juliusliu02 #3057
- Added `ceos-copy-to-flash` to the `.clab.yml` schema. Thanks @rrajpuro #3091
- Added `ixr-e2n` and `a1` to the SR Linux kind schema and docs
- Fixed scrapli-based SROS config save #3097
- Modernized `frr01` example lab to use `groups` and `exec` keys, updated container images to current versions. Thanks @blinklet #3085 #3084
- Fixed typos and `curl` command in manual installation docs. Thanks @earies #3067
- Bumped Docker API to use `golang.org/x/sys` v0.41.0 and `github.com/brunoga/deep` v1.3.1

## Patches

### 0.74.1

- Fixed OpenConfig server configuration for SR Linux nodes. #3113
- Fixed cRPD license installation. #3110
- Fixed podman health check config. #3112
- Added more missing kinds in the JSON schema. #3107
- Write SR-SIM chassis info to node lab dir. #3036
- Fixed netlink errors during concurrent deployment of links. #3102

### 0.74.2

- Adapted SR Linux startup config templates to use the new TLS profiles and DNS servers configuration format. #3121
- Added `/lib/modules` mount to VyOS nodes. #3120
- Allowed interfaces eth0-99 for VyOS nodes. #3119

### 0.74.3

- Added SR Linux `sxr-1-32d`, `ixr-x4-d` types and set `ixr-6e`, `ixr-10e` boot type to GEN2CP_ONLY by default. #3127
- Fixed concurrent templating of startup configs for ceos, c8000v, XRd. #3128
