Circuit-Synth JSON Schema Documentationο
Overviewο
This document describes the JSON schema used by circuit-synth as the canonical intermediate representation for circuit data. The schema supports hierarchical circuit designs with full component and connectivity information.
Schema Structureο
Top-Level Circuit Objectο
{
"name": "string", // Required: Circuit name
"description": "string", // Optional: Circuit description
"tstamps": "string", // Optional: KiCad timestamp path
"source_file": "string", // Optional: Source schematic file
"components": {}, // Component dictionary (see below)
"nets": {}, // Net connectivity (see below)
"subcircuits": [], // Array of nested circuits
"annotations": [] // Optional: Circuit annotations
}
Components Objectο
Components are stored as a dictionary with reference designators as keys:
"components": {
"U1": {
"symbol": "string", // Required: KiCad symbol library reference
"ref": "string", // Required: Reference designator
"value": "string", // Optional: Component value (e.g., "10k", "100nF")
"footprint": "string", // Optional: KiCad footprint library reference
"datasheet": "string", // Optional: Datasheet URL
"description": "string", // Optional: Component description
"properties": {}, // Optional: Additional properties
"tstamps": "string", // Optional: KiCad timestamp
"pins": [] // Array of pin definitions (see below)
}
}
Pin Definitionο
Each pin in the componentβs pins array:
{
"pin_id": "string|number", // Pin identifier (number or string)
"name": "string", // Pin name (e.g., "VCC", "GND")
"number": "string", // Pin number on package
"func": "string", // Pin function/type (e.g., "passive", "power_in")
"unit": "number", // Unit number (for multi-unit symbols)
"x": "number", // X coordinate (schematic position)
"y": "number", // Y coordinate (schematic position)
"length": "number", // Pin length
"orientation": "number" // Pin orientation (degrees)
}
Nets Objectο
Nets define electrical connections between component pins:
"nets": {
"VCC_3V3": [ // Net name as key
{
"component": "U1", // Component reference
"pin_id": 3 // Pin ID (number format)
},
{
"component": "R1", // Another component
"pin": { // Alternative pin format (object)
"number": "1",
"name": "~",
"type": "passive"
}
}
]
}
Subcircuits Arrayο
Subcircuits are nested circuit definitions with the same structure:
"subcircuits": [
{
"name": "Power_Supply",
"description": "5V to 3.3V regulation",
"components": {
// Same component structure
},
"nets": {
// Same net structure
},
"subcircuits": [
// Can nest further
]
}
]
Annotations Array (Optional)ο
Circuit documentation and annotations:
"annotations": [
{
"type": "textbox",
"id": "unique-id",
"text": "Design note or specification",
"position": {"x": 50, "y": 30},
"size": {"width": 40, "height": 15},
"style": "note",
"metadata": {
"source": "automatic",
"function": "create_power_supply"
}
}
]
Complete Exampleο
{
"name": "ESP32_Dev_Board",
"description": "ESP32 development board with USB and power",
"components": {
"U1": {
"symbol": "RF_Module:ESP32-C6-MINI-1",
"ref": "U1",
"footprint": "RF_Module:ESP32-C6-MINI-1",
"description": "ESP32-C6 WiFi/BLE module",
"pins": [
{
"pin_id": 0,
"name": "GND",
"number": "1",
"func": "power_in",
"unit": 1,
"x": 0,
"y": -5.08,
"length": 2.54,
"orientation": 0
}
]
},
"C1": {
"symbol": "Device:C",
"ref": "C1",
"value": "100nF",
"footprint": "Capacitor_SMD:C_0603_1608Metric",
"pins": [
{"pin_id": 0, "name": "~", "number": "1", "func": "passive"},
{"pin_id": 1, "name": "~", "number": "2", "func": "passive"}
]
}
},
"nets": {
"VCC_3V3": [
{"component": "U1", "pin_id": 2},
{"component": "C1", "pin_id": 0}
],
"GND": [
{"component": "U1", "pin_id": 0},
{"component": "C1", "pin_id": 1}
]
},
"subcircuits": [
{
"name": "USB_Interface",
"description": "USB-C connector with ESD protection",
"components": {},
"nets": {}
}
]
}
Pin Reference Formatsο
The schema supports two formats for pin references in nets:
1. Legacy Format (pin_id)ο
{"component": "U1", "pin_id": 3}
2. Modern Format (pin object)ο
{
"component": "U1",
"pin": {
"number": "4",
"name": "VDD",
"type": "power_in"
}
}
Both formats are supported for backward compatibility.
Data Typesο
Strings: UTF-8 encoded text
Numbers: IEEE 754 double precision
Arrays: Ordered lists
Objects: Key-value pairs
Validation Notesο
Required Fields:
namefor circuits,symbolandreffor componentsReference Uniqueness: Component references must be unique within a circuit
Pin Connectivity: Pins referenced in nets must exist in component definitions
Hierarchical Paths: Subcircuits can be nested to any depth
Usage with Circuit-Synthο
Export to JSONο
# Generate JSON from circuit
circuit.generate_json_netlist("my_circuit.json")
# Or get dictionary
circuit_dict = circuit.to_dict()
Import from JSONο
from circuit_synth.io import load_circuit_from_json_file
# Load circuit from JSON file
circuit = load_circuit_from_json_file("my_circuit.json")
# Or from dictionary
from circuit_synth.io import load_circuit_from_dict
circuit = load_circuit_from_dict(circuit_dict)
Version Compatibilityο
Current Version: 1.0 (implicit, not versioned in files)
Backward Compatibility: Maintained for all 0.x versions
Forward Compatibility: New fields can be added without breaking older parsers