Saturday, November 22, 2025

EasyEDA Pro Format Specification (.epro)

 # EasyEDA Pro Format Specification (.epro)


## Reverse-engineered by claude.ai

---

## File Structure

`.epro` is a **ZIP archive** containing:

```
project.json              # Project metadata and device definitions
PCB/
  {uuid}.epcb            # PCB layout file(s)
FOOTPRINT/
  {uuid}.efoo            # Footprint definitions
SHEET/
  {uuid}.esch            # Schematic sheets (optional)
SYMBOL/
  {uuid}.esym            # Schematic symbols (optional)
INSTANCE/                 # (empty in PCB-only projects)
POUR/                     # Copper pour definitions
PANEL/                    # Panel layouts
BLOB/                     # Binary blobs
FONT/                     # Custom fonts
```

---

## project.json Structure

```json
{
  "schematics": {},
  "pcbs": {
    "{uuid}": "PCB Title"
  },
  "panels": {},
  "symbols": {},
  "footprints": {
    "{uuid}": {
      "title": "Footprint Name",
      "source": "library_source_uuid",
      "version": "version_hash",
      "type": 4,
      "desc": "",
      "tags": {"parent_tag": [], "child_tag": []},
      "custom_tags": ""
    }
  },
  "devices": {
    "{uuid}": {
      "title": "Part Name",
      "attributes": {
        "Supplier": "LCSC",
        "Supplier Part": "C12345",
        "Manufacturer": "...",
        "Footprint": "{footprint_uuid}",
        "Name": "Part Name",
        "Designator": "U?",
        "Add into BOM": "yes",
        "Convert to PCB": "yes",
        "Description": "",
        "3D Model": "{model_uuid}",
        "3D Model Title": "Model Name"
      },
      "description": "",
      "source": "library_source_uuid",
      "version": "version_hash"
    }
  },
  "boards": {},
  "config": {
    "title": "Project Title",
    "cbbProject": false,
    "defaultSheet": "",
    "editorVersion": "2.2.43.4"
  }
}
```

---

## PCB File Format (.epcb)

Each line is a **JSON array**. First element is the record type.

### Header Records

```
["DOCTYPE", "PCB", "1.8"]
["CANVAS", origin_x, origin_y, "mm"|"mil", width, height, grid_x, grid_y]
["LAYER", id, "CODE", "Description", type, "#color", visible, "#hover_color", flag]
["ACTIVE_LAYER", layer_id]
["RULE", "rule_id", "Name", enabled, [parameters...]]
```

### Layer IDs
| ID | Code | Description |
|----|------|-------------|
| 1 | TOP | Top Copper Layer |
| 2 | BOTTOM | Bottom Copper Layer |
| 3 | TOP_SILK | Top Silkscreen |
| 4 | BOT_SILK | Bottom Silkscreen |
| 5 | TOP_SOLDER_MASK | Top Solder Mask |
| 6 | BOT_SOLDER_MASK | Bottom Solder Mask |
| 7 | TOP_PASTE_MASK | Top Paste Mask |
| 8 | BOT_PASTE_MASK | Bottom Paste Mask |
| 11 | OUTLINE | Board Outline |
| 12 | MULTI | Multi-Layer (through-hole pads) |
| 13 | DOCUMENT | Documentation Layer |
| 48 | COMPONENT_SHAPE | 3D Component Shape |
| 49 | COMPONENT_MARKING | Component Marking |
| 50 | PIN_SOLDERING | Pin Soldering Layer |
| 51 | PIN_FLOATING | Pin Floating Layer |

### Trace/Wire Records

```
["LINE", "element_id", 0, "net_name", layer_id, x1, y1, x2, y2, width, flags]
```

Example:
```
["LINE", "e1", 0, "VCC", 1, 1495, 6140, 1495, 6440, 10, 0]
```

### Polygon/Shape Records

```
["POLY", "id", 0, "net", layer, width, [x1,y1,"L",x2,y2,...], flags]
```

For board outline:
```
["POLY", "e38", 0, "", 11, 10, [275.6, 7007.9, "L", 275.6, 7060, 2401.6, 7060, 2401.6, 5590.5, 275.6, 5590.5, 275.6, 7007.9], 0]
```

### Pad Records

```
["PAD", "id", 0, "net", layer, "pin_num", x, y, rotation, [hole], [pad], [...], offset, ...]
```

- `[hole]`: `["ROUND", diameter, diameter]` or `["SLOT", w, h]`
- `[pad]`: `["ELLIPSE", w, h]` or `["RECT", w, h, corner_radius]`

Example:
```
["PAD", "e38", 0, "", 12, "1", -300, -165.35, 0, ["ROUND", 32, 32], ["RECT", 63, 63, 0], [], -0.004, 0, 0, 1, 0, 2, 2, 0, 0, 0]
```

### Component Placement

```
["COMPONENT", "instance_id", 0, layer, x, y, rotation, {attributes}, flags]
```

Attributes object:
```json
{
  "Designator": "U1",
  "Add into BOM": "yes",
  "Unique ID": "gge...",
  "Name": "ATTINY84A-PU",
  "Supplier": "LCSC",
  "Supplier Part": "C145560",
  "Manufacturer": "MICROCHIP",
  "Footprint": "{footprint_uuid}",
  "Device": "{device_uuid}",
  "3D Model": "{model_uuid}",
  "3D Model Transform": "787.4,311.8104,0,0,0,0,0,0,-118.11",
  "3D Model Title": "..."
}
```

### Component Attributes

```
["ATTR", "id", 0, "parent_id", layer, x, y, "attr_name", "attr_value", visible, hidden, "font", size, ...]
```

### Pad-to-Net Assignment

```
["PAD_NET", "component_id", "pin_number", "net_name", "pad_element_id"]
```

### Fill/Circle Records

```
["FILL", "id", 0, "net", layer, width, flags, [shape], flags]
```

Shape can be:
- `["CIRCLE", cx, cy, radius]`
- `[["CIRCLE", cx, cy, radius]]` (nested array)

### Text/String Records

```
["STRING", "id", 0, layer, x, y, "text", "font_name", size, font_size, ...]
```

### Font Definition

```
["FONT", "text", "font_name", size, height, bold, italic, underline, ...]
```

---

## Footprint File Format (.efoo)

Similar structure to PCB but with relative coordinates centered on (0,0).

### Header
```
["DOCTYPE", "FOOTPRINT", "1.8"]
[...layer definitions...]
["ACTIVE_LAYER", 1]
[]  // Empty line separator
```

### Content
- `POLY` - Silkscreen outlines
- `PAD` - Pad definitions with pin numbers
- `FILL` - Pad/via markers
- `ATTR` - Footprint name, designator

---

## Coordinate System

- Units: mil (1 mil = 0.001 inch = 0.0254 mm) or mm
- Origin: Typically top-left or center depending on context
- Y-axis: Positive downward in EasyEDA
- Rotation: Degrees, counter-clockwise

---

## UUID Generation

UUIDs appear to be:
- 32-character hex strings (no dashes)
- Sometimes prefixed with letters like "gge" for element IDs
- Example: `a0aa170576c046e79025ad5dea61eb19`

---

## Notes

1. All coordinates are in the units specified by CANVAS
2. Net names connect traces/pads with the same net
3. Footprint UUIDs link components to their physical footprints
4. Device UUIDs link to BOM/ordering information
5. 3D Model UUIDs reference models in the EasyEDA library

No comments: