A TypeScript library for converting between DSN files and Circuit JSON format.
dsn-converter is a powerful tool that enables bidirectional conversion between Specctr DSN format and Circuit JSON. This makes it possible to:
- Parse Specctra DSN files into a workable JSON format
- Convert Circuit JSON back into KiCad-compatible DSN files
- Visualize PCB designs using SVG rendering
# Using bun
bun add dsn-converter
# Using npm
npm install dsn-converter
import { parseDsnToCircuitJson } from "dsn-converter"
// Read DSN file
const dsnContent = await Bun.file("your-design.dsn").text()
// Convert to Circuit JSON
const circuitJson = parseDsnToCircuitJson(dsnContent)
// Save the output
await Bun.write("output.circuit.json", JSON.stringify(circuitJson, null, 2))
import { circuitJsonToDsnString } from "dsn-converter"
// Convert Circuit JSON to DSN format
const dsnString = circuitJsonToDsnString(circuitJson)
// Save the DSN file
await Bun.write("output.dsn", dsnString)
import {
parseDsnToDsnJson,
convertDsnJsonToCircuitJson,
stringifyDsnJson
} from "dsn-converter"
// Parse DSN to intermediate JSON format
const dsnJson = parseDsnToDsnJson(dsnString)
// Modify the DSN JSON structure
dsnJson.placement.components.push({
name: "NewComponent",
place: {
refdes: "U1",
x: 1000,
y: 1000,
side: "front",
rotation: 0
}
})
// Convert to Circuit JSON
const circuitJson = convertDsnJsonToCircuitJson(dsnJson)
// Or convert back to DSN string
const modifiedDsnString = stringifyDsnJson(dsnJson)
import { convertCircuitJsonToDsnJson } from "dsn-converter"
// Create Circuit JSON elements
const elements = [
{
type: "pcb_smtpad",
pcb_smtpad_id: "pad1",
pcb_component_id: "R1",
shape: "rect",
x: 0,
y: 0,
width: 0.5,
height: 0.6,
layer: "top"
},
// Add more elements...
]
// Convert to DSN format
const dsnJson = convertCircuitJsonToDsnJson(elements)
The library provides comprehensive TypeScript types:
import type {
DsnPcb,
Component,
Padstack,
Network,
Wire
} from "dsn-converter"
// Use types for type-safe DSN manipulation
const component: Component = {
name: "R1",
place: {
refdes: "R1",
x: 1000,
y: 1000,
side: "front",
rotation: 0
}
}
-
Complete DSN Support: Handles all major DSN file components including:
- Component placement
- PCB layers
- Traces and wiring
- Padstacks and SMT pads
- Net definitions
- Board boundaries
-
Accurate Conversions: Maintains precise measurements and positions during conversion
-
Type Safety: Full TypeScript support with comprehensive type definitions
The DSN format is represented as a structured JSON with the following main sections:
parser
: Contains file metadataresolution
: Defines measurement unitsstructure
: Describes board layers and rulesplacement
: Component positionslibrary
: Component and padstack definitionsnetwork
: Net connectionswiring
: Trace routing
The Circuit JSON format includes:
- PCB traces
- SMT pads
- Component definitions
- Layer information
- Routing data
# Install dependencies
bun install
# Run tests
bun test
# Run specific test file
bun test tests/dsn-pcb/parse-dsn-pcb.test.ts