Skip to content

The Windows workbench

The workbench is antennaknobs packaged for Windows: the same program as pip install "antennaknobs[web]", frozen with its interpreter and its compiled solver so there is nothing to install. Download, unzip, double-click.

  1. Download antennaknobs-workbench-windows.zip from the latest release (the direct link is releases/latest/download/antennaknobs-workbench-windows.zip; releases before v0.73.0 shipped the Python package only). The release also carries antennaknobs-workbench-windows-v<version>.zip: the same file, named with its version so a saved copy says which release it is. The version-less name is what keeps the link above pointing at the newest release, so either download is fine.
  2. Before extracting, right-click the downloaded zip, choose Properties, tick Unblock and click OK. Windows marks a downloaded file, every file extracted from a marked zip inherits the mark, and unblocking the one zip before it becomes several hundred files is the easy moment: the “Windows protected your PC” screen never appears, and the files keep their own dates instead of the download’s. Then unzip it anywhere. Keep the folder together — the two executables need the _internal runtime beside them, and a lone copied-out .exe is the one way a correct download still fails.
  3. Double-click antennaknobs-workbench.exe. A console window opens, the server starts on this computer at http://127.0.0.1:8000, and your browser opens at it.

Keep the console window open while you work; closing it, or Ctrl-C, stops the server. Nothing is installed, and the only thing written outside the folder is your own designs folder (below) — delete the workbench folder to remove the program. The server listens on 127.0.0.1 only, so nothing on your network can reach it.

The page shows the running version just below the bold “AntennaKNoBs” in the upper left, so you can always tell which release you launched. To update to a new release, extract the whole new zip into a fresh folder rather than copying just the .exe over an old one — the exe runs whatever _internal sits beside it, so a copied-in .exe next to an old _internal runs the old code under the new file name, with no sign of that beyond the version shown on the page and in the console’s startup line. If the console says the new version and the page still looks like the old one — no version under the title, a missing view in the rail — the browser has kept a cached copy of the page for 127.0.0.1:8000: press Ctrl+F5 (Ctrl+Shift+R in Firefox) once, or open the address in a private window.

First launch takes appreciably longer than the rest: Windows scans the unpacked folder once. Measured on a laptop, the self-test ran 17.7 s cold and 2.2 s warm, and the warm number is the one you live with.

Options, from a PowerShell or Command Prompt window in the folder:

antennaknobs-workbench.exe --port 8123 serve somewhere else
antennaknobs-workbench.exe --no-browser print the URL only
antennaknobs-workbench.exe --selftest prove the bundle and exit
antennaknobs-workbench.exe --nec5-exe PATH use the NEC-5 engine at PATH
antennaknobs-workbench.exe --nec2-exe PATH use the NEC-2 engine at PATH
antennaknobs-workbench.exe --settings PATH start from this settings.toml

A settings.toml sets where the workbench starts: its switches, which analyses a pick runs, ground, solver slots and engine paths. See Where the workbench starts.

The port is worth leaving alone. Your browser keeps what it remembers about the workbench — which views are pinned to the rail, rail or grid, light or dark — against the address it visited, and the address is the port. Launching on 8000 every time is what carries those across restarts. If something else on the machine already holds 8000, the workbench takes a free port instead and the console says so; that window starts with the default rail.

--selftest is worth running once if you are unsure the download is intact: it solves a known antenna and checks the answer against the value the unfrozen package produces, then exits.

Each settings file is one way of starting, so two shortcuts can start the workbench two ways. Say one run should leave every engine deck and printout in a folder with the frequency sweep off, and the other should sweep and capture nothing. Keep the everyday settings in settings.toml, and write the other way into a second file beside it, capture.toml:

[switches]
freq_sweep = false
[capture]
dir = 'C:\ak-captures'

Then make a shortcut that starts from it:

  1. Right-click antennaknobs-workbench.exe and choose Send to → Desktop (create shortcut). On Windows 11, Send to is under Show more options.
  2. Right-click the new shortcut, choose Properties, and at the end of the Target box type a space and --settings "C:\Users\you\.antennaknobs\capture.toml", with your own user folder in place of you.
  3. Rename the shortcut to say which it is, such as antennaknobs (capture).

A second shortcut made the same way, without the flag, starts from settings.toml. The capture folder is created on the first run, and the console window’s startup summary names the settings file each shortcut started from. Save as my defaults writes to that same file, so each shortcut keeps its own defaults. An [engines] table serves only the file it is in, while a NEC5_EXE.txt beside the program serves both shortcuts.

Your own designs go in your designs folder, not inside the workbench folder:

%USERPROFILE%\.antennaknobs\designs

that is, C:\Users\<your user name>\.antennaknobs\designs. The workbench creates it when it starts, with a TEMPLATE.py inside that makes a good starting point: copy it, rename the copy, and edit that. The folder name starts with a dot, so a file dialog may not offer it; pasting the path into Explorer’s address bar always works.

  • A .py design in it appears in the design picker under Your designs as user.<file name>. Press the ⟳ button beside Open… to pick up a new file; there is no need to restart. (The hosted app has no designs folder of yours to read, so a .py design needs this installed workbench.)
  • A file in a subfolder is named by its path: mydesigns\my_dipole.py is user.mydesigns.my_dipole, grouped under Your designs / mydesigns. Folders whose names start with _ or . are skipped.
  • A design is a small Python program, so the first time a new one loads the workbench asks whether to allow it. For a file you are writing yourself, choose Allow + my edits; then each save loads without asking again, and ⟳ with your design selected reloads it and re-solves.
  • .nec, .ez, .maa and .ssn files in the folder show up the same way, and never need allowing.

Don’t add files under _internal\antennaknobs\designs: that is the built-in catalog, read once when the workbench starts, and a new release replaces it. To keep your designs somewhere else, set the ANTENNAKNOBS_USER_DIR environment variable to that folder before starting the workbench.

The workbench solves with momwire out of the box. If you own a licensed NEC-5 engine it can drive that too, as a second engine beside momwire — see NEC-5 as a third engine for what that buys you (the workbench folder carries momwire; the PyNEC engine of the pip install is not in it). antennaknobs never bundles, downloads, or hosts the engine.

Put the engine’s full path on one line in a text file named NEC5_EXE.txt beside antennaknobs-workbench.exe, then start the workbench again. The NEC-5 tab appears in the solver panel.

The same door, for an engine you may already own: put the path to a NEC-2 console binary on one line in NEC2_EXE.txt beside the executable (or start with --nec2-exe PATH, or set NEC2_EXE), and antennaknobs drives it as a subprocess — see NEC-2 as an external engine. 4nec2 installs one as nec2dxs*.exe; nec2c and nec2++ are free. No NEC-2 is bundled on purpose: nec2++ is GPLv2, and shipping it would change this download’s licence.

The NEC-2 tab appears in the solver panel the same way the NEC-5 one does, and --engine nec2 reaches the same engine from the command line.

A licensed NEC-4.2 binary of your own is reached the same way: its path on one line in NEC42_EXE.txt beside the executable, or --nec42-exe PATH, the NEC42_EXE variable, or nec42_exe under [engines] in settings.toml. The NEC-4.2 tab appears in the solver panel, and the startup line NEC-4.2: in the workbench’s window confirms the path. EZNEC Pro+ keeps the one its External NEC-4.2 slot runs in its Docs folder too (NEC42W64CL.exe). See NEC-4.2 as an external engine. None is bundled: NEC-4.2 is licensed per user by LLNL.

If you run EZNEC Pro+, the engine is already on your disk. EZNEC keeps it in its Docs folder — not under Program Files, where people look first — and the filename carries a build suffix, so it is NEC5CL_x13.exe rather than a bare NEC5CL.exe. Look for:

C:\EZNEC 7.0\Docs\NEC5CL_*.exe

and copy the name you actually find. If you are not sure which engine EZNEC is driving, open Docs\LastRun.log — EZNEC records every run there as Running ext engine <full path>, which is the path to paste.

If you start the workbench from a window rather than by double-clicking, you can name the engine on the command line instead. The flag reads the same in PowerShell and Command Prompt, and wins over the file:

antennaknobs-workbench.exe --nec5-exe "C:\EZNEC 7.0\Docs\NEC5CL_x13.exe"

The NEC5_EXE environment variable works too: it wins over the file and loses to the flag. So does nec5_exe under [engines] in settings.toml, which loses to the variable and wins over NEC5_EXE.txt.

antennaknobs-cli.exe in the same folder is the same program’s command line — what python -m antennaknobs runs for someone who installed from PyPI, so the CLI reference is its documentation. Open a PowerShell window in the folder (Shift+right-click the folder background, “Open PowerShell window here”) and put .\ in front of the name:

Terminal window
.\antennaknobs-cli.exe --help
.\antennaknobs-cli.exe sweep --param nominal_nsegs --builder dipoles.invvee:dipole --engine momwire:bspline

The second line is a convergence study: one cold solve per segment count, a table of R, X and the change in reflection coefficient per rung, and a Richardson-extrapolated Z* under it. With no --fn the chart opens in a window with the matplotlib toolbar, so the Smith chart zooms and pans; add --fn out.png to write the picture to a file instead.

It finds NEC-5 and NEC-2 the way the workbench does — the same NEC5_EXE.txt and NEC2_EXE.txt beside it, the same variables and the same settings.toml — so an engine set up once is set up for both. It does its work by running antennaknobs-workbench.exe, which is why the two executables and _internal have to stay together.

The workbench is the no-install path. If you want antennaknobs as a library — to write your own designs or script a sweep — install the package and follow the Quickstart instead. The two are the same code; only the packaging differs, and a pip install puts the same antennaknobs command on PATH.