DRC

The DRCOperations module provides design rule checking to validate PCB layouts.

board = kicad.get_board()
drc = board.drc

Running DRC

run()

Runs DRC and returns violations.

errors, warnings, exclusions = board.drc.run()

print(f"Errors: {len(errors)}")
print(f"Warnings: {len(warnings)}")
print(f"Exclusions: {len(exclusions)}")

for error in errors:
    print(f"  {error.description} at {error.position}")

run_and_report(path)

Runs DRC and generates a report file.

board.drc.run_and_report("/path/to/drc_report.txt")

DRC Settings

get_settings()

Gets current DRC settings.

settings = board.drc.get_settings()

print(f"Test tracks against zones: {settings.test_tracks_vs_zones}")
print(f"Test footprints: {settings.test_footprints}")

set_settings(**kwargs)

Updates DRC settings.

board.drc.set_settings(
    test_tracks_vs_zones=True,
    test_footprints=True,
    test_courtyard_overlap=True,
    refill_zones=True
)

DRC Exclusions

add_exclusion(violation)

Excludes a specific violation from future reports.

# Add exclusion for a known acceptable violation
board.drc.add_exclusion(violation)

remove_exclusion(violation_id)

Removes an exclusion.

board.drc.remove_exclusion(exclusion_id)

get_exclusions()

Gets all current exclusions.

exclusions = board.drc.get_exclusions()
for exc in exclusions:
    print(f"Excluded: {exc.description}")

Design Rules

get_design_rules()

Gets board design rules.

rules = board.drc.get_design_rules()

print(f"Min track width: {rules.min_track_width_mm}mm")
print(f"Min via drill: {rules.min_via_drill_mm}mm")
print(f"Min clearance: {rules.min_clearance_mm}mm")

set_design_rules(**kwargs)

Sets design rules.

board.drc.set_design_rules(
    min_track_width_mm=0.15,
    min_clearance_mm=0.15,
    min_via_diameter_mm=0.6,
    min_via_drill_mm=0.3,
    min_hole_clearance_mm=0.25,
    min_silk_clearance_mm=0.15
)

Severity Settings

set_rule_severity(rule_id, severity)

Changes the severity of a specific rule.

# Change a warning to an error
board.drc.set_rule_severity("courtyard_overlap", "error")

# Ignore a rule
board.drc.set_rule_severity("silkscreen_overlap", "ignore")

Severity options: "error", "warning", "ignore"

Example: Full DRC Workflow

from kipy import KiCad

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

# Configure DRC
board.drc.set_settings(
    test_tracks_vs_zones=True,
    test_footprints=True,
    test_courtyard_overlap=True,
    refill_zones=True
)

# Set design rules
board.drc.set_design_rules(
    min_track_width_mm=0.15,
    min_clearance_mm=0.15,
    min_via_diameter_mm=0.6,
    min_via_drill_mm=0.3
)

# Run DRC
errors, warnings, exclusions = board.drc.run()

# Report results
if errors:
    print("DRC FAILED")
    for error in errors:
        print(f"  ERROR: {error.description}")
        print(f"         Items: {error.items}")
        print(f"         Position: {error.position}")
elif warnings:
    print("DRC PASSED with warnings")
    for warning in warnings:
        print(f"  WARNING: {warning.description}")
else:
    print("DRC PASSED - no issues found")

# Generate report
board.drc.run_and_report("drc_report.txt")

Example: Filter by Violation Type

errors, warnings, _ = board.drc.run()

# Group violations by type
clearance_errors = [e for e in errors if "clearance" in e.description.lower()]
unconnected_errors = [e for e in errors if "unconnected" in e.description.lower()]
courtyard_errors = [e for e in errors if "courtyard" in e.description.lower()]

print(f"Clearance violations: {len(clearance_errors)}")
print(f"Unconnected items: {len(unconnected_errors)}")
print(f"Courtyard overlaps: {len(courtyard_errors)}")

DRC Violation Structure

class DRCViolation:
    description: str        # Human-readable description
    rule_id: str            # Rule identifier
    severity: str           # "error" or "warning"
    position: Vector2       # Location on board
    items: List[str]        # Item IDs involved
    excluded: bool          # Is this excluded

Common DRC Rules

RuleDescription
clearanceTrack/pad/via clearance violations
unconnectedUnrouted connections
track_widthTrack width below minimum
via_diameterVia size violations
via_drillVia drill size violations
courtyard_overlapFootprint courtyard overlaps
silkscreen_clippedSilkscreen over pads
copper_sliverVery thin copper slivers
hole_clearanceHole-to-copper clearance