# 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:
Post a Comment