kicad-file-format
KiCad S-expression file format expertise. Complete reference for reading and writing .kicad_sch (schematic) and .kicad_pcb (PCB) files.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
KiCad S-expression file format expertise. Complete reference for reading and writing .kicad_sch (schematic) and .kicad_pcb (PCB) files.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
KiCad command-line interface expertise. Complete reference for schematic/PCB exports, DRC/ERC validation, manufacturing outputs, and automation.
PlatformIO embedded development platform expertise. Project setup, configuration, building, debugging, and library management for Arduino, ESP-IDF, STM32, and more.
基于 SOC 职业分类
| name | kicad-file-format |
| description | KiCad S-expression file format expertise. Complete reference for reading and writing .kicad_sch (schematic) and .kicad_pcb (PCB) files. |
| allowed-tools | Read, Write, Edit, Glob, Grep, Bash |
Complete reference for KiCad 8.x S-expression file formats.
KiCad uses Lisp-style S-expressions for all file formats. Files are human-readable and text-based.
(keyword value)
(keyword (nested value))
(keyword
(child1 value)
(child2 value)
)
(at x y angle) or (xy x y)(uuid "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")"quoted string" or unquoted_identifier1.234 (always decimal, no units in file)yes / no(kicad_sch
(version 20231120)
(generator "eeschema")
(generator_version "8.0")
(uuid "project-uuid")
(paper "A4")
; Title block
(title_block
(title "Project Title")
(date "2024-01-01")
(rev "1.0")
(company "Company Name")
)
; Library symbols (embedded copies)
(lib_symbols
(symbol "Device:R" ...)
)
; Placed symbols (component instances)
(symbol ...)
(symbol ...)
; Wires and connections
(wire ...)
(bus ...)
(junction ...)
; Labels and nets
(label ...)
(global_label ...)
(hierarchical_label ...)
; Hierarchical sheets
(sheet ...)
; Text and graphics
(text ...)
(polyline ...)
(rectangle ...)
)
(symbol
(lib_id "Device:R")
(at 100 50 0) ; x, y, rotation (0, 90, 180, 270)
(unit 1) ; Multi-unit symbols
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no) ; Do Not Populate
(uuid "symbol-uuid")
(property "Reference" "R1"
(at 100 45 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "10k"
(at 100 55 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "Resistor_SMD:R_0402_1005Metric"
(at 100 50 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "LCSC" "C25744"
(at 100 50 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid "pin1-uuid"))
(pin "2" (uuid "pin2-uuid"))
(instances
(project "project_name"
(path "/root-uuid" (reference "R1") (unit 1))
)
)
)
(wire
(pts
(xy 100 50)
(xy 120 50)
)
(stroke (width 0) (type default))
(uuid "wire-uuid")
)
(label "VCC"
(at 100 50 0)
(effects (font (size 1.27 1.27)))
(uuid "label-uuid")
)
(global_label "USB_D+"
(shape input) ; input, output, bidirectional, tri_state, passive
(at 150 60 0)
(effects (font (size 1.27 1.27)))
(uuid "global-uuid")
(property "Intersheetrefs" "${INTERSHEET_REFS}"
(at 150 60 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol
(lib_id "power:GND")
(at 100 80 0)
(unit 1)
(exclude_from_sim yes)
(in_bom no)
(on_board yes)
(uuid "power-uuid")
(property "Reference" "#PWR01" ...)
(property "Value" "GND" ...)
(pin "1" (uuid "..."))
)
(sheet
(at 50 50)
(size 30 20)
(fields_autoplaced yes)
(stroke (width 0.1524) (type solid))
(fill (color 255 255 255 0))
(uuid "sheet-uuid")
(property "Sheetname" "Power Supply"
(at 50 49 0)
(effects (font (size 1.27 1.27)))
)
(property "Sheetfile" "power_supply.kicad_sch"
(at 50 72 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "VIN" input
(at 50 55 180)
(effects (font (size 1.27 1.27)))
(uuid "sheet-pin-uuid")
)
)
(kicad_pcb
(version 20231014)
(generator "pcbnew")
(generator_version "8.0")
(general
(thickness 1.6)
(legacy_teardrops no)
)
; Page settings
(paper "A4")
(title_block ...)
; Layer definitions
(layers
(0 "F.Cu" signal)
(31 "B.Cu" signal)
(32 "B.Adhes" user "B.Adhesive")
(33 "F.Adhes" user "F.Adhesive")
(34 "B.Paste" user)
(35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen")
(37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user)
(39 "F.Mask" user)
(40 "Dwgs.User" user "User.Drawings")
(41 "Cmts.User" user "User.Comments")
(42 "Eco1.User" user "User.Eco1")
(43 "Eco2.User" user "User.Eco2")
(44 "Edge.Cuts" user)
(45 "Margin" user)
(46 "B.CrtYd" user "B.Courtyard")
(47 "F.CrtYd" user "F.Courtyard")
(48 "B.Fab" user)
(49 "F.Fab" user)
)
; Design rules setup
(setup ...)
; Net definitions
(net 0 "")
(net 1 "GND")
(net 2 "VCC")
; Footprints (component instances)
(footprint ...)
; Traces
(segment ...)
; Vias
(via ...)
; Zones (copper pours)
(zone ...)
; Graphics
(gr_line ...)
(gr_rect ...)
(gr_circle ...)
(gr_text ...)
)
(footprint "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm"
(layer "F.Cu")
(uuid "footprint-uuid")
(at 100 50 0) ; x, y, rotation
(descr "SOIC-8 package")
(property "Reference" "U1"
(at 0 -3.5 0)
(layer "F.SilkS")
(uuid "ref-uuid")
(effects (font (size 1 1) (thickness 0.15)))
)
(property "Value" "ESP32-S3"
(at 0 3.5 0)
(layer "F.Fab")
(uuid "val-uuid")
(effects (font (size 1 1) (thickness 0.15)))
)
(property "Footprint" "Package_SO:SOIC-8..."
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "fp-uuid")
)
; Pads
(pad "1" smd rect
(at -1.905 -2.475)
(size 0.6 1.5)
(layers "F.Cu" "F.Paste" "F.Mask")
(net 1 "GND")
(uuid "pad-uuid")
)
(pad "2" thru_hole circle
(at 0 0)
(size 1.7 1.7)
(drill 1.0)
(layers "*.Cu" "*.Mask")
(net 2 "VCC")
(uuid "pad-uuid")
)
; Silkscreen graphics
(fp_line
(start -2.5 -2.5)
(end 2.5 -2.5)
(stroke (width 0.12) (type solid))
(layer "F.SilkS")
(uuid "line-uuid")
)
)
(segment
(start 100 50)
(end 120 50)
(width 0.25)
(layer "F.Cu")
(net 1)
(uuid "segment-uuid")
)
(arc
(start 100 50)
(mid 105 45)
(end 110 50)
(width 0.25)
(layer "F.Cu")
(net 1)
(uuid "arc-uuid")
)
(via
(at 110 60)
(size 0.8)
(drill 0.4)
(layers "F.Cu" "B.Cu")
(net 1)
(uuid "via-uuid")
)
(zone
(net 1)
(net_name "GND")
(layer "F.Cu")
(uuid "zone-uuid")
(hatch edge 0.5)
(connect_pads
(clearance 0.25)
)
(min_thickness 0.25)
(filled_areas_thickness no)
(fill yes
(thermal_gap 0.5)
(thermal_bridge_width 0.5)
)
(polygon
(pts
(xy 0 0)
(xy 100 0)
(xy 100 100)
(xy 0 100)
)
)
(filled_polygon
(layer "F.Cu")
(pts ...)
)
)
(gr_rect
(start 0 0)
(end 100 100)
(stroke (width 0.1) (type default))
(fill none)
(layer "Edge.Cuts")
(uuid "outline-uuid")
)
(lib_symbols ...) if not already present(symbol ...) block with:
(at x y rotation)(segment ...) block with:
(net N "NetName")| Context | Unit |
|---|---|
| Schematic | mils (1/1000 inch), stored as mm in file |
| PCB | millimeters |
| Angles | degrees (0, 90, 180, 270 typical) |
Coordinates are absolute from origin (0,0).
All elements require unique UUIDs. Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Generate with: uuidgen command or programming language UUID library.
# Simple recursive descent parser concept
def parse_sexpr(text):
tokens = tokenize(text)
return parse_list(tokens)
def parse_list(tokens):
result = []
while tokens and tokens[0] != ')':
if tokens[0] == '(':
tokens.pop(0)
result.append(parse_list(tokens))
else:
result.append(tokens.pop(0))
if tokens:
tokens.pop(0) # Remove closing ')'
return result
After editing:
Important: Always backup files before programmatic editing. KiCad may add/remove fields on save.