Skip to content

Releases: RFingAdam/lineforge

v2.2.0 — Relicense to AGPL-3.0-or-later

13 May 14:24

Choose a tag to compare

License change: GPL-3.0-or-later → AGPL-3.0-or-later.

The AGPL closes the "wrap as a paid SaaS without contributing back" gap that GPL leaves open — GPL's copyleft only triggers on distribution, while AGPL's also triggers on network use. For an engineering calculator that someone could reasonably wrap in a paid SaaS, that distinction matters.

The atlc / atlc2 lineage is preserved. GPL-3.0 → AGPL-3.0 is explicitly permitted by GPL-3.0 §13. Existing GPL-3.0 forks remain valid under their original terms; future commits and the v2.2.0 release are AGPL-3.0-or-later.

Also in this release

  • Materials database fix: corrected scalar er/tan_delta defaults for Isola 370HR (3.4 → 4.04, 0.005 → 0.021) and Megtron 6 R-5775 (3.0 → 3.71, 0.001 → 0.002) to match canonical datasheet values at 1 GHz. The frequency-resolved er_freq tables were already correct; only the no-frequency-specified fallback was wrong.

No API changes. All 469 tests pass.

See CHANGELOG.md for the full entry.

v2.1.0 — RF pad analytics + path budget + design rules

13 May 02:09

Choose a tag to compare

Five new APIs distilled from real RF design work

This release adds tools developed during the L3 SIG1 stripline and 0.4 mm/0.3 mm/U.FL pad case-study sessions (see examples/09_*, examples/10_*). Each is both a Python function and an MCP tool.

pad_capacitance — finite-pad C with proper fringing

Three methods (parallel-plate, Yamashita-Atsuki, Hammerstad-Jensen) bracket the answer. YA is the default for finite square or near-square pads.

import lineforge
r = lineforge.pad_capacitance("0.4mm", "0.4mm", h="2.73mil", er=3.7)
print(f"C = {r.C_fF:.1f} fF, RL @ 6 GHz = {r.return_loss_dB(6e9):.1f} dB")
# C = 104.6 fF, RL @ 6 GHz = 20.2 dB

pad_relief_advisor — rank stackup options against an RL target

advice = lineforge.pad_relief_advisor("0.4mm", "0.4mm",
    options=[...], band_max_ghz=6.0, rl_target_dB=30.0)
print(advice.recommendation)  # "C: relieve L2+L3 → L4"

classify_pad — Category 1 / 2 / 3 decision framework

Codifies "follow reference design vs optimize freely vs standard practice":

  • Category 1: Wi-Fi/LTE modules, U.FL/SMA connectors, RF ICs → don't deviate
  • Category 2: Your own triplexers, diplexers, matching networks → optimize
  • Category 3: DC, low-speed, power pads → standard practice

laminate_lookup — fuzzy name + frequency interpolation

r = lineforge.laminate_lookup("FR4 prepreg")              # → εr=3.7
r = lineforge.laminate_lookup("RO4350B", frequency_ghz=10) # interpolated

rf_path_budget — end-to-end RL across source pad + trace + end pad

budget = lineforge.rf_path_budget(
    freq_ghz=[0.7, 2.5, 6.0],
    source_pad=src_pad, trace=TraceSpec(Z0=56.0), end_pad=ufl_pad,
)
print(f"Worst RL: {budget.worst_rl_dB:.1f} dB")

What's new in MCP

All five APIs are now MCP tools, callable from Claude Desktop / Claude Code / any MCP client. Total tools: 21.

Testing

469 tests pass (up from 418). 51 new tests covering all five APIs. Lint clean. No breaking changes.

Migration

None needed — purely additive. All v2.0.0 APIs continue to work unchanged.

See CHANGELOG.md for the full list of changes.

v2.0.0 — atlc3 is now lineforge

11 May 23:13

Choose a tag to compare

atlc3 → lineforge

The project has grown well past being a "successor to atlc/atlc2" into a
programmable, agent-friendly transmission-line platform. v2.0.0 reflects
that scope with a name change.

What's the same

  • All function names, geometry models, result fields, solver behavior
  • atlc2 BMP / MoreColors.txt / .txt script-file drop-in compatibility
  • Every v1.1.0 feature: multi-layer stacks, Touchstone export, optimizer,
    three-wire solver, GUI launcher, L3 SIG1 EM validation case study

What's new (the rename)

Was Now
pip install atlc3 pip install lineforge
import atlc3 import lineforge
from atlc3 import … from lineforge import …
atlc3 <subcommand> (CLI) lineforge <subcommand>
atlc3_kernel (Rust crate) lineforge_kernel
.atlc3.json (config) .lineforge.json

Migration

Three find-and-replaces in your project:

import atlc3        →  import lineforge
from atlc3          →  from lineforge
atlc3 <cmd>         →  lineforge <cmd>

Why "lineforge"

Picked from a 25-name Monte Carlo simulation (10,000 trials weighted across
memorability, brandability, domain-fit, pronounceability, SEO uniqueness,
length, and spoken cadence). lineforge ranked #1 with a mean score of
69.73 (next-best available was wireforge at 65.70).

Lineage

The atlc3 PyPI package is frozen at 1.1.0 as legacy. All new
development happens under lineforge. The original David Kirkby atlc (2002)
and Brian Beezley atlc2 (2010) attribution remains in the Acknowledgments
and the atlc2-format BMP / MoreColors.txt / .txt script-file compatibility
is preserved unchanged.

See CHANGELOG.md for the full breaking-change list.

v1.1.0 — three-wire solver + GUI launcher + L3 SIG1 EM validation

11 May 21:44

Choose a tag to compare

Highlights

Three-conductor analytical solver (B1 / B2 / B3)

  • atlc3.analytical.three_wire — closed-form Y-matrix decomposition for three-conductor systems
  • atlc3.geometry.three_wireWirePosition model and ThreeConductor geometry
  • Bitmap solver Laplace.solve_modes extended to the 3-conductor case via Y-matrix factorisation, matching analytical within ~1%
  • Boundary-weighted floating-conductor BC for faster convergence with one Q-conserving wire
  • New theory doc docs/theory/three_wire.md

GUI ergonomics (C-final, E9)

  • atlc3 gui — one-command CLI launcher: starts FastAPI backend, opens browser
  • atlc3 gui --reload — backend hot-reload for GUI development (closes #28)
  • examples/08_gui_walkthrough.md end-to-end walkthrough

Case study: L3 SIG1 openEMS validation

  • New examples/09_l3_sig1_em_validation/ directory: four standalone openEMS scripts plus a writeup
  • Cross-validates atlc3's Wadell closed-form against 3D FDTD on a real RF design point (800 MHz – 6 GHz triplexer common port)
  • Microstrip Z₀ matches openEMS MSLPort within ±1.6% across W = 3.15 – 6.9 mil
  • Asymmetric stripline Z₀ matches Wadell T → 0 within −2.1% via V/I field probes
  • Width-shift physics reproduced within 1 Ω

Compatibility

  • All 1.0.0 APIs continue to work unchanged
  • No breaking changes

See CHANGELOG.md for the full list of changes.