kicad-ipc-rs/README.md

8.4 KiB

KiCad IPC API Rust

Ask DeepWiki

MIT-licensed Rust bindings for the KiCad IPC API.

Current Status

Early scaffold phase. Core architecture + step-by-step implementation plan:

  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/prompts/IPC_RUST_EXECUTION_PLAN.md
  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/proto/README.md

Roadmap

  1. Async-first layered client (v0.1.0)
  2. Full PCB read surface + trace write capability (v0.1.0)
  3. Blocking wrapper parity (v0.2.0)

Local Testing

  • CLI runbook: /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/docs/TEST_CLI.md

Runtime Compatibility Notes (Current Test Rig)

  • Last verified: 2026-02-20
  • KiCad version (kicad-ipc-cli version): 10.0.0 (10.0.0-rc1)

Commands wrapped in this crate but currently unhandled/unsupported by this KiCad build:

Command Runtime status Notes
RefreshEditor AS_UNHANDLED KiCad responds no handler available for request of type kiapi.common.commands.RefreshEditor.

Deferred manual/runtime verification (implemented after 2026-02-20 while user unavailable):

  • GetKiCadBinaryPath
  • GetPluginSettingsPath
  • SaveDocument
  • SaveCopyOfDocument
  • RevertDocument

KiCad v10 RC1.1 API Completion Matrix

Source of truth for this matrix:

  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/proto/common/commands/base_commands.proto
  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/proto/common/commands/editor_commands.proto
  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/proto/common/commands/project_commands.proto
  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/proto/board/board_commands.proto
  • /Users/milindsharma/Developer/kicad-oss/kicad-ipc-rust/proto/schematic/schematic_commands.proto

Legend:

  • Implemented = wrapped in current Rust client (src/client.rs).
  • Not yet = exists in proto, not wrapped yet.
  • Command messages only (request payloads); helper/response messages excluded.

Section Coverage

Section Proto Commands Implemented Coverage
Common (base) 6 6 100%
Common editor/document 23 18 78%
Project manager 5 3 60%
Board editor (PCB) 22 20 91%
Schematic editor (dedicated proto commands) 0 0 n/a
Total 56 47 84%

Common (base)

KiCad Command Status Rust API
Ping Implemented KiCadClient::ping
GetVersion Implemented KiCadClient::get_version
GetKiCadBinaryPath Implemented KiCadClient::get_kicad_binary_path_raw, KiCadClient::get_kicad_binary_path
GetTextExtents Implemented KiCadClient::get_text_extents_raw, KiCadClient::get_text_extents
GetTextAsShapes Implemented KiCadClient::get_text_as_shapes_raw, KiCadClient::get_text_as_shapes
GetPluginSettingsPath Implemented KiCadClient::get_plugin_settings_path_raw, KiCadClient::get_plugin_settings_path

Common editor/document

KiCad Command Status Rust API
RefreshEditor Implemented KiCadClient::refresh_editor
GetOpenDocuments Implemented KiCadClient::get_open_documents, KiCadClient::get_current_project_path, KiCadClient::has_open_board
SaveDocument Implemented KiCadClient::save_document_raw, KiCadClient::save_document
SaveCopyOfDocument Implemented KiCadClient::save_copy_of_document_raw, KiCadClient::save_copy_of_document
RevertDocument Implemented KiCadClient::revert_document_raw, KiCadClient::revert_document
RunAction Not yet -
BeginCommit Implemented KiCadClient::begin_commit_raw, KiCadClient::begin_commit
EndCommit Implemented KiCadClient::end_commit_raw, KiCadClient::end_commit
CreateItems Not yet -
GetItems Implemented KiCadClient::get_items_raw_by_type_codes, KiCadClient::get_items_by_type_codes, KiCadClient::get_items_details_by_type_codes, KiCadClient::get_all_pcb_items_raw, KiCadClient::get_all_pcb_items, KiCadClient::get_all_pcb_items_details, KiCadClient::get_pad_netlist
GetItemsById Implemented KiCadClient::get_items_by_id_raw, KiCadClient::get_items_by_id, KiCadClient::get_items_by_id_details
UpdateItems Not yet -
DeleteItems Not yet -
GetBoundingBox Implemented KiCadClient::get_item_bounding_boxes
GetSelection Implemented KiCadClient::get_selection_raw, KiCadClient::get_selection, KiCadClient::get_selection_summary, KiCadClient::get_selection_details
AddToSelection Implemented KiCadClient::add_to_selection_raw, KiCadClient::add_to_selection
RemoveFromSelection Implemented KiCadClient::remove_from_selection_raw, KiCadClient::remove_from_selection
ClearSelection Implemented KiCadClient::clear_selection_raw, KiCadClient::clear_selection
HitTest Implemented KiCadClient::hit_test_item
GetTitleBlockInfo Implemented KiCadClient::get_title_block_info
SaveDocumentToString Implemented KiCadClient::get_board_as_string
SaveSelectionToString Implemented KiCadClient::get_selection_as_string
ParseAndCreateItemsFromString Not yet -

Project manager

KiCad Command Status Rust API
GetNetClasses Implemented KiCadClient::get_net_classes_raw, KiCadClient::get_net_classes
SetNetClasses Not yet -
ExpandTextVariables Implemented KiCadClient::expand_text_variables_raw, KiCadClient::expand_text_variables
GetTextVariables Implemented KiCadClient::get_text_variables_raw, KiCadClient::get_text_variables
SetTextVariables Not yet -

Board editor (PCB)

KiCad Command Status Rust API
GetBoardStackup Implemented KiCadClient::get_board_stackup_raw, KiCadClient::get_board_stackup
UpdateBoardStackup Not yet -
GetBoardEnabledLayers Implemented KiCadClient::get_board_enabled_layers
SetBoardEnabledLayers Implemented KiCadClient::set_board_enabled_layers
GetGraphicsDefaults Implemented KiCadClient::get_graphics_defaults_raw, KiCadClient::get_graphics_defaults
GetBoardOrigin Implemented KiCadClient::get_board_origin
SetBoardOrigin Implemented KiCadClient::set_board_origin
GetNets Implemented KiCadClient::get_nets
GetItemsByNet Implemented KiCadClient::get_items_by_net_raw, KiCadClient::get_items_by_net
GetItemsByNetClass Implemented KiCadClient::get_items_by_net_class_raw, KiCadClient::get_items_by_net_class
GetNetClassForNets Implemented KiCadClient::get_netclass_for_nets_raw, KiCadClient::get_netclass_for_nets
RefillZones Implemented KiCadClient::refill_zones
GetPadShapeAsPolygon Implemented KiCadClient::get_pad_shape_as_polygon_raw, KiCadClient::get_pad_shape_as_polygon
CheckPadstackPresenceOnLayers Implemented KiCadClient::check_padstack_presence_on_layers_raw, KiCadClient::check_padstack_presence_on_layers
InjectDrcError Implemented KiCadClient::inject_drc_error_raw, KiCadClient::inject_drc_error
GetVisibleLayers Implemented KiCadClient::get_visible_layers
SetVisibleLayers Implemented KiCadClient::set_visible_layers
GetActiveLayer Implemented KiCadClient::get_active_layer
SetActiveLayer Implemented KiCadClient::set_active_layer
GetBoardEditorAppearanceSettings Implemented KiCadClient::get_board_editor_appearance_settings_raw, KiCadClient::get_board_editor_appearance_settings
SetBoardEditorAppearanceSettings Implemented KiCadClient::set_board_editor_appearance_settings
InteractiveMoveItems Not yet -

Schematic editor

Item Value
Dedicated commands in proto/schematic/schematic_commands.proto None in current proto snapshot
Coverage n/a

Symbol editor

Item Value
Dedicated symbol-editor command proto None in current snapshot
Current path Uses common editor/document commands via DocumentType::DOCTYPE_SYMBOL

Footprint editor

Item Value
Dedicated footprint-editor command proto None in current snapshot
Current path Uses common editor/document commands via DocumentType::DOCTYPE_FOOTPRINT