Supported application: the source-built FreeCAD 1.1.1 distribution with the native
DesignStudioGuimodule. The Qt 6 executable remains a supported transitional smoke-test harness; the C# WPF client is legacy reference code.
Design Studio is a deterministic, multi-layer PCB design tool with a C++20 engine and a Qt 6 desktop application, built for the board classes that matter in 2026: HDI smartphone boards (microvias, tight clearances), AI-accelerator boards (length-matched high-speed classes, dense fanout) and datacenter boards (high layer counts, thousands of parts — the engine is spatially indexed and stays fast).
FreeCAD owns the mechanical CAD, enclosure, assembly, and STEP document. The
native DesignStudioGui module loads the existing Qt schematic, footprint, PCB,
routing, DRC, fabrication, and analysis widgets inside that same process and
main window.
The workbench in freecad/DesignStudioWorkbench binds a FreeCAD document to a
.dsproj, derives and locks a versioned mechanical contract, and synchronizes
the legal board outline, cutouts, mounting holes, fixed connector locations,
height zones, cooling keepouts, and service clearances. Open Schematic and PCB
Editor shows an in-process dock; it never launches a companion application.
See freecad/DesignStudioWorkbench/README.md
for installation and the FreeCAD-first workflow.
Component resolution across schematic, PCB, STEP assembly, and simulation uses
the tamper-evident bound-component contract described in
docs/BOUND-COMPONENTS.md.
Incremental schematic edits and electrical dependency propagation are documented
in docs/INCREMENTAL-ELECTRICAL.md.
schematic_designer/
├── core/ C++20 engine → designcore.dll / libdesigncore.so
│ ├── include/designcore/ geometry, pcb_model (N-layer stackup, vias, net
│ │ classes), obstacle_index (spatial grid), router,
│ │ drc, pour, c_api
│ ├── src/ implementations (+ occt_kernel.cpp, optional 3D)
│ └── tests/ engine test suite (model, router, DRC, pours, scale)
├── app/QtDesignStudio/ reusable Qt UI + transitional smoke harness
├── modules/DesignStudioGui/ native FreeCAD GUI extension
├── freecad/DesignStudioWorkbench/
│ typed commands and selection/contract adapter
├── third_party/freecad/ source/submodule/dependency locks and notices
├── services/ai-gateway/ Python gateway and contract tests
├── testdata/ immutable, curated test/reference inputs
├── app/DesignStudio/ legacy C# WPF reference client
├── .github/workflows/ci.yml supported Linux gate + C++ Windows portability
└── build-linux.sh canonical baseline build/test command
docs/INTERACTIVE-ROUTING.md.On Ubuntu, install CMake, a C++20 compiler, Python 3.12+ with pip, and the Qt 6 Core, Gui, Widgets, OpenGLWidgets, and Concurrent development packages. Then run one command from a clean checkout:
./build-linux.sh
That exact command is the CI release gate. It builds the supported Qt client
and C++ core, runs the C++ tests and a headless Qt startup smoke test, and runs
the Python gateway contract tests. Build state is stored outside the checkout
under $DS_WORK_ROOT, $XDG_CACHE_HOME/designstudio/baseline, or
~/.cache/designstudio/baseline (in that priority order).
See docs/BASELINE.md for support, data, credential, and clean-worktree policy.
acceptance/agent-workflow-controller and click Compile Build
Map. The current vertical slice produces six digest-bound packages:
component evidence/CAD, schematic, PCB, FreeCAD, integration, and
verification. Architecture approval is required before Run Next Package
or Run All Local Packages becomes available. Cancel/resume occurs only at
durable package boundaries, and the UI shows consumed/remaining budget.
DESIGNSTUDIO_SOURCE_ROOT can preselect the evidence repository for demos.
This phase validates genuine existing subsystem artifacts; it does not claim
to rebuild them. GPU work remains visibly locked until a separately approved
Droplet is configured.R rotates it; Esc returns to Select.V
mid-chain to drop a via and continue on the next layer; double-click or
Esc ends the chain.Ctrl+D): full rule set with messages — click a
violation to zoom to it.F fit; Ctrl+A select all; Del delete; Ctrl+Z/Ctrl+Y undo/redo.File → Save / Open — JSON project format v2 (.dsproj), git-friendly,
crash-safe atomic writes; v1 projects migrate automatically. Autosave every
2 minutes with recovery offered on open.File → Export Fabrication Outputs… writes the complete handoff package:
Gerber RS-274X for every copper layer (traces, pours, rotation-exact pad
regions, via lands), top/bottom solder mask and paste, board outline,
Excellon drill files split by plated span (through + one file per
blind/buried/micro span), BOM CSV, side-aware pick-and-place CSV.%APPDATA%\DesignStudio\footprints\ (one file per footprint, hand-editable).docs/physics-engine.md)Textbook-grounded electrical math in the C++ core, exposed live in the UI:
Hammerstad–Jensen microstrip and exact Cohn stripline (AGM elliptic
integrals), IPC-2141A differential pairs, εeff/delay, skin effect and
conductor+dielectric loss, IPC-2221 current capacity, Onderdonk fusing, via
L/C/R/θ, crosstalk and plane capacitance — each model cited to the references
in TextBook Datasets/. Tools → Physics Calculator… computes against the
board's stackup (Board Setup: εr, dielectric height, tanδ, copper weight);
Net Classes → Width from impedance… synthesizes the trace width (and diff
gap) that hits a target Z0/Zdiff and writes it straight into the routing
rules.
Datasheet PDF → (extractor prompt, any vision LLM) → component/2 JSON →
Library → Import JSON… → place & wire → File → Export Circuit State
(AI advisor)… → attach to Gemini/Claude with
docs/circuit-advisor/ADVISOR_PROMPT.md → advice/1 JSON back (what to add,
remove, replace — each "add" returns as another component/2 file). Large BGAs
are described parametrically (grid + per-ball pin table, JEDEC lettering) and
expanded deterministically; package height flows into the 3D view; the full
electrical payload (parameters, thermal, power domains) rides along into the
circuit-state file so the advisor reasons from real datasheet numbers.
docs/datasheet-extractor/)Extract a component from any datasheet PDF with the engineered prompt in
EXTRACTOR_PROMPT.md (use any vision LLM), then Library → Import JSON….
The JSON (design-studio.component/1, validated by component.schema.json)
carries everything the five datasheet jobs need: pin table with electrical
types, supply limits and required external components (with verbatim
constraints like "min 10 µF, ESR ≤ 3 Ω"), recommended land pattern in mm,
pin-1/polarity markers, and module outline hints.
The importer is the trust boundary: deterministic validators check pin/pad agreement, pad overlaps, annular rings and unit plausibility before anything enters the library, and the import log surfaces required externals plus suggested high-speed net classes (e.g. USB 90 Ω differential).
Pin electrical types flow onto placed pads and power the ERC checks that run with every DRC: output-vs-output conflicts, connected no-connect pins, and power-input nets with no power source.
The 3D tab regenerates the board scene from the PCB on every visit: FR4 slab, outer-layer copper, via barrels, extruded component bodies with per-package height heuristics. Drag to orbit, wheel to zoom.
The mechanical path keeps FreeCAD/OpenCascade as the editable B-Rep authority,
DesignCore as the native numerical engine, and the AI gateway as an advisory
layer. Linear-static CSR solving is implemented in the CPU reference backend;
an optional CUDA/cuBLAS backend can be enabled with
-DDESIGNCORE_ENABLE_CUDA=ON when a CUDA toolkit is installed. The worker
boundary has explicit slots for modal, thermal, contact, impact, fatigue/creep,
and injection-flow analysis; an uninstalled worker reports unavailable and
cannot be treated as a pass.
See docs/MECHANICAL-ENGINE-ARCHITECTURE.md
for the trust boundary and exact file map. The optional browser review client
is in web/mechanical-viewer; it uses Three.js for
GLB display and semantic view modes while Qt remains the desktop host.
vcpkg install opencascade
cmake -B build -DUSE_OCCT=ON -DCMAKE_TOOLCHAIN_FILE=<vcpkg>\scripts\buildsystems\vcpkg.cmake
OCCT is LGPL-2.1-with-exception: commercial closed-source use is permitted.
See CHANGELOG.md for what changed in this revision and
INDUSTRIAL_AUDIT.md for the historical gap analysis that drove it.
6 commits
Python
53.3%
C++
27.4%
C#
12.9%
Rust
3.7%
CMake
1.1%
Supported application: the source-built FreeCAD 1.1.1 distribution with the native
DesignStudioGuimodule. The Qt 6 executable remains a supported transitional smoke-test harness; the C# WPF client is legacy reference code.
Design Studio is a deterministic, multi-layer PCB design tool with a C++20 engine and a Qt 6 desktop application, built for the board classes that matter in 2026: HDI smartphone boards (microvias, tight clearances), AI-accelerator boards (length-matched high-speed classes, dense fanout) and datacenter boards (high layer counts, thousands of parts — the engine is spatially indexed and stays fast).
FreeCAD owns the mechanical CAD, enclosure, assembly, and STEP document. The
native DesignStudioGui module loads the existing Qt schematic, footprint, PCB,
routing, DRC, fabrication, and analysis widgets inside that same process and
main window.
The workbench in freecad/DesignStudioWorkbench binds a FreeCAD document to a
.dsproj, derives and locks a versioned mechanical contract, and synchronizes
the legal board outline, cutouts, mounting holes, fixed connector locations,
height zones, cooling keepouts, and service clearances. Open Schematic and PCB
Editor shows an in-process dock; it never launches a companion application.
See freecad/DesignStudioWorkbench/README.md
for installation and the FreeCAD-first workflow.
Component resolution across schematic, PCB, STEP assembly, and simulation uses
the tamper-evident bound-component contract described in
docs/BOUND-COMPONENTS.md.
Incremental schematic edits and electrical dependency propagation are documented
in docs/INCREMENTAL-ELECTRICAL.md.
schematic_designer/
├── core/ C++20 engine → designcore.dll / libdesigncore.so
│ ├── include/designcore/ geometry, pcb_model (N-layer stackup, vias, net
│ │ classes), obstacle_index (spatial grid), router,
│ │ drc, pour, c_api
│ ├── src/ implementations (+ occt_kernel.cpp, optional 3D)
│ └── tests/ engine test suite (model, router, DRC, pours, scale)
├── app/QtDesignStudio/ reusable Qt UI + transitional smoke harness
├── modules/DesignStudioGui/ native FreeCAD GUI extension
├── freecad/DesignStudioWorkbench/
│ typed commands and selection/contract adapter
├── third_party/freecad/ source/submodule/dependency locks and notices
├── services/ai-gateway/ Python gateway and contract tests
├── testdata/ immutable, curated test/reference inputs
├── app/DesignStudio/ legacy C# WPF reference client
├── .github/workflows/ci.yml supported Linux gate + C++ Windows portability
└── build-linux.sh canonical baseline build/test command
docs/INTERACTIVE-ROUTING.md.On Ubuntu, install CMake, a C++20 compiler, Python 3.12+ with pip, and the Qt 6 Core, Gui, Widgets, OpenGLWidgets, and Concurrent development packages. Then run one command from a clean checkout:
./build-linux.sh
That exact command is the CI release gate. It builds the supported Qt client
and C++ core, runs the C++ tests and a headless Qt startup smoke test, and runs
the Python gateway contract tests. Build state is stored outside the checkout
under $DS_WORK_ROOT, $XDG_CACHE_HOME/designstudio/baseline, or
~/.cache/designstudio/baseline (in that priority order).
See docs/BASELINE.md for support, data, credential, and clean-worktree policy.
acceptance/agent-workflow-controller and click Compile Build
Map. The current vertical slice produces six digest-bound packages:
component evidence/CAD, schematic, PCB, FreeCAD, integration, and
verification. Architecture approval is required before Run Next Package
or Run All Local Packages becomes available. Cancel/resume occurs only at
durable package boundaries, and the UI shows consumed/remaining budget.
DESIGNSTUDIO_SOURCE_ROOT can preselect the evidence repository for demos.
This phase validates genuine existing subsystem artifacts; it does not claim
to rebuild them. GPU work remains visibly locked until a separately approved
Droplet is configured.R rotates it; Esc returns to Select.V
mid-chain to drop a via and continue on the next layer; double-click or
Esc ends the chain.Ctrl+D): full rule set with messages — click a
violation to zoom to it.F fit; Ctrl+A select all; Del delete; Ctrl+Z/Ctrl+Y undo/redo.File → Save / Open — JSON project format v2 (.dsproj), git-friendly,
crash-safe atomic writes; v1 projects migrate automatically. Autosave every
2 minutes with recovery offered on open.File → Export Fabrication Outputs… writes the complete handoff package:
Gerber RS-274X for every copper layer (traces, pours, rotation-exact pad
regions, via lands), top/bottom solder mask and paste, board outline,
Excellon drill files split by plated span (through + one file per
blind/buried/micro span), BOM CSV, side-aware pick-and-place CSV.%APPDATA%\DesignStudio\footprints\ (one file per footprint, hand-editable).docs/physics-engine.md)Textbook-grounded electrical math in the C++ core, exposed live in the UI:
Hammerstad–Jensen microstrip and exact Cohn stripline (AGM elliptic
integrals), IPC-2141A differential pairs, εeff/delay, skin effect and
conductor+dielectric loss, IPC-2221 current capacity, Onderdonk fusing, via
L/C/R/θ, crosstalk and plane capacitance — each model cited to the references
in TextBook Datasets/. Tools → Physics Calculator… computes against the
board's stackup (Board Setup: εr, dielectric height, tanδ, copper weight);
Net Classes → Width from impedance… synthesizes the trace width (and diff
gap) that hits a target Z0/Zdiff and writes it straight into the routing
rules.
Datasheet PDF → (extractor prompt, any vision LLM) → component/2 JSON →
Library → Import JSON… → place & wire → File → Export Circuit State
(AI advisor)… → attach to Gemini/Claude with
docs/circuit-advisor/ADVISOR_PROMPT.md → advice/1 JSON back (what to add,
remove, replace — each "add" returns as another component/2 file). Large BGAs
are described parametrically (grid + per-ball pin table, JEDEC lettering) and
expanded deterministically; package height flows into the 3D view; the full
electrical payload (parameters, thermal, power domains) rides along into the
circuit-state file so the advisor reasons from real datasheet numbers.
docs/datasheet-extractor/)Extract a component from any datasheet PDF with the engineered prompt in
EXTRACTOR_PROMPT.md (use any vision LLM), then Library → Import JSON….
The JSON (design-studio.component/1, validated by component.schema.json)
carries everything the five datasheet jobs need: pin table with electrical
types, supply limits and required external components (with verbatim
constraints like "min 10 µF, ESR ≤ 3 Ω"), recommended land pattern in mm,
pin-1/polarity markers, and module outline hints.
The importer is the trust boundary: deterministic validators check pin/pad agreement, pad overlaps, annular rings and unit plausibility before anything enters the library, and the import log surfaces required externals plus suggested high-speed net classes (e.g. USB 90 Ω differential).
Pin electrical types flow onto placed pads and power the ERC checks that run with every DRC: output-vs-output conflicts, connected no-connect pins, and power-input nets with no power source.
The 3D tab regenerates the board scene from the PCB on every visit: FR4 slab, outer-layer copper, via barrels, extruded component bodies with per-package height heuristics. Drag to orbit, wheel to zoom.
The mechanical path keeps FreeCAD/OpenCascade as the editable B-Rep authority,
DesignCore as the native numerical engine, and the AI gateway as an advisory
layer. Linear-static CSR solving is implemented in the CPU reference backend;
an optional CUDA/cuBLAS backend can be enabled with
-DDESIGNCORE_ENABLE_CUDA=ON when a CUDA toolkit is installed. The worker
boundary has explicit slots for modal, thermal, contact, impact, fatigue/creep,
and injection-flow analysis; an uninstalled worker reports unavailable and
cannot be treated as a pass.
See docs/MECHANICAL-ENGINE-ARCHITECTURE.md
for the trust boundary and exact file map. The optional browser review client
is in web/mechanical-viewer; it uses Three.js for
GLB display and semantic view modes while Qt remains the desktop host.
vcpkg install opencascade
cmake -B build -DUSE_OCCT=ON -DCMAKE_TOOLCHAIN_FILE=<vcpkg>\scripts\buildsystems\vcpkg.cmake
OCCT is LGPL-2.1-with-exception: commercial closed-source use is permitted.
See CHANGELOG.md for what changed in this revision and
INDUSTRIAL_AUDIT.md for the historical gap analysis that drove it.
6 commits
Python
53.3%
C++
27.4%
C#
12.9%
Rust
3.7%
CMake
1.1%