NetWeave v1 schema

The native schema is intentionally small: metadata, devices with interfaces and optional protocol config, and links that reference devices by hostname and interfaces by name.

Top-level document

apiVersion: netweave.io/v1   # required
kind: Topology               # required
metadata: { ... }            # required, see below
devices: [ ... ]             # required, at least one device recommended
links: [ ... ]               # optional, defaults to []

metadata

metadata:
  name: "campus-core"               # required
  description: "Short summary."     # optional
  requester:                        # optional — used in export metadata
    name: "Jane Doe"
    email: "jane@corp.net"

devices[]

type must be one of: l2-switch, l3-switch, router, firewall, load-balancer, server, ap, wlc.

- hostname: core-01           # required, unique within the doc
  type: l3-switch            # required
  role: "spine"              # optional — free-form label (shown on the node)
  site: "dc-east"            # optional
  interfaces: [ ... ]        # see below
  protocols: { ... }         # optional — ospf / isis / bgp

devices[].interfaces[]

kind must be one of: l2, l3, lacp, trunk, access, svi, loopback, subif.

interfaces:
  - name: Lo0
    kind: loopback
    ipv4: 10.0.0.1/32
  - name: Vlan10
    kind: svi
    ipv4: 10.10.0.1/24
    vlan: 10
  - name: Po1
    kind: lacp
    members: [Eth1/1, Eth1/2]
  - name: Eth1/3
    kind: l3
    ipv4: 192.0.2.1/30
    ipv6: 2001:db8::1/64
    description: "to core-02"

devices[].protocols

protocols:
  ospf:
    process: 1
    router_id: 10.0.0.1
    areas:
      - { id: 0, interfaces: [Lo0, Eth1/3] }
  isis:
    net: 49.0001.0100.0000.0001.00
    level: 2
  bgp:
    asn: 65001
    router_id: 10.0.0.1
    neighbors:
      - { peer: 192.0.2.2, remote_as: 65002 }

links[]

Each link references devices by hostname and interfaces by name. type defaults to l3.

links:
  - a: { device: core-01, interface: Eth1/3 }
    b: { device: edge-01, interface: Eth1/1 }
    type: l3
    description: "north-south"

Validation

Every field is validated on each keystroke (debounced). Errors surface in a panel under the editor and the canvas shows the last good render until the YAML becomes valid again.