KiCadSharp.Protos 0.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package KiCadSharp.Protos --version 0.1.0
                    
NuGet\Install-Package KiCadSharp.Protos -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="KiCadSharp.Protos" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="KiCadSharp.Protos" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="KiCadSharp.Protos" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add KiCadSharp.Protos --version 0.1.0
                    
#r "nuget: KiCadSharp.Protos, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package KiCadSharp.Protos@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=KiCadSharp.Protos&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=KiCadSharp.Protos&version=0.1.0
                    
Install as a Cake Tool

KiCadSharp

A .NET client for KiCad, plus the kicadsharp command-line tool.

Package What it is
KiCadSharp Talks to a running KiCad over its nng IPC API to read and edit boards, schematics and project settings, and reads the on-disk s-expression formats (symbol and footprint libraries, design rules).
KiCadSharp.Protos The generated C# message types for KiCad's IPC API (Kiapi.*). Its own package because those types appear in KiCadSharp's public surface, so consumers have to be able to name them.
KiCadSharp.Cli A dotnet tool, installed as kicadsharp, for working with KiCad s-expression files from a shell.
dotnet add package KiCadSharp
dotnet tool install --global KiCadSharp.Cli

Why these keep the Sharp suffix

This repository was split out of danielmeza/kicad-ultra alongside danielmeza/sexpressions. That sibling was renamed on the way out — SExpressionSharp became SExpressions — and these packages were deliberately not.

The suffix is doing real work here. KiCadSharp reads as what it is: a third-party .NET client for somebody else's application. A bare KiCad.* prefix would read as something the KiCad project publishes, which it is not, and would be trading on their trademark to say so. kicadsharp stays the tool command for the same reason.

S-expressions, by contrast, are nobody's product. There was nothing for the suffix to disambiguate, so the generic half of the split got the generic name.

Recorded here so the asymmetry is not mistaken for an oversight and re-litigated later.

The KiCad .proto definitions

KiCadSharp.Protos compiles 12 .proto files from KiCad's api/proto. They are vendored under protos/ and pinned by protos/KICAD_PIN to a KiCad release tag — never a branch, because the generated client speaks one KiCad version's wire format and a moving branch would desynchronise it silently.

Currently pinned to KiCad 10.0.6 (caf7377e9cb6fa1535ec3596dcb8c99bf44a996e).

They used to arrive through a submodules/kicad git submodule pointed at the full KiCad source tree. Measured, at the same tag:

Cost to obtain the .proto files
Submodule, git clone --depth 1 --branch 10.0.6 1.4 GB on disk (248 MB .git + 1.1 GB working tree), 18,347 files, 18.7 s
Sparse checkout of api/proto only 3.5 MB, 2.2 s — but actions/checkout does a plain clone for submodules, so CI pays the full 1.4 GB anyway
Vendored (this repo) 128 KB, 12 files, already present — no fetch, builds offline

Vendoring wins on the numbers and loses nothing, because the pin is enforced rather than trusted:

scripts/sync-protos.sh            # re-fetch protos/ from the pinned tag
scripts/sync-protos.sh --check    # fail if protos/ has drifted from the pin  (runs in CI)

--check also fails if the upstream tag itself has been moved to a different commit. Both use a blobless sparse clone, so the check costs about 3 MB, not 1.4 GB.

To move to a newer KiCad: edit both lines of protos/KICAD_PIN, run scripts/sync-protos.sh, and commit the result.

Building

dotnet build KiCadSharp.slnx -c Release
dotnet test  KiCadSharp.slnx -c Release

Developing against local SExpressions sources

KiCadSharp and KiCadSharp.Cli consume SExpressions as a PackageReference, not a project reference or a submodule. To build against an unreleased local checkout of it:

scripts/use-local-libs.sh ../sexpressions
dotnet build KiCadSharp.slnx -c Release -p:SExpressionsVersion=0.1.0-local.<stamp>

# to pack too, stamp this repo's own packages with the same prerelease version:
dotnet pack KiCadSharp.slnx -c Release -p:SExpressionsVersion=0.1.0-local.<stamp> -p:Version=0.1.0-local.<stamp>

pack needs both properties, and that is NuGet being right rather than a workaround: a stable 0.1.0 KiCadSharp may not declare a prerelease SExpressions dependency (NU5104). While the dependency is a local prerelease, these packages are prereleases too.

The script packs SExpressions at a distinct -local.<timestamp> version into local-packages/, a git-ignored folder already registered as a package source in NuGet.config. The distinct version is the point: restore can never silently fall back to, or prefer, the published package. Omit the property to go back to the released one.

There is deliberately no "swap to ProjectReference" switch. Consuming the real .nupkg is what proves the package works, and the package is the thing that actually breaks.

License

MIT — see LICENSE.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on KiCadSharp.Protos:

Package Downloads
KiCadSharp

A .NET client for KiCad. Talks to a running KiCad over its nng IPC API to read and edit boards and project settings, and reads the on-disk s-expression symbol and footprint formats through SExpressions. The schematic side of KiCad's IPC API does not answer on KiCad 10; see the README.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.0 292 9/22/2026
0.3.1 216 9/21/2026
0.3.0 96 9/21/2026
0.2.0 268 9/9/2026
0.1.1 349 9/7/2026
0.1.0 192 9/7/2026