Migrer ses scripts pcbnew vers l'API IPC avant KiCad 11

Publié le 18 octobre 2026 par leZ

pcbnew sera supprimé dans KiCad 11 : tableau de correspondance pcbnew → kipy, différences clés et méthode pour porter vos scripts Python KiCad.

Les bindings Python pcbnew (SWIG) sont dépréciés depuis KiCad 9, et la documentation officielle de KiCad indique que leur suppression est prévue pour KiCad 11. Tout script qui commence par import pcbnew devra alors passer par l’API IPC et son client Python, kipy. Ce guide rassemble les correspondances vérifiées sur les tutoriels du site, pour porter un script sans tâtonner.

Ce qui change vraiment

pcbnew API IPC (kipy)
Où tourne le script Dans le process de KiCad, ou avec le Python fourni avec KiCad Dans n’importe quel Python, qui dialogue avec KiCad par socket
Installation Livré avec KiCad pip install kicad-python
KiCad doit être ouvert Non (en headless, LoadBoard suffit) Oui, ou démarré en headless par kipy (KiCad 11)
Modifier un objet Effet immédiat Modifier la copie locale, puis board.update_items(...)
Créer un objet board.Add(item) board.create_items(item)
Unités FromMM() / ToMM() from_mm() / to_mm() (nanomètres)

Le point le plus déroutant : avec kipy, les objets lus sont des copies. Changer fp.position ne fait rien tant que vous n’appelez pas board.update_items(fp).

Tableau de correspondance

Tâche pcbnew kipy
Board ouverte board = pcbnew.GetBoard() board = KiCad().get_board()
Enregistrer pcbnew.SaveBoard(path, board) board.save()
Trouver un footprint board.FindFootprintByReference("U1") next(f for f in board.get_footprints() if f.reference_field.text.value == "U1")
Position fp.SetPosition(VECTOR2I(FromMM(30), FromMM(20))) fp.position = Vector2.from_xy_mm(30, 20)
Orientation fp.SetOrientationDegrees(90) fp.orientation = Angle.from_degrees(90)
Appliquer les changements (immédiat) board.update_items(fp)
Basculer en face arrière fp.Flip(fp.GetPosition(), True) board.flip_items(fp)
Piste PCB_TRACK(board) + board.Add(track) Track() + board.create_items(track)
Via PCB_VIA(board), SetWidth(via.TopLayer(), w), SetDrill(d) Via(), via.diameter = w, via.drill_diameter = d
Couche pcbnew.F_Cu board.get_layer_by_name("F.Cu")
Net board.FindNet("GND") Net(name="GND")
Zone ZONE(board) + contour SHAPE_POLY_SET Zone() + zone.outline = PolygonWithHoles
Listes board.GetFootprints(), board.Zones(), board.GetTracks() get_footprints(), get_zones(), get_tracks(), get_vias()
Export Gerber PLOT_CONTROLLER(board) board.export_gerbers(...) (KiCad 11 + kicad-python 0.9)
Redessiner pcbnew.Refresh() (automatique)

Chaque ligne est détaillée, avec les deux versions côte à côte, dans le tutoriel correspondant du site : positionner un footprint, créer une piste, créer une via, créer une zone, exporter les Gerber.

Exemple : le même script dans les deux API

Déplacer et tourner U1, avec pcbnew :

import pcbnew
from pcbnew import VECTOR2I, FromMM

board = pcbnew.GetBoard()
fp = board.FindFootprintByReference("U1")
fp.SetPosition(VECTOR2I(FromMM(30), FromMM(20)))
fp.SetOrientationDegrees(90)
pcbnew.Refresh()

La même chose avec kipy :

from kipy import KiCad
from kipy.geometry import Angle, Vector2

board = KiCad().get_board()
fp = next(f for f in board.get_footprints() if f.reference_field.text.value == "U1")
fp.position = Vector2.from_xy_mm(30, 20)
fp.orientation = Angle.from_degrees(90)
board.update_items(fp)

Méthode de migration conseillée

  1. Inventorier : cherchez dans vos scripts tous les appels pcbnew. et board. pour savoir ce qu’il faut porter.
  2. Isoler l’accès à la board dans un seul module (lecture des footprints, création des pistes…) : c’est le seul endroit à réécrire.
  3. Porter ligne par ligne avec le tableau ci-dessus, sans oublier les update_items() et create_items().
  4. Comparer : lancez l’ancienne et la nouvelle version sur une copie de la même board, puis comparez les fichiers ou lancez le DRC avec kicad-cli.

Avant tout, activez l’API IPC dans les préférences de KiCad : elle est désactivée par défaut.

Pour aller plus loin

Les deux API coexistent dans KiCad 9 et 10 : vous pouvez migrer progressivement, script par script, sans attendre KiCad 11. Chaque tutoriel du site a un sélecteur en haut de page pour comparer les deux versions.