Skip to content

Customization studio

Annotations control how a topology looks in the viewer: node positions, icons and colors, groups, notes, shapes, and display settings such as the node style and link style. This page has two parts:

  • The studio applies viewer settings to an example lab and exports the result for your own documentation.
  • The example labs show what annotations can express. Each example links to its topology and annotations files.

Studio

Choose a lab and change its settings. The preview updates as you go. To reuse the result, copy the Markdown snippet and download the topology and annotations files.

PREVIEW01 / LEAF-SPINE FABRIC
# Wiring only. Configure addressing and routing as a separate exercise.
name: midnight-fabric
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
  nodes:
    spine1: {type: ixrd3}
    spine2: {type: ixrd3}
    leaf1: {type: ixrd2}
    leaf2: {type: ixrd2}
    leaf3: {type: ixrd2}
    leaf4: {type: ixrd2}
    compute1:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    compute2:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    compute3:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    compute4:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
  links:
    - endpoints: [spine1:e1-1, leaf1:e1-49]
    - endpoints: [spine1:e1-2, leaf2:e1-49]
    - endpoints: [spine1:e1-3, leaf3:e1-49]
    - endpoints: [spine1:e1-4, leaf4:e1-49]
    - endpoints: [spine2:e1-1, leaf1:e1-50]
    - endpoints: [spine2:e1-2, leaf2:e1-50]
    - endpoints: [spine2:e1-3, leaf3:e1-50]
    - endpoints: [spine2:e1-4, leaf4:e1-50]
    - endpoints: [leaf1:e1-1, compute1:eth1]
    - endpoints: [leaf2:e1-1, compute2:eth1]
    - endpoints: [leaf3:e1-1, compute3:eth1]
    - endpoints: [leaf4:e1-1, compute4:eth1]

Example labs

Each example pairs a containerlab topology file with an annotations file. Use them as a starting point for your own diagrams. The packet walk lab also configures addresses and routes; the others only define nodes and links.

01

Leaf-spine fabric

10 nodes · 12 links

Two spines and four racks with a leaf and a server each. Group annotations draw the racks, and icon colors separate spines, leaves, and servers.

# Wiring only. Configure addressing and routing as a separate exercise.
name: midnight-fabric
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
  nodes:
    spine1: {type: ixrd3}
    spine2: {type: ixrd3}
    leaf1: {type: ixrd2}
    leaf2: {type: ixrd2}
    leaf3: {type: ixrd2}
    leaf4: {type: ixrd2}
    compute1:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    compute2:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    compute3:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    compute4:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
  links:
    - endpoints: [spine1:e1-1, leaf1:e1-49]
    - endpoints: [spine1:e1-2, leaf2:e1-49]
    - endpoints: [spine1:e1-3, leaf3:e1-49]
    - endpoints: [spine1:e1-4, leaf4:e1-49]
    - endpoints: [spine2:e1-1, leaf1:e1-50]
    - endpoints: [spine2:e1-2, leaf2:e1-50]
    - endpoints: [spine2:e1-3, leaf3:e1-50]
    - endpoints: [spine2:e1-4, leaf4:e1-50]
    - endpoints: [leaf1:e1-1, compute1:eth1]
    - endpoints: [leaf2:e1-1, compute2:eth1]
    - endpoints: [leaf3:e1-1, compute3:eth1]
    - endpoints: [leaf4:e1-1, compute4:eth1]
02

Fabric 101 addressing

3 nodes · 2 links

A spine and two leaves based on the Fabric 101 example. Text annotations label each interface with a /31 address. The addresses are a proposed plan and are not configured on the nodes.

# Proposed /31 addressing is documented in annotations, not applied here.
name: fabric-101
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
  nodes:
    leaf1: {type: ixrd2}
    spine1: {type: ixrd3}
    leaf2: {type: ixrd2}
  links:
    - endpoints: [leaf1:e1-49, spine1:e1-1]
    - endpoints: [spine1:e1-2, leaf2:e1-49]
03

Security zones

6 nodes · 5 links

An outside client, public services, and a private application tier. Groups mark the three zones and a dashed shape marks the trust boundary. Forwarding and filtering are left for you to configure.

# Connectivity exercise. Zone labels describe intended policy, not installed rules.
name: security-zones
 
topology:
  defaults:
    kind: linux
    image: ghcr.io/srl-labs/network-multitool:latest
  nodes:
    outside: {}
    gateway: {}
    frontend: {}
    api: {}
    database: {}
    admin: {}
  links:
    - endpoints: [outside:eth1, gateway:eth1]
    - endpoints: [gateway:eth2, frontend:eth1]
    - endpoints: [gateway:eth3, api:eth1]
    - endpoints: [api:eth2, database:eth1]
    - endpoints: [admin:eth1, gateway:eth4]
04

WAN ring

6 nodes · 6 links

Six sites connected in a ring, laid out around a circle shape. Configure routing, disable a link, and check that traffic takes the other direction around the ring.

# Physical ring only. Add routing and failure-detection configuration for the exercise.
name: wan-ring
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
    type: ixrd2
  nodes:
    ams: {}
    fra: {}
    ber: {}
    waw: {}
    vie: {}
    par: {}
  links:
    - endpoints: [ams:e1-1, fra:e1-2]
    - endpoints: [fra:e1-1, ber:e1-2]
    - endpoints: [ber:e1-1, waw:e1-2]
    - endpoints: [waw:e1-1, vie:e1-2]
    - endpoints: [vie:e1-1, par:e1-2]
    - endpoints: [par:e1-1, ams:e1-2]
05

Packet walk

3 nodes · 2 links

A Linux lab with two subnets and a router with IP forwarding. Address labels mark each hop, and solid and dashed arrows show the request and reply paths. After deploying, run docker exec clab-packet-walk-client ping -c 3 10.10.2.2 on the lab host.

# Ready to ping: client -> router -> server, across two IPv4 subnets.
name: packet-walk
 
topology:
  defaults:
    kind: linux
    image: ghcr.io/srl-labs/network-multitool:latest
  nodes:
    client:
      exec:
        - ip address add 10.10.1.2/24 dev eth1
        - ip route add 10.10.2.0/24 via 10.10.1.1
    router:
      sysctls:
        net.ipv4.ip_forward: "1"
      exec:
        - ip address add 10.10.1.1/24 dev eth1
        - ip address add 10.10.2.1/24 dev eth2
    server:
      exec:
        - ip address add 10.10.2.2/24 dev eth1
        - ip route add 10.10.1.0/24 via 10.10.2.1
  links:
    - endpoints: [client:eth1, router:eth1]
    - endpoints: [router:eth2, server:eth1]
06

Dual-homed hosts

7 nodes · 10 links

Two spines, three leaves, and two hosts, each host connected to two leaves. Links use the elbow style: they bend at right angles between the layers, and crossing links show a small gap. Hover over a link to highlight it and both of its nodes.

# Wiring only. Configure the fabric and host bonding as a separate exercise.
name: dual-homed
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
  nodes:
    spine1: {type: ixrd3}
    spine2: {type: ixrd3}
    leaf1: {type: ixrd2}
    leaf2: {type: ixrd2}
    leaf3: {type: ixrd2}
    host1:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    host2:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
  links:
    - endpoints: [spine1:e1-1, leaf1:e1-49]
    - endpoints: [spine1:e1-2, leaf2:e1-49]
    - endpoints: [spine1:e1-3, leaf3:e1-49]
    - endpoints: [spine2:e1-1, leaf1:e1-50]
    - endpoints: [spine2:e1-2, leaf2:e1-50]
    - endpoints: [spine2:e1-3, leaf3:e1-50]
    - endpoints: [leaf1:e1-1, host1:eth1]
    - endpoints: [leaf2:e1-1, host1:eth2]
    - endpoints: [leaf2:e1-2, host2:eth1]
    - endpoints: [leaf3:e1-1, host2:eth2]
07

Branch office

8 nodes · 9 links

Two internet uplinks, an edge router, a redundant core, and three floor switches. With elbow links and all interface names shown, each name is placed along its own link next to the node.

# Wiring only. Configure addressing, NAT, and policy as a separate exercise.
name: branch-office
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
  nodes:
    isp-a:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    isp-b:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    edge: {type: ixrd2}
    core1: {type: ixrd2}
    core2: {type: ixrd2}
    floor1: {type: ixrd2}
    floor2: {type: ixrd2}
    floor3: {type: ixrd2}
  links:
    - endpoints: [isp-a:eth1, edge:e1-1]
    - endpoints: [isp-b:eth1, edge:e1-2]
    - endpoints: [edge:e1-3, core1:e1-1]
    - endpoints: [edge:e1-4, core2:e1-1]
    - endpoints: [core1:e1-2, core2:e1-2]
    - endpoints: [core1:e1-3, floor1:e1-49]
    - endpoints: [core1:e1-4, floor2:e1-49]
    - endpoints: [core2:e1-3, floor2:e1-50]
    - endpoints: [core2:e1-4, floor3:e1-49]
08

Frosted glass

6 nodes · 7 links

Boxed nodes with a low-opacity fill, a light border, and a background blur, placed over colored shape annotations. Links use the elbow style. Hover over a link to highlight it and both of its nodes.

# Wiring only. Configure routing and services as a separate exercise.
name: frosted-glass
 
topology:
  defaults:
    kind: nokia_srlinux
    image: ghcr.io/nokia/srlinux:latest
  nodes:
    internet:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    edge1: {type: ixrd2}
    edge2: {type: ixrd2}
    app1:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    app2:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
    app3:
      kind: linux
      image: ghcr.io/srl-labs/network-multitool:latest
  links:
    - endpoints: [internet:eth1, edge1:e1-1]
    - endpoints: [internet:eth2, edge2:e1-1]
    - endpoints: [edge1:e1-2, edge2:e1-2]
    - endpoints: [edge1:e1-3, app1:eth1]
    - endpoints: [edge1:e1-4, app2:eth1]
    - endpoints: [edge2:e1-3, app2:eth2]
    - endpoints: [edge2:e1-4, app3:eth1]

Annotations used in the examples

Feature Annotation or option Example
Node positions and icons nodeAnnotations with position, icon, and iconColor Leaf-spine fabric
Racks, subnets, and zones groupStyleAnnotations with fill, border, label, and corner radius Security zones
Interface and address labels freeTextAnnotations with Markdown, monospace text, and a background Fabric 101 addressing
Arrows, circles, and boundaries freeShapeAnnotations with lines, arrowheads, circles, and dashed borders Packet walk
Boxed nodes viewerSettings.nodeStyle: "boxed", with an optional per-node box for fill, opacity, blur, and border Frosted glass
Telemetry style viewerSettings.style: "telemetry-style" Studio, Telemetry style
Elbow links viewerSettings.linkStyle: "elbow", or link-style="elbow" on the code block Dual-homed hosts
Link highlighting link-hover="true" highlights a hovered link and both of its nodes Dual-homed hosts
Interface names along links Elbow links with link-labels="show-all" Branch office
Canvas colors CSS color tokens, a fixed theme, and a grid Studio, Colors
Presentation Borderless figure, explorer, or split view with the YAML source Studio, Frame
Interaction Wheel zoom, panning, height, and fit padding Studio, Interaction

Annotations are stored in a separate JSON file next to the topology. You can edit them in the topology editor or start from the files above. The documentation viewer is read-only.

For all Markdown attributes, CSS tokens, and the HTML and React APIs, see the component reference.