{"slug": "circuitrf-an-open-source-eda-tool-for-rf-design-and-simulation", "title": "CircuitRF: An open source EDA tool for RF design and simulation", "summary": "CircuitRF 1.0.5, an open-source, cross-platform EDA tool for RF and microwave design, has been released with downloads for Windows (x64, ARM, 32-bit), macOS (Apple Silicon and Intel), and Linux (x64 and ARM). The tool, written in C#/.NET 10 with an Avalonia 12 GUI rendered through SkiaSharp and built largely AI-assisted, combines schematic capture, DC/S-parameter/harmonic-balance and loadpull analysis, a 2D layout editor with Gerber, GDSII, DXF and .kicad_pcb interchange, a 2.5D MoM solver, 3D FEM/FDTD EM solvers using Palace and openEMS, a built-in FEM thermal solver, and command-line and MCP support. circuitRF targets power-amplifier, LNA and mixer designers, RF EDA and device-modeling engineers, academic researchers and hobbyists who cannot justify the cost of traditional RF design tools.", "body_md": "**A lightweight, cross-platform EDA tool for RF design — for the RF community, by the RF community.**\n\ncircuitRF is a full-featured EDA tool for RF and microwave design — schematic capture + nonlinear analysis, layout and\nEM and thermal simulation in one cross-platform application. **DC**, **S-parameter** and **harmonic-balance**\nanalyses with first-class **loadpull / sourcepull**, over designs from a handful of components to\nhierarchical, multi-port ones with thousands. A **layout editor** for PCB and MMIC work, with\nsubstrate-aware microstrip components, schematic↔layout generation, **DRC** and **LVS**, and two-way\ninterchange with **Gerber + Excellon**, **GDSII**, **DXF** and `.kicad_pcb` boards. A **2.5D\nelectromagnetic solver** over the layout's own substrate stackup. **3D editor** for FEM / FDTD EM solutions (using Palace\n/ openEMS), and a built-in FEM **thermal solver**.  Supports command line and MCP.\n\n**📖 [Read the user documentation online](https://potatobeanradio.github.io/circuitRF/)**\n\ncircuitRF 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\n[AI-assisted development](#ai-assisted-development)).\n\n**Status:** 1.0.5. Please file issues.\n\n- schematic + circuit simulation (DC, S-param, HB, Loadpull)\n- 2D layout editor (imports and exports Gerber, GDSII, DXF, .kicad_pcb)\n- 3D geometry editor (imports / exports Step)\n- hierarchy for all cell view types (including 3D)\n- support for PDKs\n- bondwire geometry editor and mutual inductance calculator\n- 2.5D MoM\n- 3D FEM and FDTD (using Palace and openEMS)\n- 3D FEM thermal solver\n- command line and MCP server\n- Documentation with examples\n\nWhat is *not* in it yet:\n\n*Build hierarchical RF circuits on a virtualized canvas: drag from the palette, wire, label nets, set\nparameters and sweeps, and Run.*\n\n*Plot S-parameters, spectra, power sweeps, and loadpull contours; overlay measured Touchstone/`.spl`/\n`.lpcwave` data on simulated results; plot EM results from MoM, FEM and FDTD solvers (including radiation\npatterns)*\n\n*Draw and edit physical geometry on a technology-defined layer stack: microstrip components generated from\ntheir schematic parameters, hierarchy with arrays, and export to GDSII, DXF and Gerber. MoM EM solver.*\n\n*Draw and edit in 3D and send to FEM or FDTD EM solvers or the built-in FEM thermal solver*\n\n**circuitRF 1.0.5 is the current stable release.** Beta versions are published as GitHub\npre-releases, and *Settings ▸ Security & Permissions ▸ Include beta releases* is what puts them on\nyour update channel. It is ticked by default — untick it to receive stable releases only.\n\n| Platform | Download | \n|---|---|\n| Windows, Intel/AMD | [circuitRF-1.0.5-win-x64-user.msi](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-win-x64-user.msi) | \n| Windows, ARM | [circuitRF-1.0.5-win-arm64-user.msi](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-win-arm64-user.msi) | \n| Windows, 32-bit | [circuitRF-1.0.5-win-x86-user.msi](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-win-x86-user.msi) | \n| macOS, Apple Silicon | [circuitRF-1.0.5-arm64.dmg](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-arm64.dmg) | \n| macOS, Intel | [circuitRF-1.0.5-x64.dmg](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-x64.dmg) | \n| Linux, Intel/AMD | [circuitRF-1.0.5-linux-x64.tar.gz](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-linux-x64.tar.gz) | \n| Linux, ARM | [circuitRF-1.0.5-linux-arm64.tar.gz](https://github.com/potatobeanradio/circuitRF/releases/download/1.0.5/circuitRF-1.0.5-linux-arm64.tar.gz) | \n\n**Linux** — unpack and run `install.sh`. It writes only inside `~/.local`, puts `circuitrf` on your PATH\nand registers the menu entry and file types; `--uninstall` removes it and leaves your work alone.\n\n```\ntar xzf circuitRF-1.0.5-linux-x64.tar.gz\n./circuitRF-1.0.5/install.sh\n```\n\n**Installing for everyone on the machine?** The Windows `.msi` files without `-user`, and the `.deb`\nfiles, are on the [releases page](https://github.com/potatobeanradio/circuitRF/releases). They need\nadministrator rights, so they cannot update themselves — they tell you when a new version is out\ninstead.\n\nAutomatic updates can be turned off in **Settings ▸ Security & Permissions**. Building the installers\nyourself: [BUILDING.md](https://github.com/potatobeanradio/circuitRF/blob/main/BUILDING.md).\n\ncircuitRF is meant to be **community-driven, by and for the RF engineering community.** We value **RF\ndomain knowledge as much as software experience.** If you design power amplifiers, LNAs, or mixers; build\nRF EDA tooling; do device modeling; or develop transistor technology (GaN-on-SiC, GaN-on-Si, LDMOS, …),\n**you are exactly who this project needs** — and circuitRF is a great place to use AI to build the\nsimulation features *you* want.\n\nYou do **not** need to be a professional software developer. If you've scripted in MATLAB or Python, you\nhave enough to start. Pair yourself with [Claude Code](https://www.anthropic.com/claude-code) (or your\nAI assistant of choice) and let it do the heavy lifting on the C#.\n\ncircuitRF is built in strictly one-directional layers, and nothing below the UI knows the UI\nexists. The layers, the engines, the enforced framework firewall and the source tree are described in\n**[ARCHITECTURE.md](https://github.com/potatobeanradio/circuitRF/blob/main/ARCHITECTURE.md)**.\n\nYou can help develop circuitRF using **Windows**, **macOS**, or **Linux**.\n\n| Tool | Why | Get it | \n|---|---|---|\n| **.NET 10 SDK** | builds and runs circuitRF | [https://dotnet.microsoft.com/download/dotnet/10.0](https://dotnet.microsoft.com/download/dotnet/10.0) | \n| **Git** | clone the repos | [https://git-scm.com/downloads](https://git-scm.com/downloads) | \n| **Visual Studio Code** | edit + debug (lightweight, cross-platform) | [https://code.visualstudio.com/](https://code.visualstudio.com/) | \n| VS Code **C# Dev Kit** extension | C# editing/IntelliSense/debug in VS Code | [https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) | \n\nVerify the SDK is installed:\n\n```\ndotnet --version      # should print 10.x.x\n# cd to a working folder, then:\ngit clone https://github.com/potatobeanradio/circuitRF.git\ncd circuitRF\n\ndotnet build      # restores packages + compiles everything\ndotnet run --project src/Ui # from the circuitRF/ directory:\ndotnet test       # optional 10-15 min of circuitRF development tests\n```\n\nA handful of loadpull tests read lab-measured `.spl`/`.lpcwave` files that are third-party data held\nunder terms that do not permit redistribution, so they have never been committed here. On a fresh\nclone those tests report as **Skipped**, naming the path they wanted — they never fail, and a fresh\nclone is green without them. Your own measurements in either format, dropped at those paths, exercise\nthe same code.\n\nTo build the device workers:\nNeeded only for PDKs whose device models ship as **compiled libraries**. `dotnet build` builds the\nworkers itself *if a C compiler is on PATH* — with none, it warns and carries on, and such a kit\nrefuses at Run.\n\nInstall one, then rebuild:\n\n```\nwinget install zig.zig                      # Windows  (or: scoop install zig)\nbrew install zig                            # macOS\nsudo snap install zig --classic --beta      # Linux    (or your package manager)\ndotnet build\n```\n\nmacOS also runs those Linux models in a VM circuitRF ships — one extra ~330 MB download, once:\n\n```\ndotnet build src/Ui -p:CrfBuildVmImage=true\n```\n\nAlternatives to zig (MinGW `gcc`, Docker/Podman) and the rest:\n[BUILDING.md ▸ Helper programs](https://github.com/potatobeanradio/circuitRF/blob/main/BUILDING.md#helper-programs).\n\n[**BUILDING.md**](https://github.com/potatobeanradio/circuitRF/blob/main/BUILDING.md) has step-by-step instructions for producing the installers users\ndownload: `.msi` (Windows x64/arm64/x86, per-machine and per-user), `.zip` (the Windows update\npayload), `.dmg` (macOS arm64/x64), `.deb` (Linux x64/arm64) and `.tar.gz` (the Linux user-local\nchannel). One script per platform, run from the repository root.\n\n```\n# from the circuitRF/ directory:\ndotnet run --project src/Ui\n```\n\nFull CLI documentation: the\n[Command Line chapter](https://github.com/potatobeanradio/circuitRF/blob/main/docs/user/reference/cli.html) of the user docs (design notes in\n[`docs/design/cli.md`](https://github.com/potatobeanradio/circuitRF/blob/main/docs/design/cli.md)).\nAn installed circuitRF is the command line too (`circuitrf <verb> …`, `circuitrf serve --root <dir>`\nfor MCP) — for an agent installing it unattended, see\n[Installing for an agent](https://github.com/potatobeanradio/circuitRF/blob/main/docs/user/reference/cli.html#agent-install).\n\n```\n# S-parameters: sweep 1-3 GHz in 50 MHz steps, write a Touchstone file\ndotnet run --project src/Cli -- sparam mycircuit.cnl --freq 1GHz:3GHz:50MHz -o mycircuit.s2p\n\n# DC operating point\ndotnet run --project src/Cli -- dc mycircuit.cnl\n\n# Harmonic balance (runs the parametric sweep, if one wraps the analysis)\ndotnet run --project src/Cli -- hb hero2.cnl --set Pavl_dbm=0 -o hero2.npy\n\n# Loadpull over the directive's Gamma grid, exported as loadpull interchange\ndotnet run --project src/Cli -- lp hero3.cnl --pin -20:1:15 -o hero3.spl\n\n# Loadpull pursuit: search for the max-power and max-efficiency terminations\ndotnet run --project src/Cli -- lpp hero3B.cnl --out-grid found.gam -o hero3B.npy\n\n# Electromagnetic extraction of the layout a .cem names — no other arguments needed\ndotnet run --project src/Cli -- em Amp.cem\n\n# Author a correct initial document: a workspace, then a cell inside it\ndotnet run --project src/Cli -- new workspace ~/designs/Amp --tech pcb-4layer_FR-4_62mil_1oz\ndotnet run --project src/Cli -- new cell ~/designs/Amp Stage1 --views schematic,symbol\n\n# Bring artwork or a component in: one interchange format to another, or a part as a cell\ndotnet run --project src/Cli -- convert Filter.dxf -o gerbers/\ndotnet run --project src/Cli -- import part parts/ --into ~/designs/Amp --cell SOT-23\n\n# Is it well formed, does it resolve, is it sound? Runs no analysis and writes nothing\ndotnet run --project src/Cli -- check ~/designs/Amp\n\n# Does the artwork match the drawing? (LVS — read-only; -o writes a report)\ndotnet run --project src/Cli -- lvs ~/designs/Amp/Stage1\n\n# What did circuitRF DECIDE — which technology, which chain, what value?\ndotnet run --project src/Cli -- explain Amp.cem\ndotnet run --project src/Cli -- explain Stage1.csch --expr \"Zopt*2\"\n\n# Read a result back, or a document, as one JSON document\ndotnet run --project src/Cli -- read results/Amp_em.npy --only S --json\n\n# Dump the elaborated netlist (flattened + parameters resolved) - great for debugging\ndotnet run --project src/Cli -- elab mycircuit.cnl\n\n# Speak a protocol to an external client over stdin/stdout, confined to one directory\ndotnet run --project src/Cli -- serve --root ~/designs\n\n# Help\ndotnet run --project src/Cli\n```\n\nThe whole pipeline is three calls — read → elaborate → run — which is exactly what the CLI does:\n\n```\nusing CircuitRF.Core.Netlist;\nusing CircuitRF.Core.Elaboration;\nusing CircuitRF.Engine;\n\nvar (lib, testbench) = CnlReader.ReadFile(\"mycircuit.cnl\");\nvar netlist          = new Elaborator(lib).Elaborate(testbench);\nvar dataset          = SParameterEngine.Run(netlist, freqsHz);   // → a DataSet of DataCubes\n```\n\n- **UI for Tuning and optimization** — no interactive parameter tuner, and no optimizer.\n- **Noise analysis** — no noise figure, no phase noise, no Fmin / Γopt / Rn extraction.\n- **Transient analysis** — circuitRF is frequency-domain by design; there is no time-domain solver.\n- **Envelope analysis** — no simulation of modulated waveforms (no ACPR, no EVM, no pre-distortion)\n\nIf you want to contribute to any of the above, please contact me.\n\nThe user documentation — Quick Start, New User's Guide and Reference Guide — is published at\n**[https://potatobeanradio.github.io/circuitRF/](https://potatobeanradio.github.io/circuitRF/)**. It lives in `docs/user/`, is what\n**Help ▸ circuitRF Documentation** opens, and is served online straight from this repository,\nso the web pages and the shipped pages are the same bytes. **It is generated, not hand-edited.** One\ncommand rebuilds every page and every figure from the live application:\n\n```\ndotnet run --project tools/DocGen -- --out docs/user\ndotnet run --project tools/DocGen -- --page docs/user/src/reference/wbond.md   # just this page, in seconds (prose edits only; no figures)\n```\n\nProse is authored as Markdown under `docs/user/src/`; the pages under `docs/user/` are the output and\nany edit to one is reverted by the next run. Figures are **vector captures of the running interface**\n— the generator opens circuitRF headlessly, drives real views with real content, and writes SVG — so\nthey cannot drift from the application. Component parameter tables come from the live registry for\nthe same reason. There are no screenshots in this documentation and there are not meant to be.\n\n`tools/DocGen/check-docs-current.sh` regenerates and diffs, and fails if the committed output is not\nwhat the generator produces. Run it after a UI change that moves a figure. The design note is\n[`docs/design/user-docs-factory.md`](https://github.com/potatobeanradio/circuitRF/blob/main/docs/design/user-docs-factory.md).\n\nThe same sources also produce four landscape PDF decks into `docs/slides/` (git-ignored, a build\nproduct). Both options default to everything:\n\n```\ndotnet run --project tools/DocGen -- --slides docs/slides                                # all 4, light + dark\ndotnet run --project tools/DocGen -- --slides docs/slides --deck overview --theme dark\n```\n\n- `--deck overview | new-user | quick-start | reference` — why adopt it; first principles; the fast\npath for engineers who already use simulators; the Reference Guide in outline. Comma-separated.\n- `--theme light | dark | both` — picks the**screenshots** as well as the page colour.\n\n**Contributions are welcome and encouraged.** circuitRF is community-driven, by and for the RF community,\nand **RF domain knowledge counts as much as software experience.** You don't need to be a career\nprogrammer — MATLAB/Python scripting experience plus an AI assistant is plenty.\n\n**Good first contributions:**\n\n- Build a circuit in the schematic editor and **report what's confusing or broken**\n- Improve a design note in `docs/design/` , or a`CLAUDE.md` , where the docs lag the code.\n- Pick up a **roadmap** item (the noise green field is wide open).\n\n**The ground rules:**\n\n- The [architecture](https://github.com/potatobeanradio/circuitRF/blob/main/ARCHITECTURE.md) 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).\nRenderers stay Skia-only.\n- **Every numerical change needs a `testdata/` regression test** within the tolerance the PRD states.\n- The core is **MIT** — never ingest GPL code.\n- Each subsystem has a `CLAUDE.md` with its local conventions; read the relevant one before diving in.\n\nOpen an issue to discuss anything substantial before a large PR, so we can point you at the right design note (and save you rework).\n\ncircuitRF was built largely with AI assistance (primarily [Claude](https://www.anthropic.com/claude) /\n[Claude Code](https://www.anthropic.com/claude-code)), and **AI-assisted contributions are first-class\nhere.** The codebase is structured for it: spatial `CLAUDE.md` memory files capture the invariants and\nlocal conventions of each subsystem, `docs/design/` holds the reasoning behind each part, and\n`docs/skills/` holds step-by-step procedures you can hand directly to an AI agent.\n\nThis is the deliberate bet of the project: **an RF expert with an AI assistant can build the simulation\nfeatures they need.** If that describes you, you're in the right place.\n\ncircuitRF's own source code is released under the **[MIT License](https://github.com/potatobeanradio/circuitRF/blob/main/LICENSE)**. A future commercial\nsuperset, if any, layers on through a clean extension boundary without forking the core.\n\nThe distribution also contains third-party components under their own terms, inventoried in\n**[THIRD-PARTY-NOTICES.md](https://github.com/potatobeanradio/circuitRF/blob/main/THIRD-PARTY-NOTICES.md)**. Three of them are copyleft and worth knowing about\nbefore you redistribute a build:\n\n- **[CSparse.NET](https://github.com/wo80/CSparse.NET)** (sparse complex LU, used throughout the engine)\nis**LGPL-2.1-only** . The packaged installers link it statically, so LGPL §6's relink requirement\napplies — satisfied here by publishing complete source, since anyone can substitute a modified\nCSparse.NET and rebuild. If you redistribute circuitRF binaries, that obligation travels with them.\n- **[Open CASCADE Technology](https://github.com/Open-Cascade-SAS/OCCT)** (the geometry kernel behind\nbooleans, fillets and STEP, run by`tools/geometry-worker` ) is**LGPL-2.1-only with the Open CASCADE\nException** . The installers carry it unmodified as shared libraries in one replaceable folder, and\nits source is available under the written offer in the notices. The repository holds none of it:\nbuilding from source fetches it with the recipe in`tools/geometry-worker/occt/` .\n- **[`tools/osdi-worker/osdi.h`](https://github.com/potatobeanradio/circuitRF/blob/main/tools/osdi-worker/osdi.h)** is**MPL-2.0** (© 2022 SemiMod GmbH, from\nngspice). MPL is copyleft at file scope: the file may live inside an MIT project, but it stays MPL\nand its header notice must not be removed.\n\nNo strong-copyleft (GPL/AGPL) code is ingested, and none is planned — see `CLAUDE.md` for the standing\nrule on learning from GPL simulators without copying them.\n\n- **[Avalonia](https://avaloniaui.net/)** (cross-platform UI — MIT)\n- **[SkiaSharp](https://github.com/mono/SkiaSharp)** (2D rendering — MIT)\n- **[CSparse.NET](https://github.com/wo80/CSparse.NET)** (sparse complex LU —**LGPL-2.1-only** )\n- **[Open CASCADE Technology](https://github.com/Open-Cascade-SAS/OCCT)** (geometry kernel —**LGPL-2.1-only** with the Open CASCADE Exception 1.0); circuitRF uses facilities provided by Open CASCADE Technology\n- **[NumFlat](https://github.com/sinshu/numflat)** (dense linear algebra — MIT)\n- **[FftFlat](https://github.com/sinshu/FftFlat)** (FFT — MIT)\n- **[Clipper2](https://github.com/AngusJohnson/Clipper2)** (integer-coordinate polygon clipping and offsetting, used by the layout editor — Boost Software License)\n- **[CommunityToolkit.MVVM](https://github.com/CommunityToolkit/dotnet)** (MIT)\n- **[Dock.Avalonia](https://github.com/wieslawsoltes/Dock)** (docking — MIT)\n- **[Material.Icons.Avalonia](https://github.com/SKProCH/Material.Icons)** (icon set — MIT)\n- **[PureHDF](https://github.com/Apollo3zehn/PureHDF)** (HDF5 export — MIT)\n- **[Markdig](https://github.com/xoofx/markdig)** (Markdown rendering — BSD-2-Clause)\n- **[Svg](https://github.com/svg-net/SVG)** (MS-PL) and**[Svg.Skia](https://github.com/wieslawsoltes/Svg.Skia)** (MIT), used by`tools/IconGen` at packaging time\n- Fonts: **IBM Plex Sans** and**Inter** (SIL Open Font License 1.1),**DejaVu Sans** (Bitstream Vera Fonts License)\n- **[`osdi.h`](https://github.com/potatobeanradio/circuitRF/blob/main/tools/osdi-worker/osdi.h)** from the ngspice OSDI component (© 2022 SemiMod GmbH — MPL-2.0)\n\nFull terms, and what each one obliges you to do if you redistribute a build, are in\n**[THIRD-PARTY-NOTICES.md](https://github.com/potatobeanradio/circuitRF/blob/main/THIRD-PARTY-NOTICES.md)**.", "url": "https://wpnews.pro/news/circuitrf-an-open-source-eda-tool-for-rf-design-and-simulation", "canonical_source": "https://github.com/potatobeanradio/circuitRF", "published_at": "2026-10-06 14:25:57+00:00", "updated_at": "2026-10-06 14:50:27.025699+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "agent-protocols"], "entities": ["circuitRF", "potatobeanradio", "Avalonia", "SkiaSharp", "Palace", "openEMS", "GitHub", ".NET 10"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/circuitrf-an-open-source-eda-tool-for-rf-design-and-simulation", "markdown": "https://wpnews.pro/news/circuitrf-an-open-source-eda-tool-for-rf-design-and-simulation.md", "text": "https://wpnews.pro/news/circuitrf-an-open-source-eda-tool-for-rf-design-and-simulation.txt", "jsonld": "https://wpnews.pro/news/circuitrf-an-open-source-eda-tool-for-rf-design-and-simulation.jsonld"}}