THE CUSTOMIZATION STUDIO
Your network.
A different point of view.¶
Give the diagram as much thought as the lab. Explore five distinct topologies, from a quiet addressing guide to a fabric after dark. Every device, callout, and boundary is rendered by the real viewer.
Make it yours¶
Pick a lab. Change the atmosphere. Strip it back or bring every detail forward.
Try Synthwave for neon pink and cyan, Aurora for mint and ice blue, Ember for warm copper and coral, or Porcelain for a cream canvas with muted jewel tones.
# 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]
# 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]View the Markdown + CSS recipe
Save both downloads under docs/examples/, then paste the recipe into your page. The annotations download includes your palette, corners, and visible layers.
Five labs. Five personalities.¶
These are starting points you can take apart. Each pairs a containerlab YAML file with an editable annotations file. The first four supply wiring for an exercise; the Linux walkthrough also configures addresses and routes.
Every rack. Two paths.
10 nodes · 12 links
Two spines, four racks, and a clear visual hierarchy. Lime marks shared transit, teal marks the leaves, and slate marks the compute layer. Rounded rack groups give a dense fabric room to breathe.
# 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]
# 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]Small fabric. Every detail.
3 nodes · 2 links
An illustration that belongs in an article. Inspired by the Fabric 101 documentation example: sage device cards, paired interface/IP callouts, and a quiet design note. The /31 addresses are a proposed plan, not device configuration.
# 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]
# 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]Draw the trust boundary.
6 nodes · 5 links
An outside client, public services, and a private application tier. Peach, amber, and lavender groups separate the zones; a dashed boundary makes the policy discussion visible. Configure forwarding and firewall rules as the next exercise.
# 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]
# 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]The long way is still a way.
6 nodes · 6 links
Six cities form a physical ring around a central annotation. A violet canvas, two node colors, and a dashed halo turn the topology into a routing exercise: configure the network, break a link, then follow the alternate path.
# 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]
# 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]Follow one packet.
3 nodes · 2 links
A runnable Linux lab with two subnets and IP forwarding. Address labels explain each hop; solid and dashed arrows show the request and return directions. Deploy the YAML, then run docker exec clab-packet-walk-client ping -c 3 10.10.2.2 on your 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]
# 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]Build your own visual language¶
| Change the… | Use… | Try it in… |
|---|---|---|
| Shape of the story | Saved nodeAnnotations positions and role-specific icons |
Midnight fabric |
| Rack, subnet, or security boundaries | groupStyleAnnotations with fills, borders, labels, and corners |
Trust boundaries |
| Interface and addressing detail | Markdown freeTextAnnotations with monospace text and a background |
Fabric field notes |
| Direction and emphasis | freeShapeAnnotations lines, arrowheads, circles, and dashed borders |
Follow the packet |
| Mood of the canvas | CSS color tokens, a pinned theme, and a grid | Any lab → Blueprint palette |
| Amount of interface | Borderless figure, full explorer, or split source view | Presentation selector |
| Reading experience | Disable wheel zoom, choose pan, set height and fit padding | Playground controls |
Annotations travel with the lab as a separate JSON file. You can edit them in the topology editor, or use these files as a starting point. Diagrams and annotations are read-only in the documentation viewer.
For all Markdown attributes, CSS tokens, and the HTML and React APIs, see the component reference.