Repository navigation
Compatibility
| KiCad | File format number of the release | Status |
|---|---|---|
| older | no (version ...)
|
read best-effort with a warning, as format 20201115, as KiCad reads such a file |
| BZR builds of 2013-2014 | 3 | the lower end of the tested range (Run.KICAD_VERSION_MIN); 6 public boards; the layer names those builds wrote in Italian, Polish and French are understood |
| 4 | 4 | 19 public boards saved by KiCad 4 |
| 5 | 20171130 | 25 public boards saved by KiCad 5; KiCad 5 arcs (start = centre, angle), zones filled with segments only (fill_segments), net names written with the old overbar (~RESET~) |
| 6 | 20211014 | 25 public boards, among them development builds of 6 (formats 20201116 to 20210925, read as KiCad 6); featureTest/20a_format_kicad6, written by hand in KiCad 6's format |
| 7 | 20221018 | 25 public boards; the three example boards of Input/, tests/boards/synthetic and most of featureTest/, saved by KiCad 7 itself |
| 8 | 20240108 | 25 public boards; tests/boards/one_layer and featureTest/20c_format_kicad8, small hand-written files in KiCad 8's format |
| 9 | 20241229 | 25 public boards; tests/boards/six_layer and featureTest/20d_format_kicad9, likewise hand-written; per-via (tenting front back) is parsed; tracks and drawings left bare by the solder mask, (layers "F.Cu" "F.Mask") with an optional (solder_mask_margin ...), are read (in featureTest/08b_copper_graphics_nets) |
| 10 | 20260206 | the upper end of the tested range (Run.KICAD_VERSION_MAX); five hand-written feature boards (03b_vias_k10, 06_padstacks, 08b_copper_graphics_nets, 19b_skipped_items_k10, 20e_format_kicad10); net names stored directly on items and per-via (tenting (front yes) (back no)) are read |
| newer | above 20260206 | read best-effort with a warning; raise Run.KICAD_VERSION_MAX once checked. A bold text's thickness after format 20260826 is read as its base pen, drawn 1.6 times as wide, as KiCad's development version does |
The 150 public boards (25 for each release from 4 to 9, six of the "KiCad 4" ones saved by the builds before it) were downloaded for testing and are not kept
in the repository; every complete one of them runs, and the Verifier passes on all but one, whose file
places two pin headers of different nets on the same spot. One more KiCad 5 file is cut short (it
ends inside a pad) and is refused with a message that says so, as KiCad refuses it. Every rule that depends on the version
is in one file, kese/s1_read/parse_kicad_version.py, and follows KiCad's own board parser:
| Rule | Files it applies to |
|---|---|
copper layers are read by their place in the leading run of copper layers (first = F.Cu, last = B.Cu, inner ones In1.Cu, In2.Cu, ... unless already named so) |
every version; KiCad 3 to 5 files whose layers the user renamed get a warning that lists them |
| a text with no size is 1.524 mm (60 mils) | KiCad 4 |
a solder_mask_margin of 0 means "use the board's value" |
up to format 20240201 (KiCad 8) |
an overbar is text between two ~, converted to ~{...}
|
before format 20210606 (KiCad 5 and early 6) |
a zone fill is drawn with a pen of min_thickness
|
before format 20250210, unless the zone says (filled_areas_thickness no)
|
a zone with only fill_segments is filled with those segments |
KiCad 4 and 5 |
| via tenting and protection off unless stated | before format 20250228 |
| a bold text's thickness is its base pen | after format 20260826 |
What is read from the file is listed in Checks, Errors And Warnings;
KiCad itself is not needed, only the .kicad_pcb file. Footprints are read from the board file
(KiCad embeds them), so libraries are not needed either.
| Board feature | Support |
|---|---|
| Copper layers | boards with 2, 4, 6 and 8 declared copper layers are in the repository (one of them single-sided: tracks only on F.Cu, and on B.Cu only its two through-hole pads); more than 8 are modelled with a warning; F.Cu and B.Cu must be declared. copper layers are read as KiCad reads them, by their place in the list: the first is F.Cu, the last B.Cu, and the ones between In1.Cu, In2.Cu, ... unless already named so; a file whose copper layers the user renamed ((0 TOP_L1.Sig mixed), (1 GND.Cu power)) gets a warning that lists the names; a signal-typed User.n layer after the copper is not copper |
| Stack-up from Board Setup | thickness, type, material, εr, tanδ per dielectric; copper thickness per layer; mask thickness; mask and silk colours; copper finish; edge plating and castellated pads flags |
| Tracks, arc tracks, vias (through, blind, buried, micro) | yes; "remove unused layers" with KiCad 7+'s zone_layer_connections, and KiCad 10's start_end_only; a track the solder mask leaves bare (KiCad 9 and later) opens the mask over itself, grown by its own mask margin or the board's pad-to-mask clearance |
| Pads: circle, rect, oval, roundrect, trapezoid, custom | yes; round and oval drills, drill offsets (which move the copper, not the hole), per-pad mask margins; chamfered corners; copper rings on non-plated holes where KiCad flashes them; "remove unused layers" on through-hole pads |
| Zones | stored fills only (fill in KiCad first); rule areas skipped; KiCad 5 fills drawn with a pen of min_thickness grown by half of it, as KiCad does on reading |
| Graphics: line, arc, circle, rect, polygon (with arc segments), Bézier, ellipse and elliptical arc (KiCad's development version) | on copper, mask and silk layers; outline from Edge.Cuts; rectangles with rounded corners (KiCad 10), on every layer and on Edge.Cuts; copper drawings the mask leaves bare (KiCad 9 and later) open it as tracks do |
Text: gr_text, fp_text, footprint properties |
KiCad's stroke font and layout; markup drawn as KiCad draws it (~{overbar}, ^{superscript}, _{subscript}, nested); the pen KiCad uses when the file gives none (a fifth of the width for bold, an eighth otherwise), and never more than a quarter of the smaller of width and height; knockout text; TrueType faces from the glyphs KiCad saves with them (render_cache), else with the stroke font |
| Text boxes, dimensions, images, groups, tables, generated items; grid items, drill charts and drill maps (KiCad's development version) | skipped; counted when they sit on a copper, silk or mask layer (text boxes, dimensions) or at the top level of the file (images, groups, tables, generated items, grid items, drill charts, drill maps), otherwise left out without a count. For groups and generated items (such as length-tuning patterns) only the record itself is skipped: the tracks, footprints and graphics they hold are read as usual |
| Footprint 3D models | skipped (bare board) |
| Padstacks (KiCad 9 and later: another pad or via shape on the inner layers or on the back) | yes: front / inner / back and custom (per layer) modes; each copper layer gets its own pad shape or via size; the back mask opening follows the back shape |
| Backdrills, tertiary drills, counterbores and countersinks of pads and vias; covered, plugged, capped and filled vias, also when the board setup makes them so (KiCad 10) | not modelled: the hole is drilled and plated through its whole span and left open; counted under skipped in report.txt, with a warning |
| Item kinds KESE does not know | skipped; counted under skipped in report.txt as <kind> items (unknown to KESE), with a warning |
| Hatched fills of graphics (KiCad 10) | not modelled: the shape is drawn as its outline only |
Edge connector flag of Board Setup ((edge_connector yes) or bevelled) |
not read: the fingers are the pads they are, and a bevelled edge stays square |
| Rigid-flex, multiple stack-up regions | not modelled |
| Format | What is in it | Units | Written by |
|---|---|---|---|
| GLB (binary glTF 2.0) | one mesh per part, PBR materials, vertex normals, bufferView targets |
Run.UNITS (viewers expect m) |
KESE (kese/s7_write/glb.py) |
| STEP AP214 | one named shape per part whose role is in Run.STEP_WRITE_ROLES: the part's closed solids from stage 6, one per separate body, with planar faces (curves are polygons, as in the meshes), or with Run.STEP_EXACT_ARCS circular arcs (CIRCLE) and cylindrical walls (CYLINDRICAL_SURFACE) where the outline is round; mask and silk off by default |
Run.UNITS: the file declares millimetres or metres |
KESE (kese/s7_write/step.py) |
| STL (binary) | one file per part | Run.UNITS |
KESE (kese/s7_write/stl.py) |
| OBJ + MTL | one object per part, normals, colours | Run.UNITS |
KESE |
Visual mode writes GLB and OBJ only.
None of these imports has been tried with KESE output yet: the routes follow each tool's
documented import formats and the presets in parameters/run.py, and are to be confirmed.
Research underway.
| Tool | Route | Notes |
|---|---|---|
| Ansys HFSS | STEP, mm, KiCad origin (--for hfss) |
one solid per net and dielectric to assign materials and ports |
| CST Studio Suite | STEP, plus STL per part (--for cst) |
|
| openEMS / CSXCAD | STL per part, mm (--for openems) with materials.json
|
openEMS Workflow |
| COMSOL, FEKO | STEP, mm | |
| FreeCAD, Fusion, SolidWorks, Onshape | STEP | vias and round pads are faceted, as in the meshes |
| Blender | GLB or OBJ (visual mode for renders) | |
<model-viewer>, three.js |
GLB, m, centred (--for viewer) |
the visual-mode skin is made to avoid z-fighting (Output Modes) |
| Thermal / FEA tools reading STL (CalculiX, Elmer with a mesher) | STL per part, mm | closed solids per part (a part can hold several separate bodies); mesh them with the tool's own mesher |
| Version | |
|---|---|
| Python | 3.12 or later with the pinned versions (numpy 2.5.3 requires it); 3.11 with the packages installed unpinned, as requirements.txt describes, or through pyproject.toml (requires-python >= 3.11, not tested); tested on 3.13 |
numpy 2.5.3, shapely 2.2.0, mapbox_earcut 2.1.0 |
the versions in requirements.txt
|
cadquery-ocp 7.9.3.1 or later below 8.0 |
optional, for the tests only: they read STEP files back with OpenCascade, and skip that check without it |
gltf_validator (Khronos, command line) |
optional; used by the Verifier when on the PATH |
Operating systems: anything the packages above run on. Tested on Linux.
| Previous | Next |
|---|---|
| Project Output Organization | openEMS Workflow |
Code and documentation: GNU GPL v3 or later, including material derived from KiCad · Font data: KiCad newstroke notices (see License) · Repository
Start Here
Working Principle
Features
Reference
- Parameter Reference
- Checks, Errors And Warnings
- Material Properties
- Project Output Organization
- KiCad And Solver Compatibility
- openEMS Workflow
Research And Community