Nets

The NetOperations module handles net queries and net class management.

board = kicad.get_board()
nets = board.nets

Getting Nets

get_all()

Gets all nets on the board.

all_nets = board.nets.get_all()

for net in all_nets:
    print(f"{net.name}: {net.class_name}")

get_net(name)

Gets a specific net by name.

net = board.nets.get_net("VCC")
print(f"Net class: {net.class_name}")

find_by_pattern(pattern)

Finds nets matching a pattern.

# Find all data bus nets
data_nets = board.nets.find_by_pattern("DATA*")

# Find all power nets
power_nets = board.nets.find_by_pattern("*VCC*")

Net Information

get_items_on_net(net_name)

Gets all items connected to a net.

items = board.nets.get_items_on_net("GND")

print(f"GND has {len(items)} connected items")
for item in items:
    print(f"  {item.type}: {item.id}")

get_pads_on_net(net_name)

Gets all pads on a net.

pads = board.nets.get_pads_on_net("VCC")

for pad in pads:
    print(f"Pad {pad.number} on {pad.footprint}")

Creating Nets

create_net(name, net_class=None)

Creates a new net.

board.nets.create_net("NEW_SIGNAL", net_class="HighSpeed")

set_name(old_name, new_name)

Renames a net.

board.nets.set_name("Net-(U1-Pad3)", "MCU_TX")

Net Classes

Net classes define routing rules for groups of nets.

get_net_classes()

Gets all net classes.

classes = board.nets.get_net_classes()

for nc in classes:
    print(f"{nc.name}: {nc.track_width_mm}mm track, {nc.clearance_mm}mm clearance")

assign_net_class(net_name, class_name)

Assigns a net to a net class.

board.nets.assign_net_class("CLK", "HighSpeed")

assign_nets_by_pattern(pattern, class_name)

Assigns multiple nets by pattern.

# Assign all power nets
board.nets.assign_nets_by_pattern("*VCC*", "Power")
board.nets.assign_nets_by_pattern("*GND*", "Power")

# Assign clock nets
board.nets.assign_nets_by_pattern("CLK*", "HighSpeed")

Example: Analyze Net Statistics

from kipy import KiCad

kicad = KiCad()
board = kicad.get_board()

# Get all nets
all_nets = board.nets.get_all()

# Count items per net
net_stats = []
for net in all_nets:
    items = board.nets.get_items_on_net(net.name)
    net_stats.append({
        'name': net.name,
        'items': len(items),
        'class': net.class_name
    })

# Sort by item count
net_stats.sort(key=lambda x: x['items'], reverse=True)

print("Top 10 nets by connectivity:")
for stat in net_stats[:10]:
    print(f"  {stat['name']}: {stat['items']} items ({stat['class']})")

Example: Assign Net Classes by Convention

# Power nets
power_patterns = ["VCC", "VDD", "V3.3", "V5", "+*V", "GND", "VSS"]
for pattern in power_patterns:
    board.nets.assign_nets_by_pattern(f"*{pattern}*", "Power")

# High-speed differential
diff_patterns = ["*_P", "*_N", "*+", "*-"]
for pattern in diff_patterns:
    board.nets.assign_nets_by_pattern(pattern, "DiffPair")

# Clock signals
board.nets.assign_nets_by_pattern("CLK*", "HighSpeed")
board.nets.assign_nets_by_pattern("*_CLK", "HighSpeed")

print("Net classes assigned")

Example: Find Unrouted Nets

# Get nets with no routing
unrouted = []

for net in board.nets.get_all():
    tracks = board.routing.get_tracks_on_net(net.name)
    if len(tracks) == 0:
        pads = board.nets.get_pads_on_net(net.name)
        if len(pads) > 1:  # Has connections to make
            unrouted.append(net.name)

print(f"Unrouted nets ({len(unrouted)}):")
for name in unrouted:
    print(f"  {name}")

Net Information Structure

class Net:
    name: str           # Net name
    code: int           # Internal net code (deprecated)
    class_name: str     # Net class name

class NetClass:
    name: str               # Class name
    description: str        # Description
    track_width_mm: float   # Default track width
    clearance_mm: float     # Default clearance
    via_diameter_mm: float  # Default via size
    via_drill_mm: float     # Default via drill
    diff_pair_gap_mm: float # Differential pair gap
    diff_pair_via_gap_mm: float  # DP via gap