A TypeScript library for converting Circuit JSON to Schematic, PCB and Assembly SVG representations.
Getting Started Contributor Video
npm add circuit-to-svg
# or...
bun add circuit-to-svgThis library provides functionality to convert Circuit JSON into SVG (Scalable Vector Graphics) representations. It supports both schematic and PCB (Printed Circuit Board), and Assembly layouts.
npm install circuit-to-svgimport { readFileSync, writeFileSync } from 'fs'
import { convertCircuitJsonToSchematicSvg } from 'circuit-to-svg'
const circuitJson = JSON.parse(readFileSync('circuit.json', 'utf8'))
const schematicSvg = convertCircuitJsonToSchematicSvg(circuitJson)
writeFileSync('schematic.svg', schematicSvg)Explore the API sections below to render PCB, assembly, pinout, simulation, and solder paste views.
| Function | Description |
|---|---|
convertCircuitJsonToSchematicSvg |
Generate schematic SVG output from Circuit JSON. |
convertCircuitJsonToSchematicSimulationSvg |
Overlay simulation data on schematic diagrams. |
convertCircuitJsonToPcbSvg |
Render PCB layouts as SVG graphics. |
convertCircuitJsonToSolderPasteMask |
Create solder paste mask layers for fabrication. |
convertCircuitJsonToAssemblySvg |
Produce assembly view SVGs for board visualization. |
convertCircuitJsonToPinoutSvg |
Build annotated pinout diagrams for boards and modules. |
convertCircuitJsonToSimulationGraphSvg |
Plot simulation experiment results as SVG graphs. |
convertCircuitJsonToSchematicSvg(circuitJson: AnyCircuitElement[], options?): string
Converts a schematic circuit description to an SVG string.
import { convertCircuitJsonToSchematicSvg } from 'circuit-to-svg'
const schematicSvg = convertCircuitJsonToSchematicSvg(circuitJson, {
includeVersion: true,
})widthandheight– dimensions of the output SVG. Defaults to1200x600.grid– enable a schematic grid (true) or configure cell size and labels.labeledPoints– annotate specific coordinates with helper labels.colorOverrides– override portions of the schematic color palette.includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.
convertCircuitJsonToPcbSvg(circuitJson: AnyCircuitElement[], options?): string
Converts a PCB layout description to an SVG string.
import { convertCircuitJsonToPcbSvg } from 'circuit-to-svg'
const pcbSvg = convertCircuitJsonToPcbSvg(circuitJson, {
matchBoardAspectRatio: true,
backgroundColor: '#1e1e1e',
})widthandheight– dimensions of the output SVG. Defaults to800x600.matchBoardAspectRatio– iftrue, adjust the SVG dimensions so the resulting aspect ratio matches thepcb_boardfound in the circuit JSON.backgroundColor– fill color for the SVG background rectangle. Defaults to"#000".drawPaddingOutsideBoard– iffalse, omit the board outline and extra padding around it. Defaults totrue.shouldDrawErrors– iftrue, display visual error indicators (red diamonds with text) for anypcb_trace_errorelements in the circuit JSON. Defaults tofalse.includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.
Converts circuit JSON into an assembly view of the board and components.
import { convertCircuitJsonToAssemblySvg } from 'circuit-to-svg'
const assemblySvg = convertCircuitJsonToAssemblySvg(circuitJson, {
includeVersion: false,
})widthandheight– dimensions of the output SVG. Defaults to800x600.includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.
Generates pinout diagrams that call out ports, pads, and holes for boards or modules.
import { convertCircuitJsonToPinoutSvg } from 'circuit-to-svg'
const pinoutSvg = convertCircuitJsonToPinoutSvg(circuitJson)widthandheight– dimensions of the output SVG. Defaults to800x600.includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.
Overlays simulation results directly on the rendered schematic for easy debugging.
import { convertCircuitJsonToSchematicSimulationSvg } from 'circuit-to-svg'
const schematicSimulationSvg = convertCircuitJsonToSchematicSimulationSvg({
circuitJson,
simulation_experiment_id: 'simulation-experiment-id',
simulation_transient_voltage_graph_ids: ['transient-graph-id'],
schematicHeightRatio: 0.6,
})widthandheight– overall SVG dimensions. Defaults to1200x1200.schematicHeightRatio– ratio of the SVG dedicated to the schematic view. Defaults to0.55.schematicOptions– forward additional schematic rendering options (exceptwidth,height, andincludeVersion).includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.
Creates standalone graphs for circuit simulation experiments.
import { convertCircuitJsonToSimulationGraphSvg } from 'circuit-to-svg'
const simulationGraphSvg = convertCircuitJsonToSimulationGraphSvg({
circuitJson,
simulation_experiment_id: 'simulation-experiment-id',
simulation_transient_voltage_graph_ids: ['transient-graph-id'],
})widthandheight– SVG dimensions for the graph. Defaults to1200x600.includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.
convertCircuitJsonToSolderPasteMask(circuitJson: AnyCircuitElement[], options: { layer: 'top' | 'bottom'; width?; height?; includeVersion? }): string
Produces top and bottom solder paste mask renderings suitable for stencil generation.
import { convertCircuitJsonToSolderPasteMask } from 'circuit-to-svg'
const solderPasteMaskSvg = convertCircuitJsonToSolderPasteMask(circuitJson, {
layer: 'top',
})layer–'top' | 'bottom', chooses which solder paste layer to render. Defaults to'top'.widthandheight– dimensions of the output SVG. Defaults to800x600.includeVersion– iftrue, add adata-circuit-to-svg-versionattribute to the root<svg>.