Showcase · PCB analysis

Your board, analysed before it is built.

IR drop, impedance, glass-weave skew, statistical eyes to BER 1e-12 and via life from the file you already have. Shown here on two real open-hardware boards, read straight from their KiCad files.

3.58 mVworst IR drop on the ULX3S 3.3 V rail at 0.48 A, 2.2% of its tolerance
50.6 ΩAntmicro PASS line at its 0.2 mm design width, published as 50 Ω
20–40×less weave skew from rotating the route

Design checks against the standards, not certificates issued by their bodies. Each line is a shipped entry in our standards claims register.

Pick a copper layer, drag to pan, wheel or pinch to zoom, hover for V, |J| and T. Switch to 3D for the stackup, click a red cut marker for the trace cross-section. Full-screen viewer

Power on a real FPGA board

The ULX3S is an open-hardware Lattice ECP5 board. Every copper pour, trace and via on its 3.3 V and 1.1 V rails comes from the board file, the regulator feeds each rail and the chips draw their load. The 3.3 V rail drops 3.58 mV at its farthest load, 2.2% of the ±5% window.

3.58 mV3.3 V rail, worst drop at 0.48 A
3.55 mV1.1 V core, worst drop at 0.30 A, 6.5% of 55 mV
0.48 Athrough one via: the whole 3.3 V current
0.024 Kcopper temperature rise on the 3.3 V rail

One change, before and after

All of the 3.3 V current climbs through a single via into the inner plane. Two more vias beside it cut the worst drop from 3.58 mV to 3.33 mV (7.1% lower) and the busiest via from 0.48 A to 0.25 A.

Load on +3V3PartCurrent we drewWorst drop at its pins
U1ECP5 VCCIO banks on +3V30.10 A2.31 mV
U9ESP32 module0.25 A3.58 mV
U2SDRAM MT48LC16M16A20.10 A0.74 mV
U10SPI flash IS25LP128F0.02 A2.70 mV
Y125 MHz oscillator0.01 A2.54 mV
Basis

DC solve of the net's copper on all four layers with every via as a barrel resistor, copper resistance at its solved temperature (25 °C ambient). Source at the regulator's output jumper; loads at every power pin of each part, with the currents listed. Tolerance ±5% of nominal from the ECP5 recommended operating conditions. Board: ULX3S rev v3.1.7, github.com/emard/ulx3s.

Impedance of the core rail, 10 kHz to 1 GHz

Seen from the ECP5's core vias, the 1.1 V rail stays under its 0.37 Ω target (±5% of nominal over a 0.15 A load step) up to 141 MHz. Above that the loops that mount its 3 caps take over: each via pair adds 0.71 nH. Adding one 0402 1 µF X5R cap on the core vias holds the rail under target to 200 MHz and cuts the impedance at 100 MHz from 0.26 Ω to 0.19 Ω, 27% lower.

Impedance of the ULX3S core rail against frequency, as built and with one cap added, against the target
Basis

Plane-pair cavity solve on the real outline of the core pour and the ground plane under it, with dielectric loss and skin-effect copper; the first cavity resonance sits at 2.53 GHz. Caps from the board's footprints with a typical ESR and ESL for their case size and DC-bias derating; values by footprint size, since the board file carries no BOM. Mounting inductance of each cap from its power and return via pitch and barrel size. Regulator as a resistance and inductance with its own output caps, behind the jumper and the feed trace. Target from the rail tolerance over half the assumed core current.

Impedance, straight from the board file

The Antmicro Signal Integrity Test Board is open hardware. Antmicro designs its single lines 0.2 mm wide for 50 Ω; our solve of the board's stackup at that width gives 50.6 Ω. As drawn in the board file, 0.185 mm wide, the PASS line solves to 52.7 Ω, inside the ±10 % a controlled-impedance order allows.

Electric field and equipotentials around the PASS microstrip over its ground plane
TraceResultReference
PASS, 0.2 mm design width50.6 Ω50 Ω, Antmicro's published line target
PASS as drawn, 0.185 mm52.7 Ω±10 % fab tolerance on 50 Ω
DIFF pair as drawn, 0.185 mm / 0.15 mm gapZdiff 88.9 Ω
Zodd 44.5 Ω, Zeven 59.8 Ω
100 Ω typical for a differential pair
PASS effective Dk3.11solved from the stackup

Open the Antmicro board in the viewer above and pick Z0 to see every trace coloured by its impedance.

Basis

Quasi-TEM 2-D cross-section of each trace's width, copper and the stackup in the Antmicro board file; the pair as a coupled solve. Board: github.com/antmicro/signal-integrity-test-board, Apache-2.0. Measured VNA reference for the coming overlay: github.com/antmicro/gerber2ems, examples/stub_short, Apache-2.0.

Impedance yield across the fab's tolerances

All 2,000 simulated builds of a 0.15 mm microstrip land within ±10 % of its 55.54 Ω nominal, and 99.75% within ±7 %. The differential pair at a 0.2 mm gap does the same: all 1,000 builds within ±10 % of 99.02 Ω, 99.80% within ±7 %. Trace width moves impedance most, then dielectric height; etch factor barely registers.

99.75%single line within ±7 %, 50.34 Ω to 59.97 Ω across every build
99.80%differential pair within ±7 %, 92.36 Ω to 106.30 Ω
1.33 Ωone-sigma spread of the single line's Z0
100%insertion loss within ±7 % at 10 GHz over 10 cm
Single line Z0, 2,000 builds±7 %: 99.75% of builds±10 % limit: 50.0 Ω±10 % limit: 61.1 Ω−10 %55.54 Ω+10 %within ±7 %±10 % limitbuilds Differential pair Zdiff, 1,000 builds±7 %: 99.80% of builds±10 % limit: 89.1 Ω±10 % limit: 108.9 Ω−10 %99.02 Ω+10 %within ±7 %±10 % limitbuilds

What moves impedance

Each parameter pushed to the edge of its spread with everything else at nominal; the bar shows how far the impedance goes.

Single line Z0 swing, widest firstTrace widthTrace width low: 58.49 ΩTrace width high: 52.91 Ω5.58 ΩDielectric heightDielectric height low: 53.10 ΩDielectric height high: 57.84 Ω4.74 ΩLaminate DkLaminate Dk low: 56.73 ΩLaminate Dk high: 54.42 Ω2.31 ΩPlating thicknessPlating thickness low: 56.61 ΩPlating thickness high: 54.61 Ω2.01 ΩEtch factorEtch factor low: 56.09 ΩEtch factor high: 55.18 Ω0.91 Ω55.54 Ωparameter lowparameter high Pair Zdiff swing, widest firstTrace widthTrace width low: 104.08 ΩTrace width high: 94.49 Ω9.59 ΩDielectric heightDielectric height low: 95.54 ΩDielectric height high: 102.15 Ω6.61 ΩPlating thicknessPlating thickness low: 102.02 ΩPlating thickness high: 96.32 Ω5.70 ΩLaminate DkLaminate Dk low: 101.03 ΩLaminate Dk high: 97.12 Ω3.90 ΩEtch factorEtch factor low: 99.95 ΩEtch factor high: 98.40 Ω1.55 Ω99.02 Ωparameter lowparameter high
ParameterNominalSpreadSingle line swingPair swing
Trace width0.15 mm±10 %5.58 Ω9.59 Ω
Dielectric height0.1 mm±8 %4.74 Ω6.61 Ω
Laminate Dk4.2±5 %2.31 Ω3.90 Ω
Plating thickness15 µm±12 µm2.01 Ω5.70 Ω
Etch factor3.0±20 %0.91 Ω1.55 Ω
Basis

Each build draws trace width, etch factor, dielectric height, laminate Dk and plating thickness independently from normal distributions, with the spreads above at three sigma, etches the trace to its trapezoid and solves the line at its mean etched width; insertion loss over 10 cm at 10 GHz. The swing chart drives one parameter at a time to its three-sigma extremes with the others at nominal. Builds are seeded, so every one is reproducible.

Glass weave skew, from the real cell

Rotate the route a few degrees off the weave and the skew drops to 0.09 to 0.35 ps/in across four glass styles, in line with the 0.2 ps/in Samtec measured on rotated routes: 20–40× less than along the grain.

Top view of 1078 woven glass with the differential pair along the grain and rotated 10 degrees

Along the grain, skew swings sinusoidally with where the pair sits on the glass. At the worst position it reaches 7.6 ps/in on 1078: the perfectly aligned upper bound, since a real route wanders off the grain. Measured worst cases sit under it; the bound is 2.3×, 1.5× and 1.6× the worst Samtec (Megtron 6) and Isola (I-Speed) published for 1035, 1078 and 3313.

Along the grain, worst positionRotated route, worstPublished worst measurement (laminate below the bars) ps/in03691035 worst position along the grain (model): 3.9 ps/in1035 rotated route, worst angle: 0.09 ps/inPublished worst, Megtron 6: 1.7 ps/in1035Megtron 61078 worst position along the grain (model): 7.6 ps/in1078 rotated route, worst angle: 0.35 ps/inPublished worst, Megtron 6: 5.0 ps/in1078Megtron 61080 worst position along the grain (model): 6.5 ps/in1080 rotated route, worst angle: 0.24 ps/in1080no published3313 worst position along the grain (model): 6.6 ps/in3313 rotated route, worst angle: 0.28 ps/inPublished worst, I-Speed: 4.2 ps/in3313I-Speed
GlassRotatedAlong grainPublishedRatio
10350.093.91.7
Megtron 6
2.3×
10780.357.65.0
Megtron 6
1.5×
10800.246.5——
33130.286.64.2
I-Speed
1.6×

Worst-case skew in ps/in. Along grain: the model's worst position; published: the measured worst case and its laminate; ratio: along grain / published.

Skew against the pair position across one weave repeat for the four glass styles Cross-section across the pair at its worst position on 1078 glass
Basis

Worst is the single worst lateral position across one weave repeat with the pair exactly along the grain; rotated routes at 7, 10 and 11.3 degrees over one inch. Published worst cases: Samtec, EDI CON 2017, measured along the grain (1035, 1078); Isola and Simbeor, worst observed pair over 14 in (3313). Our laminate: Isola 370HR class, resin Dk calibrated to the 370HR datasheet Dk. Each published figure is cited to its source in our reference-band register.

Eye diagrams at 25 and 56 Gbps

Eye open at 1e-12. The Antmicro PASS line at 56 Gbps NRZ keeps 1.02 V by 13.7 ps at BER 1e-12 as drawn, and 1.27 V by 14.7 ps with Tx FFE, CTLE and a 2-tap DFE optimised for that BER.

Back-drill buys 1,726 mV of eye height at 56 Gbps. Solved channel responses of the Antmicro PASS line (45.4 mm) and DIFF pair (55.4 mm) at their board-file geometry, and the same cross-sections at twice the length. Switch data rate, surface roughness, equalisation, pair skew and the via (none, with via, back-drilled); the marker sits at the widest opening. Coloured contours are the statistical eye at BER 1e-6 to 1e-15; the strip below is its bathtub.

Basis

Channel impulse response from the solved RLGC of the PASS and DIFF traces, superposed with PRBS7 (NRZ) or PRBS15 (PAM4) data at the selected rate. Roughness and a single-pole CTLE are toggles. The via toggle puts one layer-change via in the middle of the DIFF pair on the 8-layer cell: with its full stub, or back-drilled. Contours and bathtub: the statistical eye of the same pulse response, every cursor's symbol distribution convolved, with 0.01 UI rms random jitter, 0.05 UI dual-Dirac deterministic jitter and 5 mV rms noise; the optimiser searches Tx FFE pre and post taps and CTLE peaking with an ideal DFE. The statistical eye follows the same via and CTLE selection. No connector launches or crosstalk.

Impedance along the line

The TDR view, from S-parameters. Reflection data is extrapolated to DC, windowed and inverse-transformed into a step response, then read as impedance against distance for the rise time you pick. The Antmicro stub_short board is shown twice through the same pipeline: the measured VNA reflection and our line-only model. The model has no SMA launch, stub or fixture, so the measured launch dip and the later bump have no counterpart in it, and its level sits a few ohms above the measured trace. Other cases: a uniform line, a higher-impedance section, and a differential via.

Basis

Real part of the reflection held and imaginary part ramped to zero below the lowest measured frequency, Kaiser window, inverse FFT, cumulative sum, linear-ramp rise time, then impedance from the reflection coefficient and distance from half the round-trip time at the PASS line's effective velocity. The profile is computed from the same S-parameters the eye diagrams use.

Via life before you drill

An 8-layer, 1.6 mm board with a 0.25 mm plated-through hole cycling 25 to 150 °C: the barrel stays elastic, at 243 MPa by IPC-TR-579 against copper's 250 MPa yield, and the IPC-TR-579 fatigue equation gives it 820,000 cycles. Lead-free reflow is where the barrel works hard: 113 excursions to 260 °C to failure, so six reflows use 5.3% of its life.

Von Mises stress in the plated-through-hole cell, mirrored cutaway
820,000cycles, 25 to 150 °C
113reflow excursions to failure at 260 °C
5.3%of barrel life used by six lead-free reflows

The resolved model of the same cell puts mid-barrel strain at 0.23%, peaking at 196 MPa in the barrel.

cycles to failure, 25 → 150 °C00.5 M1 M1.5 M1.6 mm board, drill 0.2 mm: 652,593 cycles1.6 mm board, drill 0.3 mm: 1,000,282 cycles1.6 mm board, drill 0.4 mm: 1,418,449 cycles1.6 mm board2.4 mm board, drill 0.2 mm: 372,945 cycles2.4 mm board, drill 0.3 mm: 470,417 cycles2.4 mm board, drill 0.4 mm: 581,465 cycles2.4 mm board3.2 mm board, drill 0.2 mm: 305,762 cycles3.2 mm board, drill 0.3 mm: 349,967 cycles3.2 mm board, drill 0.4 mm: 396,470 cycles3.2 mm boarddrill 0.2 mm0.3 mm0.4 mm
Basis

25 µm plating, isolated via. IPC-TR-579 barrel force balance, then the IPC-TR-579 (Engelmaier) fatigue equation on the total barrel strain with as-plated copper at 320 MPa tensile strength, 80 GPa modulus and 0.20 ductility; an axisymmetric thermo-elastic model of the same cell alongside. Swept over board thickness and drill.

Survives the shaker

A 273 Hz first mode for the 160 by 100 mm, 1.6 mm board with five parts loaded on it (Rayleigh-Ritz, simply-supported sin basis, lumped component point masses). On a 8.9 g rms random profile the board centre moves 0.253 mm at three sigma, and the Steinberg criterion for a 20-million-cycle life leaves every part with margin. The drop is tighter: a 1,500 g, 0.5 ms half-sine (JESD22-B111 condition B) puts 3,491 µε of peak strain at the BGA against a 1,500 µε limit.

Mode 1, 273 HzU1U2U3J1C1
Part3σ deflectionSteinberg allowableVibration marginDrop peak strainDrop margin
U1 BGA0.253 mm0.310 mm1.2×3,491 µε0.4×
U2 QFP0.141 mm1.316 mm9.3×1,825 µε0.8×
U3 LCC0.120 mm0.771 mm6.4×1,470 µε1.0×
J1 DIP0.070 mm1.028 mm14.6×881 µε1.7×
C1 DIP0.056 mm1.991 mm35.5×635 µε2.4×

Margin is allowable divided by demand; under 1.0 fails. Drop margin is the 1,500 µε strain limit divided by the peak strain at the part.

Basis

Rayleigh-Ritz plate modes with the parts as lumped masses, simply-supported edges (mounting-hole supports not modelled); bare plate 351 Hz matches the closed form. Miles' equation is within +0.14% of a full integration of the power spectrum for the first mode. Random profile is an input, flat 0.04 g²/Hz from 20 to 2000 Hz, in the range of MIL-STD-810H Method 514 ground vehicle levels; the response is 16.8 g rms at the first mode with Q from the square-root-of-frequency rule. Steinberg allowable deflection 0.00022 B / (C h r √L) inches. Drop by time integration of the mode.

Matches the fabs

11 of 17 published fab geometries (65%) land within ±2% of the fab's own number; all 17 are within ±5%, worst 4.9%, and nothing is fitted. Each row is a stackup and trace width that a fab publishes, solved as drawn with a rectangular trace and the fab's printed Dk.

Fab geometryFab target (Ω)Fab predicted (Ω)NativeCAD (Ω)Difference
OSH 4L L1 microstrip, ref L250.0 Ω49.8 Ω50.6 Ω+1.65% (converged to 0.12 %)
OSH 4L L1 diff microstrip, ref L290.0 Ω91.5 Ω92.1 Ω+0.68% (converged to 0.26 %)
OSH 4L L1 diff microstrip, ref L2100.0 Ω100.3 Ω101.2 Ω+0.90% (converged to 0.26 %)
OSH 6L L1 microstrip, ref L2 (row 1)50.0 Ω50.1 Ω50.9 Ω+1.59% (converged to 0.17 %)
OSH 6L L1 microstrip, ref L3 across void L2 (row 2)50.0 Ω49.9 Ω50.8 Ω+1.79% (converged to 0.13 %)
OSH 6L L1 diff microstrip, ref L2 (row 3)85.0 Ω84.5 Ω85.4 Ω+1.08% (converged to 0.22 %)
OSH 6L L1 diff microstrip, ref L2 (row 4)90.0 Ω89.6 Ω90.6 Ω+1.06% (converged to 0.22 %)
OSH 6L L1 diff microstrip, ref L2 (row 5)100.0 Ω100.1 Ω101.4 Ω+1.32% (converged to 0.26 %)
OSH 6L L2 stripline, ref L1/L3 (row 6)50.0 Ω50.2 Ω48.6 Ω-3.17% (converged to 0.15 %)
OSH 6L L2 diff stripline, ref L1/L3 (row 7)90.0 Ω89.8 Ω87.1 Ω-3.04% (converged to 0.15 %)
OSH 6L L2 diff stripline, ref L1/L3 (row 8)100.0 Ω99.3 Ω95.9 Ω-3.47% (converged to 0.18 %)
OSH 6L L3 stripline, ref L2/L4 (row 9)50.0 Ω50.0 Ω49.0 Ω-1.97% (converged to 0.07 %)
OSH 6L L3 diff stripline, ref L2/L4 (row 10)90.0 Ω89.9 Ω87.4 Ω-2.84% (converged to 0.11 %)
OSH 6L L3 diff stripline, ref L2/L4 (row 11)100.0 Ω99.1 Ω96.0 Ω-3.13% (converged to 0.12 %)
JLCPCB JLC04161H-7628 top microstrip, ref L250.0 Ω—47.5 Ω-4.93% (converged to 0.06 %)
JLCPCB JLC04161H-7628 top diff microstrip, ref L290.0 Ω—88.5 Ω-1.67% (converged to 0.10 %)
JLCPCB JLC04161H-7628 top diff microstrip, ref L2100.0 Ω—99.6 Ω-0.44% (converged to 0.10 %)
Basis

Every stackup and width is read from the cited fab page, with its URL and retrieval date kept alongside the result. The comparison is against the fab's printed predicted impedance where it gives one, otherwise its target. Mask is modelled conformal from the fab's published coating thicknesses. Nothing is fitted to the fab numbers.

Return-path check

Pre-compliance screen: 1 return-path finding before stitching, 0 after. A clock trace with a 0 MHz knee crosses a split in its ground plane on a four-layer synthetic board. One stitching capacitor within 21.4 mm of the crossing gives the return current a path and clears the finding. The radiated figures below are closed-form pre-compliance estimates, not a compliance test; only measurement in an accredited chamber shows compliance.

Estimate (worked-example inputs)Radiated (dBµV/m)Class B limit (dBµV/m)Margin (dB)Result
Differential-mode loop at 50 MHz52.8440.0-12.84over the limit
Common-mode cable at 50 MHz46.4440.0-6.44over the limit
BandClass B limit (dBµV/m)
30 to 88 MHz40.0
88 to 216 MHz43.5
216 to 960 MHz46.0
above 960 MHz54.0
Basis

Limits: FCC 47 CFR 15.109(a) Class B, 3 m, quasi-peak. Checker and closed forms: Ott small-loop and short-dipole estimates, run on the committed worked example. The estimate inputs are our own worked-example inputs, not figures quoted from a textbook. Knee frequency from rise time by the Johnson and Graham rule; a stitch counts when it sits within a twentieth of a wavelength at the knee.

Trace current capacity

10 of 13 published trace-current cases land within 15% of the open reference, the best of them within 12.5%. Outer and inner layers, with and without a back plane, two copper weights, all at a 20 K rise. The reference is Adam 2007 (Haus der Technik), an open paper with its own simulations and correlation. The misses are the narrowest traces, where we carry slightly more current than the paper, and the grid is converged there.

Current at a 20 K rise, NativeCAD against the open published reference, thirteen cases on a plus or minus 15 percent band
TraceAdam 2007NativeCADDifference
5 mm, 1 oz outer7.10 A7.74 A9.0%
5 mm, 1 oz outer, back plane11.00 A11.74 A6.7%
5 mm, 1 oz inner7.30 A7.82 A7.1%
2 mm, 1 oz outer3.90 A4.38 A12.5%
5 mm, 1 oz outer7.57 A7.74 A2.2%
5 mm, 2 oz outer10.71 A11.00 A2.7%
10 mm, 1 oz outer12.51 A12.88 A2.9%
2 mm, 1 oz outer, back plane5.67 A6.53 A15.3% narrow trace
5 mm, 1 oz outer, back plane11.02 A11.74 A6.5%
5 mm, 2 oz outer, back plane15.58 A16.64 A6.8%
10 mm, 1 oz outer, back plane18.21 A18.98 A4.2%
1 mm, 1 oz outer2.36 A2.89 A22.7% narrow trace
1 mm, 1 oz outer, back plane3.43 A4.17 A21.6% narrow trace

Limits used below: 68.3 A/mm² outer, 34.2 A/mm² inner, at a 10 K rise. A 0.3 mm drill via with 25 µm plating has 0.026 mm² of barrel and carries 0.95 A at that rise.

ULX3S rail checkSolvedLimitResult
+3V3 — Peak current density, B.Cu20.5 A/mm²68.3 A/mm²PASS
+3V3 — Busiest via current0.48 A1.25 APASS
+3V3 — Trace rise0.024 K10.000 KPASS
+1V1 — Peak current density, In1.Cu14.3 A/mm²34.2 A/mm²PASS
+1V1 — Busiest via current0.30 A1.25 APASS
+1V1 — Trace rise0.035 K10.000 KPASS
Basis

Model: the NativeCAD board thermal solver on a 5 in by 3 in epoxy-glass board in still air, trace along the long edge. Rail currents, current density and via currents come from the committed ULX3S power-delivery solve; the load currents are the assumptions listed with that case. Limits from the closed-form fit on a 1 mm wide reference trace.

Channel COM, checked against the reference

7 of 7 channels agree with the IEEE 802.3 reference implementation to under 0.001 dB, far inside the ±0.1 dB correlation window. Every channel clears the 3 dB Channel Operating Margin limit, from a 100 mm trace to a 1000 mm route with vias and three crosstalk aggressors.

ChannelIL at fb/2AggressorsNativeCADReferenceDifference
short_100mm1.5 dB0COM 7.76 dB (passes the ≥3 dB limit)7.76 dB0.000 dB
mid_300mm4.5 dB0COM 7.86 dB (passes the ≥3 dB limit)7.86 dB0.000 dB
long_700mm10.5 dB0COM 6.94 dB (passes the ≥3 dB limit)6.94 dB0.000 dB
mid_300mm_via4.6 dB0COM 4.32 dB (passes the ≥3 dB limit)4.32 dB0.000 dB
mid_300mm_xt4.5 dB3COM 7.97 dB (passes the ≥3 dB limit)7.97 dB0.000 dB
long_700mm_via_xt10.6 dB3COM 5.58 dB (passes the ≥3 dB limit)5.58 dB0.000 dB
vlong_1000mm_via_xt15.2 dB2COM 4.44 dB (passes the ≥3 dB limit)4.44 dB0.000 dB
Basis

Annex 93A style COM with Tx FFE, CTLE and DFE on 53.125 GBd PAM4, 802.3ck-style parameters. Each channel's S-parameters go through the same optimisation in NativeCAD and in PyChOpMarg 3.1.2, the open-source Python Annex 93A/178A COM that its author correlates against the IEEE MATLAB code. Equalizer settings chosen by the two agree on every channel.

Get this breakdown for your board

Bring KiCad, Gerber or IPC-2581. NativeCAD gives you IR drop and current on every rail, impedance on every controlled trace, weave skew on your glass, eyes on your fastest links and life on every via, before the first panel is built.

Boards: Antmicro Signal Integrity Test Board, Apache-2.0; ULX3S by Radiona and EMARD, modified MIT. Measured VNA reference: antmicro/gerber2ems, Apache-2.0. Reference bands: Samtec, Isola and Simbeor, IPC-TR-579. Built by FeatureBoard.

More demos

All demos →

Build your own part with NativeCAD

Free for education and makers with a registered key · $200 per seat per year · Kernel SDK for products.