Expand description
§KiCad IPC RS
Async-first, pure-Rust IPC bindings for KiCad’s official API. Production-focused Rust API surface, typed models, and a blocking wrapper for sync callers.
§Why this crate?
| Capability | kicad-ipc-rs | Official Python bindings (kicad-python) | Official Rust bindings (kicad-rs) |
|---|---|---|---|
| Rust-native client API | ✅ Yes | ❌ Python package | ⚠️ Development preview |
| Async-first API design | ✅ KiCadClient | ⚠️ App-managed event-loop model | ⚠️ Development preview |
| Blocking support for sync apps | ✅ feature = "blocking" | ✅ Native Python sync usage | ⚠️ Development preview |
| Wrapped KiCad command coverage (current proto snapshot) | ✅ 56/56 command wrappers | Unknown | Unknown |
| Maintainer focus | ✅ This crate is actively maintained for Rust users | ✅ Official KiCad Python package | ⚠️ Preview status |
Evidence and references:
kicad-pythonpackage: https://gitlab.com/kicad/code/kicad-pythonkicad-rspackage (states “development preview with no docs yet”): https://gitlab.com/kicad/code/kicad-rs- Coverage matrix and runtime notes: https://github.com/Milind220/kicad-ipc-rs#kicad-v10-rc11-api-completion-matrix
§Quickstart (async)
use kicad_ipc_rs::KiCadClient;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), kicad_ipc_rs::KiCadError> {
let client = KiCadClient::connect().await?;
client.ping().await?;
let version = client.get_version().await?;
println!("KiCad: {}", version.full_version);
Ok(())
}§Quickstart (blocking)
use kicad_ipc_rs::KiCadClientBlocking;
let client = KiCadClientBlocking::connect()?;
let version = client.get_version()?;
println!("KiCad: {}", version.full_version);Architecture layers:
- transport
- envelope
- command builders
- high-level client
Re-exports§
pub use crate::client::ClientBuilder;pub use crate::client::KiCadClient;pub use crate::error::KiCadError;pub use crate::model::board::ArcStartMidEndNm;pub use crate::model::board::BoardEditorAppearanceSettings;pub use crate::model::board::BoardEnabledLayers;pub use crate::model::board::BoardFlipMode;pub use crate::model::board::BoardLayerClass;pub use crate::model::board::BoardLayerGraphicsDefault;pub use crate::model::board::BoardLayerInfo;pub use crate::model::board::BoardNet;pub use crate::model::board::BoardOriginKind;pub use crate::model::board::BoardStackup;pub use crate::model::board::BoardStackupDielectricProperties;pub use crate::model::board::BoardStackupLayer;pub use crate::model::board::BoardStackupLayerType;pub use crate::model::board::ColorRgba;pub use crate::model::board::DrcSeverity;pub use crate::model::board::GraphicsDefaults;pub use crate::model::board::InactiveLayerDisplayMode;pub use crate::model::board::NetClassBoardSettings;pub use crate::model::board::NetClassForNetEntry;pub use crate::model::board::NetClassInfo;pub use crate::model::board::NetClassType;pub use crate::model::board::NetColorDisplayMode;pub use crate::model::board::PadNetEntry;pub use crate::model::board::PadShapeAsPolygonEntry;pub use crate::model::board::PadstackPresenceEntry;pub use crate::model::board::PadstackPresenceState;pub use crate::model::board::PcbArc;pub use crate::model::board::PcbBoardGraphicShape;pub use crate::model::board::PcbBoardText;pub use crate::model::board::PcbBoardTextBox;pub use crate::model::board::PcbDimension;pub use crate::model::board::PcbField;pub use crate::model::board::PcbFootprint;pub use crate::model::board::PcbGroup;pub use crate::model::board::PcbItem;pub use crate::model::board::PcbPad;pub use crate::model::board::PcbPadType;pub use crate::model::board::PcbTrack;pub use crate::model::board::PcbUnknownItem;pub use crate::model::board::PcbVia;pub use crate::model::board::PcbViaLayers;pub use crate::model::board::PcbViaType;pub use crate::model::board::PcbZone;pub use crate::model::board::PcbZoneType;pub use crate::model::board::PolyLineNm;pub use crate::model::board::PolyLineNodeGeometryNm;pub use crate::model::board::PolygonWithHolesNm;pub use crate::model::board::RatsnestDisplayMode;pub use crate::model::board::Vector2Nm;pub use crate::model::common::CommitAction;pub use crate::model::common::CommitSession;pub use crate::model::common::DocumentSpecifier;pub use crate::model::common::DocumentType;pub use crate::model::common::EditorFrameType;pub use crate::model::common::ItemBoundingBox;pub use crate::model::common::ItemHitTestResult;pub use crate::model::common::MapMergeMode;pub use crate::model::common::PcbObjectTypeCode;pub use crate::model::common::RunActionStatus;pub use crate::model::common::SelectionItemDetail;pub use crate::model::common::SelectionSummary;pub use crate::model::common::SelectionTypeCount;pub use crate::model::common::TextAsShapesEntry;pub use crate::model::common::TextAttributesSpec;pub use crate::model::common::TextBoxSpec;pub use crate::model::common::TextExtents;pub use crate::model::common::TextHorizontalAlignment;pub use crate::model::common::TextObjectSpec;pub use crate::model::common::TextShape;pub use crate::model::common::TextShapeGeometry;pub use crate::model::common::TextSpec;pub use crate::model::common::TextVerticalAlignment;pub use crate::model::common::TitleBlockInfo;pub use crate::model::common::VersionInfo;
Modules§
- client
- High-level async client and request/response convenience methods.
- commands
- Low-level command payload builders.
- envelope
- Envelope helpers for command/response packing and unpacking.
- error
- Error types returned by this crate.
- model
- Stable data models used by typed client APIs.
- transport
- IPC transport implementation details.