Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
    • Switch to GitLab Next
  • Sign in / Register
  • kicad kicad
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 1,534
    • Issues 1,534
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 48
    • Merge requests 48
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • KiCad
  • KiCad Source Code
  • kicadkicad
  • Issues
  • #7134
Closed
Open
Created Jan 15, 2021 by Jan Mrázek@yaqwsxContributor

Feature proposal: Export all the KiCAD internals to the Python API and let the community build stable API

Description

First of all, I would like to thank all of you, KiCAD's developers, for your work. KiCAD is amazing. What also makes KiCAD amazing is the broad community of power users, that use KICAD Python API to implement plugins. This is a really nice feature of KiCAD which makes it really powerful. However, the current Python API is somewhat messy:

  • it is a 1:1 export of the internal KiCAD structure, thus it is not stable
  • it is not complete - some parts of KiCAD are exposed, some of them are not. Currently, it is hard for me to tell what is the key to being exported.

There are "rumors" (in issues, on the IRC channel, on the KiCAD's Discourse, etc.) that the core developers would like to introduce a nice, stable Python API without these problems. I, as one of the people actively using the API, would welcome such an option. A lot of resources point that this is/was planned to v6. However, there is already a feature freeze and no such API is present.

I understand there are tasks with higher priority, thus there is not enough manpower for Python API. However, currently, the API is not in the best shape: e.g., compared to v5 some of the features gone missing (e.g., setting board parameters), or some of them have rather poor support (DRC).

Therefore, I would like to propose the following:

  • would it be possible to provide SWIG export of all the KiCAD internals (including pcbnew, eeschema, project management) for v6?
  • Then, the community could build a stable Python library on top of these exports. It could be a separate project, a sandbox to test and experiment. And maybe it can become a de-facto standard.

My proposal is similar to this one.

I am worried that if nothing happens with the API before v6 release, the API will be stuck in a "void" at least before v7 release (which will probably take several years). This could harm and discourage the power-user community around KiCAD which has formed in the last few years and thus KiCAD would lose one of its appealing aspects. Having a full or near-full export would give the community something to work with. Note that this proposal does not prevent from actually building a nice stable API guaranteed by the KiCAD developers for v7.

PS: I have never worked with SWIG, so I am not sure if my proposal is technically possible. (I have only experiences with PyBind11).

Steps to reproduce

This a feature proposal, there are no steps to reproduce

KiCad Version

Application: Pcbnew

Version: 5.99.0-unknown-2b9f7d6150~106~ubuntu20.04.1, release build

Libraries:
	wxWidgets 3.0.4
	libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3

Platform: Linux 5.4.0-59-generic x86_64, 64 bit, Little endian, wxGTK, regolith, x11

Build Info:
	Date: Jan  4 2021 10:19:33
	wxWidgets: 3.0.4 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
	Boost: 1.71.0
	OCC: 7.3.0
	Curl: 7.68.0
	ngspice: 31
	Compiler: GCC 9.3.0 with C++ ABI 1013

Build settings:
	KICAD_SCRIPTING=ON
	KICAD_SCRIPTING_MODULES=ON
	KICAD_SCRIPTING_PYTHON3=ON
	KICAD_SCRIPTING_WXPYTHON=ON
	KICAD_SCRIPTING_WXPYTHON_PHOENIX=ON
	KICAD_SCRIPTING_ACTION_MENU=ON
	KICAD_USE_OCC=ON
	KICAD_SPICE=ON
Edited Jan 15, 2021 by Jan Mrázek
Assignee
Assign to
Time tracking