potatobeanradio/circuitRF

Lightweight cross-platform RF circuit + electromagnetic simulator. DC, S-parameters, harmonic balance, loadpull. Also supports 2D and 3D layout and design and electromagnetic MoM, FEM, FDTD + thermal FEM.

C#

188

1,159 commits

updated Oct 5, 2026

See the code

See what people are saying

README

circuitRF

A lightweight, cross-platform EDA tool for RF design — for the RF community, by the RF community.

License: MIT .NET 10 Platforms UI: Avalonia

circuitRF is a full-featured EDA tool for RF and microwave design — schematic capture + nonlinear analysis, layout and EM and thermal simulation in one cross-platform application. DC, S-parameter and harmonic-balance analyses with first-class loadpull / sourcepull, over designs from a handful of components to hierarchical, multi-port ones with thousands. A layout editor for PCB and MMIC work, with substrate-aware microstrip components, schematic↔layout generation, DRC and LVS, and two-way interchange with Gerber + Excellon, GDSII, DXF and .kicad_pcb boards. A 2.5D electromagnetic solver over the layout's own substrate stackup. 3D editor for FEM / FDTD EM solutions (using Palace / openEMS), and a built-in FEM thermal solver. Supports command line and MCP.

📖 Read the user documentation online

circuitRF is for RF practitioners or researchers who can't justify the cost of traditional tools (or find those tools too heavy for a quick investigation): power-amplifier, LNA, and mixer designers; RF EDA and device-modeling engineers; academic researchers; and capable hobbyists. It is written in C# / .NET 10, with an Avalonia 12 GUI rendered through SkiaSharp, and it was built largely AI-assisted (see AI-assisted development).

Status: 1.0.5. Please file issues.

Features

  • schematic + circuit simulation (DC, S-param, HB, Loadpull)
  • 2D layout editor (imports and exports Gerber, GDSII, DXF, .kicad_pcb)
  • 3D geometry editor (imports / exports Step)
  • hierarchy for all cell view types (including 3D)
  • support for PDKs
  • bondwire geometry editor and mutual inductance calculator
  • 2.5D MoM
  • 3D FEM and FDTD (using Palace and openEMS)
  • 3D FEM thermal solver
  • command line and MCP server
  • Documentation with examples

What is not in it yet:

the open green fields.


Screenshots

Schematic editor

circuitRF schematic editor

Build hierarchical RF circuits on a virtualized canvas: drag from the palette, wire, label nets, set parameters and sweeps, and Run.

Data Display — loadpull contours

circuitRF loadpull contours on a Smith chart

Plot S-parameters, spectra, power sweeps, and loadpull contours; overlay measured Touchstone/.spl/ .lpcwave data on simulated results; plot EM results from MoM, FEM and FDTD solvers (including radiation patterns)

Layout editor

circuitRF layout editor

Draw and edit physical geometry on a technology-defined layer stack: microstrip components generated from their schematic parameters, hierarchy with arrays, and export to GDSII, DXF and Gerber. MoM EM solver.

3D editor

circuitRF 3D editor Draw and edit in 3D and send to FEM or FDTD EM solvers or the built-in FEM thermal solver


Download

circuitRF 1.0.5 is the current stable release. Beta versions are published as GitHub pre-releases, and Settings ▸ Security & Permissions ▸ Include beta releases is what puts them on your update channel. It is ticked by default — untick it to receive stable releases only.

Linux — unpack and run install.sh. It writes only inside ~/.local, puts circuitrf on your PATH and registers the menu entry and file types; --uninstall removes it and leaves your work alone.

tar xzf circuitRF-1.0.5-linux-x64.tar.gz
./circuitRF-1.0.5/install.sh

Installing for everyone on the machine? The Windows .msi files without -user, and the .deb files, are on the releases page. They need administrator rights, so they cannot update themselves — they tell you when a new version is out instead.

Automatic updates can be turned off in Settings ▸ Security & Permissions. Building the installers yourself: BUILDING.md.


Contributors are welcome — especially RF domain experts

circuitRF is meant to be community-driven, by and for the RF engineering community. We value RF domain knowledge as much as software experience. If you design power amplifiers, LNAs, or mixers; build RF EDA tooling; do device modeling; or develop transistor technology (GaN-on-SiC, GaN-on-Si, LDMOS, …), you are exactly who this project needs — and circuitRF is a great place to use AI to build the simulation features you want.

You do not need to be a professional software developer. If you've scripted in MATLAB or Python, you have enough to start. Pair yourself with Claude Code (or your AI assistant of choice) and let it do the heavy lifting on the C#.


Architecture

circuitRF is built in strictly one-directional layers, and nothing below the UI knows the UI exists. The layers, the engines, the enforced framework firewall and the source tree are described in ARCHITECTURE.md.


Getting started

You can help develop circuitRF using Windows, macOS, or Linux.

1. Install the tools

ToolWhyGet it
.NET 10 SDKbuilds and runs circuitRFhttps://dotnet.microsoft.com/download/dotnet/10.0
Gitclone the reposhttps://git-scm.com/downloads
Visual Studio Codeedit + debug (lightweight, cross-platform)https://code.visualstudio.com/
VS Code C# Dev Kit extensionC# editing/IntelliSense/debug in VS Codehttps://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit

Verify the SDK is installed:

dotnet --version      # should print 10.x.x

2. Clone circuitRF

# cd to a working folder, then:
git clone https://github.com/potatobeanradio/circuitRF.git

3. Build and run

cd circuitRF

dotnet build      # restores packages + compiles everything
dotnet run --project src/Ui # from the circuitRF/ directory:

4. Optional — testing & building the device workers

dotnet test       # optional 10-15 min of circuitRF development tests

A handful of loadpull tests read lab-measured .spl/.lpcwave files that are third-party data held under terms that do not permit redistribution, so they have never been committed here. On a fresh clone those tests report as Skipped, naming the path they wanted — they never fail, and a fresh clone is green without them. Your own measurements in either format, dropped at those paths, exercise the same code.

To build the device workers: Needed only for PDKs whose device models ship as compiled libraries. dotnet build builds the workers itself if a C compiler is on PATH — with none, it warns and carries on, and such a kit refuses at Run.

Install one, then rebuild:

winget install zig.zig                      # Windows  (or: scoop install zig)
brew install zig                            # macOS
sudo snap install zig --classic --beta      # Linux    (or your package manager)
dotnet build

macOS also runs those Linux models in a VM circuitRF ships — one extra ~330 MB download, once:

dotnet build src/Ui -p:CrfBuildVmImage=true

Alternatives to zig (MinGW gcc, Docker/Podman) and the rest: BUILDING.md ▸ Helper programs.

Note: To package circuitRF as an app with installers

BUILDING.md has step-by-step instructions for producing the installers users download: .msi (Windows x64/arm64/x86, per-machine and per-user), .zip (the Windows update payload), .dmg (macOS arm64/x64), .deb (Linux x64/arm64) and .tar.gz (the Linux user-local channel). One script per platform, run from the repository root.


Running circuitRF

To launch the GUI

# from the circuitRF/ directory:
dotnet run --project src/Ui

To run circuitRF headless from the command line

Full CLI documentation: the Command Line chapter of the user docs (design notes in docs/design/cli.md). An installed circuitRF is the command line too (circuitrf <verb> …, circuitrf serve --root <dir> for MCP) — for an agent installing it unattended, see Installing for an agent.

# S-parameters: sweep 1-3 GHz in 50 MHz steps, write a Touchstone file
dotnet run --project src/Cli -- sparam mycircuit.cnl --freq 1GHz:3GHz:50MHz -o mycircuit.s2p

# DC operating point
dotnet run --project src/Cli -- dc mycircuit.cnl

# Harmonic balance (runs the parametric sweep, if one wraps the analysis)
dotnet run --project src/Cli -- hb hero2.cnl --set Pavl_dbm=0 -o hero2.npy

# Loadpull over the directive's Gamma grid, exported as loadpull interchange
dotnet run --project src/Cli -- lp hero3.cnl --pin -20:1:15 -o hero3.spl

# Loadpull pursuit: search for the max-power and max-efficiency terminations
dotnet run --project src/Cli -- lpp hero3B.cnl --out-grid found.gam -o hero3B.npy

# Electromagnetic extraction of the layout a .cem names — no other arguments needed
dotnet run --project src/Cli -- em Amp.cem

# Author a correct initial document: a workspace, then a cell inside it
dotnet run --project src/Cli -- new workspace ~/designs/Amp --tech pcb-4layer_FR-4_62mil_1oz
dotnet run --project src/Cli -- new cell ~/designs/Amp Stage1 --views schematic,symbol

# Bring artwork or a component in: one interchange format to another, or a part as a cell
dotnet run --project src/Cli -- convert Filter.dxf -o gerbers/
dotnet run --project src/Cli -- import part parts/ --into ~/designs/Amp --cell SOT-23

# Is it well formed, does it resolve, is it sound? Runs no analysis and writes nothing
dotnet run --project src/Cli -- check ~/designs/Amp

# Does the artwork match the drawing? (LVS — read-only; -o writes a report)
dotnet run --project src/Cli -- lvs ~/designs/Amp/Stage1

# What did circuitRF DECIDE — which technology, which chain, what value?
dotnet run --project src/Cli -- explain Amp.cem
dotnet run --project src/Cli -- explain Stage1.csch --expr "Zopt*2"

# Read a result back, or a document, as one JSON document
dotnet run --project src/Cli -- read results/Amp_em.npy --only S --json

# Dump the elaborated netlist (flattened + parameters resolved) - great for debugging
dotnet run --project src/Cli -- elab mycircuit.cnl

# Speak a protocol to an external client over stdin/stdout, confined to one directory
dotnet run --project src/Cli -- serve --root ~/designs

# Help
dotnet run --project src/Cli

Run a netlist through an engine (in code)

The whole pipeline is three calls — read → elaborate → run — which is exactly what the CLI does:

using CircuitRF.Core.Netlist;
using CircuitRF.Core.Elaboration;
using CircuitRF.Engine;

var (lib, testbench) = CnlReader.ReadFile("mycircuit.cnl");
var netlist          = new Elaborator(lib).Elaborate(testbench);
var dataset          = SParameterEngine.Run(netlist, freqsHz);   // → a DataSet of DataCubes

What circuitRF doesn't do yet

  • UI for Tuning and optimization — no interactive parameter tuner, and no optimizer.
  • Noise analysis — no noise figure, no phase noise, no Fmin / Γopt / Rn extraction.
  • Transient analysis — circuitRF is frequency-domain by design; there is no time-domain solver.
  • Envelope analysis — no simulation of modulated waveforms (no ACPR, no EVM, no pre-distortion)

If you want to contribute to any of the above, please contact me.


User documentation

The user documentation — Quick Start, New User's Guide and Reference Guide — is published at https://potatobeanradio.github.io/circuitRF/. It lives in docs/user/, is what Help ▸ circuitRF Documentation opens, and is served online straight from this repository, so the web pages and the shipped pages are the same bytes. It is generated, not hand-edited. One command rebuilds every page and every figure from the live application:

dotnet run --project tools/DocGen -- --out docs/user
dotnet run --project tools/DocGen -- --page docs/user/src/reference/wbond.md   # just this page, in seconds (prose edits only; no figures)

Prose is authored as Markdown under docs/user/src/; the pages under docs/user/ are the output and any edit to one is reverted by the next run. Figures are vector captures of the running interface — the generator opens circuitRF headlessly, drives real views with real content, and writes SVG — so they cannot drift from the application. Component parameter tables come from the live registry for the same reason. There are no screenshots in this documentation and there are not meant to be.

tools/DocGen/check-docs-current.sh regenerates and diffs, and fails if the committed output is not what the generator produces. Run it after a UI change that moves a figure. The design note is docs/design/user-docs-factory.md.

Slide decks

The same sources also produce four landscape PDF decks into docs/slides/ (git-ignored, a build product). Both options default to everything:

dotnet run --project tools/DocGen -- --slides docs/slides                                # all 4, light + dark
dotnet run --project tools/DocGen -- --slides docs/slides --deck overview --theme dark
  • --deck overview | new-user | quick-start | reference — why adopt it; first principles; the fast path for engineers who already use simulators; the Reference Guide in outline. Comma-separated.
  • --theme light | dark | both — picks the screenshots as well as the page colour.

Contributing

Contributions are welcome and encouraged. circuitRF is community-driven, by and for the RF community, and RF domain knowledge counts as much as software experience. You don't need to be a career programmer — MATLAB/Python scripting experience plus an AI assistant is plenty.

Good first contributions:

  • Build a circuit in the schematic editor and report what's confusing or broken
  • Improve a design note in docs/design/, or a CLAUDE.md, where the docs lag the code.
  • Pick up a roadmap item (the noise green field is wide open).

The ground rules:

  • The architecture is layered and the UI firewall is enforced — keep Avalonia out of RfCore/Core/Engine/Design/Cli/Harmonica/WBond (a CI test will catch you). Renderers stay Skia-only.
  • Every numerical change needs a testdata/ regression test within the tolerance the PRD states.
  • The core is MIT — never ingest GPL code.
  • Each subsystem has a CLAUDE.md with its local conventions; read the relevant one before diving in.

Open an issue to discuss anything substantial before a large PR, so we can point you at the right design note (and save you rework).


AI-assisted development

circuitRF was built largely with AI assistance (primarily Claude / Claude Code), and AI-assisted contributions are first-class here. The codebase is structured for it: spatial CLAUDE.md memory files capture the invariants and local conventions of each subsystem, docs/design/ holds the reasoning behind each part, and docs/skills/ holds step-by-step procedures you can hand directly to an AI agent.

This is the deliberate bet of the project: an RF expert with an AI assistant can build the simulation features they need. If that describes you, you're in the right place.


License

circuitRF's own source code is released under the MIT License. A future commercial superset, if any, layers on through a clean extension boundary without forking the core.

The distribution also contains third-party components under their own terms, inventoried in THIRD-PARTY-NOTICES.md. Three of them are copyleft and worth knowing about before you redistribute a build:

  • CSparse.NET (sparse complex LU, used throughout the engine) is LGPL-2.1-only. The packaged installers link it statically, so LGPL §6's relink requirement applies — satisfied here by publishing complete source, since anyone can substitute a modified CSparse.NET and rebuild. If you redistribute circuitRF binaries, that obligation travels with them.
  • Open CASCADE Technology (the geometry kernel behind booleans, fillets and STEP, run by tools/geometry-worker) is LGPL-2.1-only with the Open CASCADE Exception. The installers carry it unmodified as shared libraries in one replaceable folder, and its source is available under the written offer in the notices. The repository holds none of it: building from source fetches it with the recipe in tools/geometry-worker/occt/.
  • tools/osdi-worker/osdi.h is MPL-2.0 (© 2022 SemiMod GmbH, from ngspice). MPL is copyleft at file scope: the file may live inside an MIT project, but it stays MPL and its header notice must not be removed.

No strong-copyleft (GPL/AGPL) code is ingested, and none is planned — see CLAUDE.md for the standing rule on learning from GPL simulators without copying them.


Acknowledgments

  • Avalonia (cross-platform UI — MIT)
  • SkiaSharp (2D rendering — MIT)
  • CSparse.NET (sparse complex LU — LGPL-2.1-only)
  • Open CASCADE Technology (geometry kernel — LGPL-2.1-only with the Open CASCADE Exception 1.0); circuitRF uses facilities provided by Open CASCADE Technology
  • NumFlat (dense linear algebra — MIT)
  • FftFlat (FFT — MIT)
  • Clipper2 (integer-coordinate polygon clipping and offsetting, used by the layout editor — Boost Software License)
  • CommunityToolkit.MVVM (MIT)
  • Dock.Avalonia (docking — MIT)
  • Material.Icons.Avalonia (icon set — MIT)
  • PureHDF (HDF5 export — MIT)
  • Markdig (Markdown rendering — BSD-2-Clause)
  • Svg (MS-PL) and Svg.Skia (MIT), used by tools/IconGen at packaging time
  • Fonts: IBM Plex Sans and Inter (SIL Open Font License 1.1), DejaVu Sans (Bitstream Vera Fonts License)
  • osdi.h from the ngspice OSDI component (© 2022 SemiMod GmbH — MPL-2.0)

Full terms, and what each one obliges you to do if you redistribute a build, are in THIRD-PARTY-NOTICES.md.

antenna
circuit-analysis
circuit-design
circuit-simulation
eda
electrothermal
fem
gdsii
gerber
harmonic-balance
layout
method-of-moments
mixers
power-amplifiers
rf-design
schematic
smith-chart
s-parameters
touchstone
wirebond

Significant stargazers

Milan Rother

73 followers · starred Aug 2026

Jean THOMAS

104 followers · starred Aug 2026

potatobeanradio/circuitRF

Lightweight cross-platform RF circuit + electromagnetic simulator. DC, S-parameters, harmonic balance, loadpull. Also supports 2D and 3D layout and design and electromagnetic MoM, FEM, FDTD + thermal FEM.

C#

188

1,159 commits

updated Oct 5, 2026

See the code

See what people are saying

README

circuitRF

A lightweight, cross-platform EDA tool for RF design — for the RF community, by the RF community.

License: MIT .NET 10 Platforms UI: Avalonia

circuitRF is a full-featured EDA tool for RF and microwave design — schematic capture + nonlinear analysis, layout and EM and thermal simulation in one cross-platform application. DC, S-parameter and harmonic-balance analyses with first-class loadpull / sourcepull, over designs from a handful of components to hierarchical, multi-port ones with thousands. A layout editor for PCB and MMIC work, with substrate-aware microstrip components, schematic↔layout generation, DRC and LVS, and two-way interchange with Gerber + Excellon, GDSII, DXF and .kicad_pcb boards. A 2.5D electromagnetic solver over the layout's own substrate stackup. 3D editor for FEM / FDTD EM solutions (using Palace / openEMS), and a built-in FEM thermal solver. Supports command line and MCP.

📖 Read the user documentation online

circuitRF is for RF practitioners or researchers who can't justify the cost of traditional tools (or find those tools too heavy for a quick investigation): power-amplifier, LNA, and mixer designers; RF EDA and device-modeling engineers; academic researchers; and capable hobbyists. It is written in C# / .NET 10, with an Avalonia 12 GUI rendered through SkiaSharp, and it was built largely AI-assisted (see AI-assisted development).

Status: 1.0.5. Please file issues.

Features

  • schematic + circuit simulation (DC, S-param, HB, Loadpull)
  • 2D layout editor (imports and exports Gerber, GDSII, DXF, .kicad_pcb)
  • 3D geometry editor (imports / exports Step)
  • hierarchy for all cell view types (including 3D)
  • support for PDKs
  • bondwire geometry editor and mutual inductance calculator
  • 2.5D MoM
  • 3D FEM and FDTD (using Palace and openEMS)
  • 3D FEM thermal solver
  • command line and MCP server
  • Documentation with examples

What is not in it yet:

the open green fields.


Screenshots

Schematic editor

circuitRF schematic editor

Build hierarchical RF circuits on a virtualized canvas: drag from the palette, wire, label nets, set parameters and sweeps, and Run.

Data Display — loadpull contours

circuitRF loadpull contours on a Smith chart

Plot S-parameters, spectra, power sweeps, and loadpull contours; overlay measured Touchstone/.spl/ .lpcwave data on simulated results; plot EM results from MoM, FEM and FDTD solvers (including radiation patterns)

Layout editor

circuitRF layout editor

Draw and edit physical geometry on a technology-defined layer stack: microstrip components generated from their schematic parameters, hierarchy with arrays, and export to GDSII, DXF and Gerber. MoM EM solver.

3D editor

circuitRF 3D editor Draw and edit in 3D and send to FEM or FDTD EM solvers or the built-in FEM thermal solver


Download

circuitRF 1.0.5 is the current stable release. Beta versions are published as GitHub pre-releases, and Settings ▸ Security & Permissions ▸ Include beta releases is what puts them on your update channel. It is ticked by default — untick it to receive stable releases only.

Linux — unpack and run install.sh. It writes only inside ~/.local, puts circuitrf on your PATH and registers the menu entry and file types; --uninstall removes it and leaves your work alone.

tar xzf circuitRF-1.0.5-linux-x64.tar.gz
./circuitRF-1.0.5/install.sh

Installing for everyone on the machine? The Windows .msi files without -user, and the .deb files, are on the releases page. They need administrator rights, so they cannot update themselves — they tell you when a new version is out instead.

Automatic updates can be turned off in Settings ▸ Security & Permissions. Building the installers yourself: BUILDING.md.


Contributors are welcome — especially RF domain experts

circuitRF is meant to be community-driven, by and for the RF engineering community. We value RF domain knowledge as much as software experience. If you design power amplifiers, LNAs, or mixers; build RF EDA tooling; do device modeling; or develop transistor technology (GaN-on-SiC, GaN-on-Si, LDMOS, …), you are exactly who this project needs — and circuitRF is a great place to use AI to build the simulation features you want.

You do not need to be a professional software developer. If you've scripted in MATLAB or Python, you have enough to start. Pair yourself with Claude Code (or your AI assistant of choice) and let it do the heavy lifting on the C#.


Architecture

circuitRF is built in strictly one-directional layers, and nothing below the UI knows the UI exists. The layers, the engines, the enforced framework firewall and the source tree are described in ARCHITECTURE.md.


Getting started

You can help develop circuitRF using Windows, macOS, or Linux.

1. Install the tools

ToolWhyGet it
.NET 10 SDKbuilds and runs circuitRFhttps://dotnet.microsoft.com/download/dotnet/10.0
Gitclone the reposhttps://git-scm.com/downloads
Visual Studio Codeedit + debug (lightweight, cross-platform)https://code.visualstudio.com/
VS Code C# Dev Kit extensionC# editing/IntelliSense/debug in VS Codehttps://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit

Verify the SDK is installed:

dotnet --version      # should print 10.x.x

2. Clone circuitRF

# cd to a working folder, then:
git clone https://github.com/potatobeanradio/circuitRF.git

3. Build and run

cd circuitRF

dotnet build      # restores packages + compiles everything
dotnet run --project src/Ui # from the circuitRF/ directory:

4. Optional — testing & building the device workers

dotnet test       # optional 10-15 min of circuitRF development tests

A handful of loadpull tests read lab-measured .spl/.lpcwave files that are third-party data held under terms that do not permit redistribution, so they have never been committed here. On a fresh clone those tests report as Skipped, naming the path they wanted — they never fail, and a fresh clone is green without them. Your own measurements in either format, dropped at those paths, exercise the same code.

To build the device workers: Needed only for PDKs whose device models ship as compiled libraries. dotnet build builds the workers itself if a C compiler is on PATH — with none, it warns and carries on, and such a kit refuses at Run.

Install one, then rebuild:

winget install zig.zig                      # Windows  (or: scoop install zig)
brew install zig                            # macOS
sudo snap install zig --classic --beta      # Linux    (or your package manager)
dotnet build

macOS also runs those Linux models in a VM circuitRF ships — one extra ~330 MB download, once:

dotnet build src/Ui -p:CrfBuildVmImage=true

Alternatives to zig (MinGW gcc, Docker/Podman) and the rest: BUILDING.md ▸ Helper programs.

Note: To package circuitRF as an app with installers

BUILDING.md has step-by-step instructions for producing the installers users download: .msi (Windows x64/arm64/x86, per-machine and per-user), .zip (the Windows update payload), .dmg (macOS arm64/x64), .deb (Linux x64/arm64) and .tar.gz (the Linux user-local channel). One script per platform, run from the repository root.


Running circuitRF

To launch the GUI

# from the circuitRF/ directory:
dotnet run --project src/Ui

To run circuitRF headless from the command line

Full CLI documentation: the Command Line chapter of the user docs (design notes in docs/design/cli.md). An installed circuitRF is the command line too (circuitrf <verb> …, circuitrf serve --root <dir> for MCP) — for an agent installing it unattended, see Installing for an agent.

# S-parameters: sweep 1-3 GHz in 50 MHz steps, write a Touchstone file
dotnet run --project src/Cli -- sparam mycircuit.cnl --freq 1GHz:3GHz:50MHz -o mycircuit.s2p

# DC operating point
dotnet run --project src/Cli -- dc mycircuit.cnl

# Harmonic balance (runs the parametric sweep, if one wraps the analysis)
dotnet run --project src/Cli -- hb hero2.cnl --set Pavl_dbm=0 -o hero2.npy

# Loadpull over the directive's Gamma grid, exported as loadpull interchange
dotnet run --project src/Cli -- lp hero3.cnl --pin -20:1:15 -o hero3.spl

# Loadpull pursuit: search for the max-power and max-efficiency terminations
dotnet run --project src/Cli -- lpp hero3B.cnl --out-grid found.gam -o hero3B.npy

# Electromagnetic extraction of the layout a .cem names — no other arguments needed
dotnet run --project src/Cli -- em Amp.cem

# Author a correct initial document: a workspace, then a cell inside it
dotnet run --project src/Cli -- new workspace ~/designs/Amp --tech pcb-4layer_FR-4_62mil_1oz
dotnet run --project src/Cli -- new cell ~/designs/Amp Stage1 --views schematic,symbol

# Bring artwork or a component in: one interchange format to another, or a part as a cell
dotnet run --project src/Cli -- convert Filter.dxf -o gerbers/
dotnet run --project src/Cli -- import part parts/ --into ~/designs/Amp --cell SOT-23

# Is it well formed, does it resolve, is it sound? Runs no analysis and writes nothing
dotnet run --project src/Cli -- check ~/designs/Amp

# Does the artwork match the drawing? (LVS — read-only; -o writes a report)
dotnet run --project src/Cli -- lvs ~/designs/Amp/Stage1

# What did circuitRF DECIDE — which technology, which chain, what value?
dotnet run --project src/Cli -- explain Amp.cem
dotnet run --project src/Cli -- explain Stage1.csch --expr "Zopt*2"

# Read a result back, or a document, as one JSON document
dotnet run --project src/Cli -- read results/Amp_em.npy --only S --json

# Dump the elaborated netlist (flattened + parameters resolved) - great for debugging
dotnet run --project src/Cli -- elab mycircuit.cnl

# Speak a protocol to an external client over stdin/stdout, confined to one directory
dotnet run --project src/Cli -- serve --root ~/designs

# Help
dotnet run --project src/Cli

Run a netlist through an engine (in code)

The whole pipeline is three calls — read → elaborate → run — which is exactly what the CLI does:

using CircuitRF.Core.Netlist;
using CircuitRF.Core.Elaboration;
using CircuitRF.Engine;

var (lib, testbench) = CnlReader.ReadFile("mycircuit.cnl");
var netlist          = new Elaborator(lib).Elaborate(testbench);
var dataset          = SParameterEngine.Run(netlist, freqsHz);   // → a DataSet of DataCubes

What circuitRF doesn't do yet

  • UI for Tuning and optimization — no interactive parameter tuner, and no optimizer.
  • Noise analysis — no noise figure, no phase noise, no Fmin / Γopt / Rn extraction.
  • Transient analysis — circuitRF is frequency-domain by design; there is no time-domain solver.
  • Envelope analysis — no simulation of modulated waveforms (no ACPR, no EVM, no pre-distortion)

If you want to contribute to any of the above, please contact me.


User documentation

The user documentation — Quick Start, New User's Guide and Reference Guide — is published at https://potatobeanradio.github.io/circuitRF/. It lives in docs/user/, is what Help ▸ circuitRF Documentation opens, and is served online straight from this repository, so the web pages and the shipped pages are the same bytes. It is generated, not hand-edited. One command rebuilds every page and every figure from the live application:

dotnet run --project tools/DocGen -- --out docs/user
dotnet run --project tools/DocGen -- --page docs/user/src/reference/wbond.md   # just this page, in seconds (prose edits only; no figures)

Prose is authored as Markdown under docs/user/src/; the pages under docs/user/ are the output and any edit to one is reverted by the next run. Figures are vector captures of the running interface — the generator opens circuitRF headlessly, drives real views with real content, and writes SVG — so they cannot drift from the application. Component parameter tables come from the live registry for the same reason. There are no screenshots in this documentation and there are not meant to be.

tools/DocGen/check-docs-current.sh regenerates and diffs, and fails if the committed output is not what the generator produces. Run it after a UI change that moves a figure. The design note is docs/design/user-docs-factory.md.

Slide decks

The same sources also produce four landscape PDF decks into docs/slides/ (git-ignored, a build product). Both options default to everything:

dotnet run --project tools/DocGen -- --slides docs/slides                                # all 4, light + dark
dotnet run --project tools/DocGen -- --slides docs/slides --deck overview --theme dark
  • --deck overview | new-user | quick-start | reference — why adopt it; first principles; the fast path for engineers who already use simulators; the Reference Guide in outline. Comma-separated.
  • --theme light | dark | both — picks the screenshots as well as the page colour.

Contributing

Contributions are welcome and encouraged. circuitRF is community-driven, by and for the RF community, and RF domain knowledge counts as much as software experience. You don't need to be a career programmer — MATLAB/Python scripting experience plus an AI assistant is plenty.

Good first contributions:

  • Build a circuit in the schematic editor and report what's confusing or broken
  • Improve a design note in docs/design/, or a CLAUDE.md, where the docs lag the code.
  • Pick up a roadmap item (the noise green field is wide open).

The ground rules:

  • The architecture is layered and the UI firewall is enforced — keep Avalonia out of RfCore/Core/Engine/Design/Cli/Harmonica/WBond (a CI test will catch you). Renderers stay Skia-only.
  • Every numerical change needs a testdata/ regression test within the tolerance the PRD states.
  • The core is MIT — never ingest GPL code.
  • Each subsystem has a CLAUDE.md with its local conventions; read the relevant one before diving in.

Open an issue to discuss anything substantial before a large PR, so we can point you at the right design note (and save you rework).


AI-assisted development

circuitRF was built largely with AI assistance (primarily Claude / Claude Code), and AI-assisted contributions are first-class here. The codebase is structured for it: spatial CLAUDE.md memory files capture the invariants and local conventions of each subsystem, docs/design/ holds the reasoning behind each part, and docs/skills/ holds step-by-step procedures you can hand directly to an AI agent.

This is the deliberate bet of the project: an RF expert with an AI assistant can build the simulation features they need. If that describes you, you're in the right place.


License

circuitRF's own source code is released under the MIT License. A future commercial superset, if any, layers on through a clean extension boundary without forking the core.

The distribution also contains third-party components under their own terms, inventoried in THIRD-PARTY-NOTICES.md. Three of them are copyleft and worth knowing about before you redistribute a build:

  • CSparse.NET (sparse complex LU, used throughout the engine) is LGPL-2.1-only. The packaged installers link it statically, so LGPL §6's relink requirement applies — satisfied here by publishing complete source, since anyone can substitute a modified CSparse.NET and rebuild. If you redistribute circuitRF binaries, that obligation travels with them.
  • Open CASCADE Technology (the geometry kernel behind booleans, fillets and STEP, run by tools/geometry-worker) is LGPL-2.1-only with the Open CASCADE Exception. The installers carry it unmodified as shared libraries in one replaceable folder, and its source is available under the written offer in the notices. The repository holds none of it: building from source fetches it with the recipe in tools/geometry-worker/occt/.
  • tools/osdi-worker/osdi.h is MPL-2.0 (© 2022 SemiMod GmbH, from ngspice). MPL is copyleft at file scope: the file may live inside an MIT project, but it stays MPL and its header notice must not be removed.

No strong-copyleft (GPL/AGPL) code is ingested, and none is planned — see CLAUDE.md for the standing rule on learning from GPL simulators without copying them.


Acknowledgments

  • Avalonia (cross-platform UI — MIT)
  • SkiaSharp (2D rendering — MIT)
  • CSparse.NET (sparse complex LU — LGPL-2.1-only)
  • Open CASCADE Technology (geometry kernel — LGPL-2.1-only with the Open CASCADE Exception 1.0); circuitRF uses facilities provided by Open CASCADE Technology
  • NumFlat (dense linear algebra — MIT)
  • FftFlat (FFT — MIT)
  • Clipper2 (integer-coordinate polygon clipping and offsetting, used by the layout editor — Boost Software License)
  • CommunityToolkit.MVVM (MIT)
  • Dock.Avalonia (docking — MIT)
  • Material.Icons.Avalonia (icon set — MIT)
  • PureHDF (HDF5 export — MIT)
  • Markdig (Markdown rendering — BSD-2-Clause)
  • Svg (MS-PL) and Svg.Skia (MIT), used by tools/IconGen at packaging time
  • Fonts: IBM Plex Sans and Inter (SIL Open Font License 1.1), DejaVu Sans (Bitstream Vera Fonts License)
  • osdi.h from the ngspice OSDI component (© 2022 SemiMod GmbH — MPL-2.0)

Full terms, and what each one obliges you to do if you redistribute a build, are in THIRD-PARTY-NOTICES.md.

antenna
circuit-analysis
circuit-design
circuit-simulation
eda
electrothermal
fem
gdsii
gerber
harmonic-balance
layout
method-of-moments
mixers
power-amplifiers
rf-design
schematic
smith-chart
s-parameters
touchstone
wirebond

Significant stargazers

Milan Rother

73 followers · starred Aug 2026

Jean THOMAS

104 followers · starred Aug 2026