Repository navigation
Qucs-S enhanced v26.1.5
Qucs-S enhanced 26.1.5
Claude Code in Qucs-S: a dock where you talk with Claude Code about your
circuits, simulations and files - and where Claude can open, change and
simulate schematics in the window in front of you. One bundle per platform
is attached (macOS Apple Silicon and Intel, Linux x86_64 and arm64, Windows
x64 and arm64); SHA256SUMS.txt lists them. The macOS bundles are ad-hoc
signed, not notarised: right-click the app and choose Open on first launch.
No bundle includes ngspice: install it separately and point Application
Settings > Locations > Ngspice at it if it is not on PATH (on Windows at
ngspice_con.exe). Nor Claude Code: the dock needs the claude program
installed (claude.com/claude-code) and signed in once in a terminal.
New in 26.1.5
- A PRBS source and an eye diagram. sources > V(PRBS) is ngspice's
PRBS source: the bits of a maximal-length shift register of 2 to 31
stages between U1 and U2, or PAM4, Gray coded on four levels (for an
ngspice built with the PRBS source). diagrams > Eye Diagram, as a
sampling oscilloscope shows one: each trace folded a few UIs at a
time, drawn as a density or as the traces, with its height and width,
jitter, levels, Q, PAM4's three eyes and a mask measured beside it.
The unit interval is the Tbit of the PRBS source the trace comes from,
else told from its crossings; Claude's get_dataset measures the same
eye. The example: NGspice features/PRBS_eye_diagram.sch. - From a stress test of schematics up to 25,000 transistors
(docs/feature_gaps/2026-10-01-stress-test-bug-report.md): more than
999 nets simulate whole - ngspice's write of them all wrote nothing,
and the run read as a success with an empty dataset; a run that
writes no results fails, the dataset from before kept. Components
free what they own (gigabytes leaked over a session of large
schematics). At 25,000 parts a check takes 0.6 s (was 187 s), an edit
1.2 s (151 s), an undo 2.4 s (76 s). Undo steps are kept compressed
and datasets read from the disk where they lie: a 100,001-point run
of 252 vectors peaks at 1.0 GB, not 3.8 GB. Claude's Select All and
move take the grounds along, and a preview keeps the selection.
Claude's check_schematic notes a transient step too long for its
sources' edges. - The Projects panel's right-click menu has Unlink Project - a linked
project's link removed from the workspace, after asking, its files
left where they are - Open Project, the project right-clicked, and
Close Project. A link that leads nowhere is listed, greyed, for Unlink
Project to remove. - The findings of a bug hunt on the PRBS source, the eye diagram and the
stress fixes (docs/bug_hunts/2026-10-01-prbs-eye-and-scale.md) fixed.
The eye folds each trace at its own source's Tbit and Coding, as the
run the data is of gave them (its netlist read as ngspice reads it:
100P is 100 ps), and says when the source has changed since; its
Levels are as the source is coded unless set (a PAM4 source's three
eyes); 100,000 bits are drawn as traces in about the density's time,
not 11 to 59 s a repaint. Check Schematic gives an error for a V(PRBS)
value ngspice refuses and for a DC sweep of what ngspice's dc cannot
sweep, and notes a .TR integration method ngspice does not take. A run
with no results leaves the dataset as it was, in a folder that takes
no new file too. Claude tells two parts of one name apart (R1, R1#2),
and open_document says why a document could not be opened, and why a
Verilog-A module was not loaded with ngspice 42 too, which does not
name the model. library/MESFETs.lib is back: the Curtice level 1
MESFET as ngspice B sources. - Filter by name takes regular expressions - the File Browser's, the
Projects and Content panels' and a ZIP archive's: a name is found when
it holds the text or the text, as a regular expression, finds a match
in it, whatever the case (^amp, .sch$, amp|filter, r\d+). Where a row
is a path (docs/README.TXT), the name at its end is tried too. Text
that is no regular expression (*.sch) is taken as typed, and a warning
in the box says why. - New Zip… in the File Browser's right-click menus and its ⋯ menu: an
empty ZIP archive in a tab (untitled.zip). Files and folders dropped on
it - from the File Browser, the Finder or the Explorer - or added go
in; Save asks where, offering the folder the menu was of and a name
free there (Archive.zip, Archive 2.zip). - Simulators Settings > Netlist > Include ngspice_mathfunc.inc (limexp,
step, stp), on by default. The installation's file defines those
functions of expressions written for Qucsator, which ngspice has not;
off, an ngspice netlist leaves its .INCLUDE out and names no file of
the installation. - Claude's edit_component sets 'flags' given alone - .OPTIONS options
without a value - which it answered as done and left unchanged;
'replace_equations' with no 'equations' or 'flags' to replace the list
with is refused. Each argument of edit_component given alone is tested
to change the part or be refused. - Double-click a tab and its pane fills the window: the other panes and
the docked panels are hidden; the menus, toolbars and status bar stay.
Double-click a tab again, or Restore Panels in the tab bar's corner,
and all comes back as it was, at its sizes, with any panel that came up
meanwhile (a simulation's console) in front. Also View > Panes >
Maximize Document (Ctrl+Shift+F12) and the tab's right-click menu. - Binary datasets: an ngspice or Xyce run whose output is larger than
10 MB keeps name.dat.ngspice binary - the same blocks as text, the
simulator's own doubles, every digit, an index at its end - and its
raw file is not kept beside it. For 12,503 vectors of 11,715 points
(1.17 GB): written in 0.7 s instead of 45 s, 114 MB of memory instead
of 2.5 GB, 1.2 GB on the disk instead of 4.5 GB, the last vector's
graph in 11 ms instead of 1.2 s. Smaller runs stay text, which now
keeps every digit too. The diagrams, Claude's tools and the optimizer
read both; Save as Text in the Content panel's menu writes one out as
text. - Edit > Copy Circuit as Image, also in the canvas's right-click menu:
the circuit alone onto the clipboard - its parts, wires, labels and
drawings, without the diagrams, the simulation and equation blocks and
the markers - where Copy as Image puts the whole page. - NgOpt, ngspice's optimize, has the methods the enhanced ngspice
gained: CMA-ES, Bayesian optimization (tens of simulations for a slow
circuit) and a trust region, beside differential evolution, particle
swarm, simulated annealing, Nelder-Mead and Levenberg-Marquardt.
Polish finishes a global search with a local one, More starts runs it
again from Latin-hypercube points, and a Constraints tab holds
expressions within limits while it minimizes or fits. The status log
and Claude's simulate say why the search stopped - an annealing, or a
search stopped at its iterations, read as no optimum before - each
constraint at the end and the start that won; apply_optimum writes in
nothing of no solution or a missed constraint. Claude is told every
method and when to choose it (describe_component_type .NGOPT,
ngspice_commands optimize). - Application Settings > Locations > Library Search Paths: folders of
component libraries besides the installed ones and user_lib - a team's
share, a vendor's folder - each a section of the Libraries panel, its
libraries read when opened or searched. A placed part's library is
found there when it is not where it was, Create Library saves into one
or the project, and Claude reads and sets the list and finds,
describes and places their parts. A library that cannot be read is
greyed with the reason, not a box that stopped the listing; the
subcircuit search paths are saved when applied, not only when Qucs-S
closes. - Claude makes and brings in libraries: create_library makes one of the
open project's subcircuits as Create Library does - into user_lib, the
project or a search path folder, each part with a description, a
library there replaced only when asked (the old one to the trash) -
and import_library brings a Qucs-S or SPICE library file in;
list_libraries lists them as the Libraries panel does, each part with
how to place it. get_dialog and set_dialog read and set a list's
ticks. The Libraries panel follows its folders: a library copied in,
made or taken away shows without a restart. - A library device's Verilog-A in the project: a schematic that uses a
device of a library with Verilog-A (one on the search paths, in
user_lib) gets the projectLibraries/<library>/with a relative link
to each source - in the Content panel, opened read-only with a note
saying whose it is - and its model compiled beside the link, so the
library's folder is never written; OpenVAF is given the file the link
leads to, so its includes are found. Kept when a schematic is saved,
the project opens and before a simulation; taken away with its model
when no schematic uses the device; only what Qucs-S put there, in the
record's own folder (its record says what - a record edited by hand,
or come with a project, takes none of your files away). The link is
never written through: Claude's tools and the save dialogs refuse it,
as the library's own file would change. A copy where no link can be
made (Windows, a disk without links). With no project, a library
folder that cannot be written - a read-only share - has its model
compiled into the cache. A placed part names its library by its name
when that finds it, so a schematic finds it on another computer's
search paths. A part takes the first library of its name that has it -
one of the name without it, made later in the project, no longer takes
it -, of two that have it the one the project linked its Verilog-A
from; Check Schematic says which libraries of the name there are, and
warns when two have a part. - The Content and Projects panels have the File Browser's "Filter by
name" box. Content shows only the files whose names hold what is
typed, whatever its case - a folder's name finds the files in it - in
their categories and folders, opened, and its header says how many it
found. Projects lists only the projects and folders whose names hold
it (".." always, to go back up). A row a filter hides is no longer
selected, so no menu, drag, Open or Delete acts on it; cleared, every
row is back as it was. - Claude in the dock is told the Qucs-S tools' instructions whole.
Claude Code keeps 2,048 characters of an MCP server's instructions
unless CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH says more (Claude Code
2.1.280 and later), and Qucs-S's run to about 6,800: the dock sets it.
Claude Code started from a terminal is pointed to the resource
qucs://instructions, which holds them whole - or export
CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH=8000 before starting it. - export_data: Claude writes a diagram's curves, or a dataset's
variables, out as the Export tab does - CSV, TSV, an Excel workbook,
text, NumPy or a dataset; complex values as real and imaginary parts,
magnitude and phase, or dB and phase. - From a check of Claude's control of the whole window - an RC low-pass
built, simulated, measured, plotted and changed through menus, dialogs
and docks (docs/feature_gaps/2026-10-05-claude-control-check.md): a
part's value set in its Properties dialog is applied (it showed in the
dialog, and OK wrote the old one back); a -3dB marker is placed on a
trace drawn in dB; Diagram Properties' tables are read as text, and a
variable chosen there takes a trace; the Document Settings' Frame tab
is in get_settings and set_settings; set_dialog names each control it
set; send_input reaches the dialog that waits for an answer;
add_analysis takes properties as add_component does. - From an assessment of the tools after a day's use
(docs/feature_gaps/2026-10-01-claude-mcp-api-assessment.md): a trace
shows a part of a complex value - dB, phase in degrees, magnitude,
real or imaginary - and its markers, a table and the axis with it (a
Shows box in the diagram dialog, 'part' in Claude's trace tools);
simulate reports the values ngspice's optimize found and, with
apply_optimum, writes them into the parameters and parts the knobs
name, one step to undo; the knobs Qucs-S writes after the run are no
longer told as a change of yours; a property a block repeats (.NGOPT's
Knob and Target, ...) takes a list; describe_component_type gives the
pins of a part turned or mirrored, and connect says when a pin faces
away from the other end or a wire crosses a part's body; db(S[2,1])
evaluates. - The 30 findings of a bug hunt on data in and out
(docs/bug_hunts/2026-09-30-data-and-wishlist.md) fixed. Netlists: a
net with two names - a label and a ground, or two labels - is one node,
not two; a subcircuit port named gnd, or as another net's label in
another case, no longer joins nets; two ports on one net each get a
node of their own; a subcircuit with two ports of one number no longer
crashes the netlister. - A schematic's results follow its Data Set: Claude's clean_scratch and
copy_document and a new data display take the Data Set's datasets,
never an imported one, and an import never takes a Data Set's name. - Export and import as they go: the Export tab writes a table row by row
(500,000 points of 4 variables as CSV in 198 MB of memory, not 1 GB; a
workbook in a third of the time), shows how far it is with Stop, and
takes the format from the file's suffix. A CSV is imported as rows, in
about a third of the time and memory. - Commands a simulation runs besides the simulator - a System command
part, ngspice's shell, the Octave script after a run - can be checked:
Simulators Settings > "Warn of commands a simulation runs besides the
simulator" (off by default) makes Check Schematic warn of each, and
Claude's simulate and tune refuse such a schematic unless
allow_commands is given. The SPICE file part's Perl preprocessor works
(it started its script as the program). - Claude's tools: the traces of a kept run or an import are named by
their dataset (ngspice/run1:v(out), m:gain) and taken back so; a
missing trace is hinted at in 3 ms, not half a second, beside a large
import; import_data refuses Qucs-S's own documents; a subcircuit
parameter's default and a symbol's prefix are checked as SPICE reads
them. - Claude reaches the whole window, from its own audit of what it could
and could not (docs/feature_gaps/2026-10-01-claude-full-control.md):
get_ui, set_ui and context_menu read and use the docks, panels,
toolbars, status bar, tabs and right-click menus; get_text, edit_text
and goto_line read and edit a text tab, unsaved edits included, as one
step to undo; console types a line into the Octave, Python or Terminal
dock, asked about each time, in Auto too; get_settings and
set_settings read and set the settings dialogs' fields by name;
simulate runs in the background, followed by simulation_status,
stop_simulation and wait_for; send_input clicks, drags and types where
no tool reaches; read_help reads the help that comes with Qucs-S;
rename_file and trash_file move and trash files, and undo moves them
back. The file dialogs Claude opens are Qt's, which it fills in. The
Claude Code panel and the Claude chip in the status bar stay yours
alone. - Simulation > Stop Simulation and Clear Simulation Console: the
simulation console's buttons as menu entries, with shortcuts to set. - The Projects panel shows which project is open: a green dot at the end
of its row, grey for the others, the tooltip saying which. - Application Settings > Appearance > Cut long file names after
(characters), 50 unless set: a longer name ends in "…" on its tab and
in the Claude Code panel, its extension always whole, and the tab's
tooltip gives the whole path. Never shows them whole. - Building a Verilog-A module marks its errors and warnings in the open
.va tab: a wavy line, a dot in the margin and the message as the
line's tooltip, gone with the next clean build. - The Content panel's view is "Flat" or "Sub-trees per folder", which is
now the default; a choice saved is kept. - Fixes: a CDL netlist wrote each .INCLUDE twice; on macOS Edit >
Delete's key was a chord, and Backspace and Delete delete again; an &
in a file's name was taken for a shortcut's mark on its tab; Create
Library said it succeeded when a subcircuit could not be loaded, and
the next netlist after it left out the model of a library part the
new library used; a library of a part's name without the part took
it, and its pins.
New in 26.1.4
- Claude's Qucs-S tools, reworked from the suggestions of a Claude session
that used them (docs/feature_gaps/2026-09-27-claude-mcp-architecture.md):
set_schematic takes parts and wires as JSON, checked against each type;
"preview": true and diff; get_netlist's netlist-to-part map; run_script
(JavaScript calling the tools, atomic when asked); the schematic, its
netlist, the dataset and the window's state as MCP resources, with change
notifications; structured results; MCP annotations, and what cannot be
undone asked about every time; questions to you in the dock before a file
is written over or unsaved changes are lost; the 22 most used tools in
every turn and short descriptions (65 tools about 9.6k tokens, from
17.5k). - qucs-s --mcp-server: the same tools with no window, over stdio, for any
MCP client ("claude mcp add qucs -- qucs-s --mcp-server"). On a machine
with no simulator installed, get_netlist and simulate say so and how to
choose one. - The Windows bundles now include Qt Qml (for run_script); the macOS disk
image grew by 2 MB for it. - From a second round of Claude's feedback on the tools
(docs/feature_gaps/2026-09-28-claude-mcp-api-feedback.md): arrange lays
a schematic out again by signal flow - parts in columns, two-pin parts
turned as schematics show them, every wire redrawn - keeping every net
(one step to undo); connect to "ground" gives a pin its own ground
symbol; set_schematic's .sch text has its values checked; an equation
block's answer lists its equations; a file edit not loaded (unsaved
changes) is told to Claude; the tools found when needed carry their full
description, and all descriptions are in plain English; get_netlist says
why a netlist could not be written, and the next one no longer leaves a
part out without a word. - From a third round (docs/feature_gaps/2026-09-28-claude-mcp-api-feedback-
round2.md): a ground's ref (GND#2) works in every tool that takes a part's
name; a number mistyped (1kk) is refused; add_analysis plots an
expression through a NutmegEq; simulate and tune save an untitled
schematic in the scratch folder; a preview leaves no file behind; a file
changed on disk is told as its file's, not the user's, even when changed
just after a save; every tool field is described. Fixed on the way: a
schematic saved with Save As did not know its new folder, so a
subcircuit or library beside it was not found until it was reopened. - The open findings of the bug hunts fixed: a spreadsheet, PDF or ZIP
archive Claude changes is loaded again, and Save asks before writing
over another program's changes; a PDF is followed through a delete;
nothing is written into a folder opened as a project (its Scratch is in
the cache directory), and the workspace and home folders are not
projects; /resume finds sessions through a symlink; a sheet named with
"%1" saves whole; dollars in indented or HTML code are not math; values
a damaged file holds (a callout's tip, xlsx columns and dates, a
waveform's cycles, a dimension's scale) stay in range; the wire healer
joins a node a lengthened diagonal wire lies over, and keeps a label on
a pin that is not there; a library named by its author's path is found
in user_lib beside the schematic. - The 32 findings of an hour of fuzzing Claude's tools
(docs/bug_hunts/2026-09-28-claude-tools.md) fixed: a call that comes
during a batch, script, tune or preview waits its turn, so a rollback
no longer takes it away; a source keeps its polarity through the JSON
form, and all 218 examples that netlist go through it unchanged; nodes
of a netlist imported in any case are one net; no message box holds up
a tool call; names are checked as the dialogs check them; a dataset
nested 100,000 deep and an eye diagram that never ended are refused. - ngspice_commands: a tool (and the resource qucs://ngspice-commands)
that tells Claude every command ngspice has - all 165 of help all and
the periodic analyses' dot cards - each in a line by category, with its
syntax, an example and how Qucs-S writes it. It asks the ngspice of the
settings what it has and says what that one lacks (a stock ngspice has
none of the 38 the enhanced build adds). scripts/check-ngspice-
examples.py runs every example through any ngspice. - From a fourth round (docs/feature_gaps/2026-09-28-claude-mcp-api-
feedback-round3.md): tune no longer writes "10k 330" into a part of
R = 330 (a number alone was read as its own unit); a SPICE run writes
its dataset where the schematic's DataSet property says, so a schematic
copied outside Qucs-S is read where it was simulated; get_dataset says
when a dataset is stale (the last run failed, or the netlist changed
since); a tool refuses an argument it does not have and names the one
meant; create_subcircuit keeps a ground on a wire stub, and a label on
a pin, in place; a ringing signal's frequency is measured where it
settles. - arrange in time proportional to the parts - 2,000 parts in a third of
a second (24 s before), 20,000 in about 2 s - and the same layout every
time (two runs differed on 66 of the 251 examples): a simulation block
no longer changes size at its first paint. A whole read of a schematic
over 200 parts lists the first 50 of each kind (236 KB to 40 KB). - From a fifth round (docs/feature_gaps/2026-09-28-claude-mcp-api-
feedback-round4.md): saving a subcircuit whose new symbol moves an
instance's pins joins each pin to its net again - a wire that ended on
it is drawn on to it, a port numbered anew is followed by its name -
and the parent's nets are compared before and after; a preview is no
edit (no stale dataset after one); an unknown key inside an argument (a
set_schematic part's rotaton) is refused as one at the top is, and
replace_component's records and redo's to are taken again - a CI check
now compares every argument a tool reads with its schema; tune follows
the value or its logarithm, whichever fits the runs, and sets a listed
value as written; simulate puts what Check Schematic found first;
names that are no file's name are refused. qucs-s --mcp-server
--workspace DIR gives a run a workspace of its own. - From end-to-end scenarios of the tools (docs/feature_gaps/2026-09-29-
claude-mcp-e2e-scenarios.md): create_subcircuit gives every part of the
group on a net that goes on outside the net's label inside (a divider's
second resistor was on nothing, and the divider read 5 V); tune draws
its secant on the value or its logarithm and the measurement or its
logarithm, whichever fits the runs (a bandwidth over a capacitance: 3
runs, not 9); check_schematic says when a library part or a subcircuit
could not be loaded. - Application Settings > Workspace: the workspace as it was, at the next
start - the project, the documents in their panes (the split, the
sizes, the one in front), the panels and tool bars, the window's size
and place - each part on or off; Forget It clears what is kept, and
after a run that did not end cleanly it asks first. The workspace
folder and "any folder is a project" moved there from Locations. - Edit Diagram Properties > Theme: the colour of each part of a diagram -
its background, the plot area, the frame, the grid (moved from
Properties), each axis (ticks, numbers, label), the title, a table's
texts, the legend's background, border and text. Each is Automatic -
as before: nothing under it on light paper, a white card on dark
paper, every part fitted to the background it is on - or a colour of
your own, with transparency. Start from Light, Dark or No background,
see it in a preview, and save it as the default for new diagrams.
Saved with the diagram; files without colours are saved as before.
Claude's add_diagram and edit_diagram take a theme too. - Edit Diagram Properties > Import: data files read into datasets beside
the schematic, as many as wanted - CSV, TSV, Excel (.xlsx, a sheet of
it), text in columns, NumPy .npy and .npz, Touchstone .s1p to .snp,
Qucs-S datasets - and listed in the Data tab next to the simulation's,
so measured and simulated curves share a diagram. Read again when the
file changes; the column that is x and a workbook's sheet chosen there. - Edit Diagram Properties > Export: a dataset's variables written to a
file for another program - CSV, TSV, an Excel workbook (a sheet for
each sweep), text in columns, NumPy arrays (.npz) or a Qucs-S dataset.
Check them, or take the diagram's traces; variables over one sweep make
a table, a row for each point, and a complex one two columns (real and
imaginary, magnitude and phase, or dB and phase). The tab says what
would be written before it is. - From the fifth and sixth rounds of Claude's feedback (docs/feature_gaps/
2026-09-29-claude-mcp-api-feedback-round6.md): create_subcircuit of parts
in a row keeps every net (a divider's R1 and R2 in one row landed both
pins of the instance on one wire, and v(mid) read 0 V); a part placed
beside another (near), a connect round a side or through points, a
label's text where it is asked, arrange keeping the parts where they are,
with an op-amp's feedback below or above it, or its supplies as labels;
a library part's pins named as its model names them (connect U1.inp);
brief answers from batch and simulate, before and after in one simulate
(compare), tune on two to four parts at once, and undo for the files a
call wrote; Check Schematic warns of an op-amp whose supplies nothing
powers and notes a DC source with its + on ground. - Library models under ngspice: a value written with a space keeps its
unit (C="30 pF" was 30 farads), a library Idc flows as a schematic's
does (the 741 macromodels sat at the negative rail), and a part whose
model is one component line (2,732 transistors, diodes and varactors)
is placed as that component. Every library part was run under ngspice:
4,039 of 4,224 pass, find_library_component says how each fared, and a
nightly CI job keeps the list. Ten parts' model names fixed. - From the seventh round (docs/feature_gaps/2026-09-29-claude-mcp-api-
feedback-round7.md): wires go round every part's symbol - a way a grid
step at a time where the usual shapes are blocked - not over an op-amp
or through a ground symbol; arrange draws a feedback network as one (Rg
standing under Rf, its ground below) and puts each label on the longest
free stretch of its net; replace_component no longer maps named pins by
number to a part without those names; the uA741's, AD825's and LM3886's
pins have names. - Check Schematic honours "a schematic must have a ground symbol" off
(Simulators Settings) and checks again when the settings change; reads
names without case for the SPICE simulators (labels Out and out are one
net, r1 beside R1 stops ngspice: an error); a part switched to shorted
joins its pins; a library part that cannot load is told with its cause
(docs/bug_hunts/2026-09-29-schematic-check.md). - Check Schematic as a design review: voltage sources in parallel or
shorted by a wire, an inductor across a source, a capacitor straight
across a pulse source, a negative capacitance, a 0 Ohm part, an AC
analysis with nothing to drive it, a NutmegEq reading a node no net
has, two names on one net, an op-amp input, a base or a gate with no
DC bias, an op-amp loaded under 1 kOhm; check_schematic's 'subcircuits'
walks into every subcircuit. Nothing found does not mean the circuit
works, and it says so. - From Claude's assessment after seven rounds (docs/feature_gaps/
2026-09-29-claude-mcp-api-assessment.md): describe_part (a library
part's pins with their sides and roles, its model, how it was tested);
max_chars on every tool, the answer cut and still JSON; tune's 'hold'
(limits a value must keep while it reaches its target) and 'compare'
(every measurement before and after); arrange's 'straighten' (a part
nudged a few grid steps so a wire between two pins that face each
other runs straight). - Library benches: each op-amp, transistor, FET and diode is put in a
bench under ngspice and its numbers checked against a range - 1,798
parts, 1,786 pass; describe_part and find_library_component say how
each fared, and the nightly job fails when a bench that passed fails. - From the eighth and ninth rounds: arrange finds a subcircuit's output
by its name, reads supplies by their names' sign, and gives bench
numbers with units; the 741 bench is a scenario of its own; a guide to
working with the tools is in the instructions. - The 26 findings of a bug hunt of the tools and Check Schematic
(docs/bug_hunts/2026-09-29-tools-after-round-9.md): a subcircuit that
uses itself is an error; source loops take in probes, controlled
sources and an ideal op-amp's output; every argument's JSON type is
checked against its schema; max_chars keeps JSON whole; library parts
named twice renamed. - From Claude's wishlist of 30 September (docs/feature_gaps/2026-09-30-
claude-mcp-wishlist.md): set_subcircuit_parameters sets a subcircuit's
parameters, make_symbol keeps them, and the instances in open
schematics follow them by name when it is saved (taking one away
wiped the instances' others, and taking all away their file); Vpulse
and Ipulse are one pulse under ngspice (with no period ngspice repeated
it, high most of the time); Vac and Iac have ACmag, an AC magnitude of
their own, and Check Schematic warns when an AC analysis's sources all
have magnitude 0, and when an equation is named as a net (under ngspice
it wrote over the node's voltage); the .va and .osdi files beside a
schematic are built and loaded with no project open, and a module
ngspice did not get is explained; each run keeps the netlist it was
given, so get_dataset tells a stale dataset exactly - of a copy,
outside a project, after tune without apply - and 'stale certain' says
so; get_dialog reads a tree (Find and Replace's results);
add_diagram's document: "data_display"; replace_component refuses a
by-number map that goes against the pins' roles and places (the
OpAmp's + input went to a 741's output) and offers one. - From the tenth and eleventh rounds: a preview leaves no data display
behind; an untitled schematic simulated in a project runs in
Scratch/untitled, and one outside the project writes nothing into it;
clean_scratch no longer trashes the scratch folder that schematics of
no project share; max_chars is taken as a text of digits too, as the
Claude Code panel sends it. - A data file plotted through Claude's tools (docs/feature_gaps/2026-09-30-
claude-mcp-csv-import.md): import_data brings a CSV, a workbook, NumPy
or Touchstone file in as a dataset beside the schematic, as the Import
tab does, and reads it again or removes it; an imported dataset's
traces are name:variable with no simulator's prefix (add_diagram,
add_trace and edit_trace gave them ngspice/, which read a file that is
never there), and the "no data" texts, list_documents and get_dataset
say where it came from and how its traces are named.
Claude Code dock
- View > Claude Code, or the Claude chip in the status bar, opens a
conversation with Claude Code beside the schematic. Claude works in the
workspace folder unless another is chosen in the dock, and the document
in front goes along with a prompt when its chip is on. Replies are drawn
as they are written: Markdown, code on a shade, and TeX math between
$...$ and$$...$$ typeset - fractions, roots, sums and integrals with
their limits, matrices, cases, aligned equations, Greek, units. - Conversations in tabs: New, or + by the tabs, opens another beside the
others, each with its own Claude Code session; a tab shows what its
conversation is about and how it stands, and closing it ends that
session. Right-click a tab (or double-click it) to rename it in place;
Reset Name gives it back its first prompt. The status bar chip says what
Claude is doing - thinking, the tool it runs, needs you - and leads to a
conversation that waits. - The tools Claude uses in a row fold into one line ("Ran 3 commands,
read amp.sch") that opens on a click, each tool on its whole command and
what it gave; each turn ends with its time and what it took. - What a turn took, when chosen: the tokens of the prompt and of the
conversation so far (every model's; a tooltip tells input, output and
the cache read and written) and their cost. The dock's menu (⋯) > Show
Usage has the four switches - all off at first - for every
conversation, its exports and /status. - What Claude may do: Ask Before Acting (a card asks before a command runs
or a file changes: Allow, Allow All Edits, Deny), Accept Edits, Auto
(Claude acts on its own and a safety check stops risky actions; the menu
greys it out for models without it), Plan Only, Bypass Permissions. - The model: the models the installed claude offers, named by what they
are ("Fable 5.1", "Opus 5 with 1M context"), the newest of each family it
does not offer yet (Opus 5.5, which needs Claude Code 2.1.280 or newer),
or any other by name. The header shows the model and the mode. Another
model or mode chosen in a conversation is taken as Claude Code runs,
from the next prompt on, and the header names it at once. - Claude drives the window. Qucs-S offers Claude tools of its own - an MCP
server inside Qucs-S, over the same stream as the conversation - to open,
show, save and close documents; read the schematic in front (its parts,
each pin's place and net, the nets, or its .sch text); change it as you
watch: place components and set their properties, move, turn, mirror and
rename them, wire pin to pin, label nets, delete, replace whole sections
from text, undo and redo, each change one step of Edit > Undo; take a
screenshot to see what it did; use any menu action and fill in and
answer the dialog it opens; run a simulation and read its outcome. Tools
that only look are used without asking; the first change asks, and Allow
Qucs-S Control lets the rest of the conversation go on (as do the Accept
Edits, Auto and Bypass modes). - Claude's edits keep the circuit as it was meant to be. A wire is laid
around what it must not touch - a wire joins every pin and junction it
runs over - and kept only when it joins its two ends' nets and nothing
else; otherwise nothing is drawn and Claude is told why. A part moved,
turned or mirrored keeps each pin on its net: its wires follow, wires of
other nets under its new pins are moved aside, and an edit that cannot
keep every net is not made. - Claude reads results as numbers, not only as pictures. It reads a
dataset's variables and measures them on the full data - values at a
given time or frequency, min, max, mean and RMS, rise and fall time,
overshoot, settling time, period, frequency, duty cycle, crossings of a
level, -3 dB bandwidth - each curve of a parameter sweep on its own. - A simulation's outcome is told truly: it succeeded when the simulator
ran to its end, reported no error and exited with 0 (ngspice's dataset
is name.dat.ngspice - before, every ngspice run was reported as failed).
Each error and warning comes with the netlist line it names, the part
of the schematic and the node; the traces left without data are named
with the reason. A run's dataset can be kept under a name and plotted
beside the next run. Claude also reads the netlist. - Diagrams by name: Claude places and changes diagrams and their traces by
their fields - type, place, size, each axis's label, log scale, limits,
grid, legend; each trace's variable, color, thickness, style, axis,
markers - and every trace shows its data at once (diagrams replaced as
text used to go blank until the document was reopened). Simulation >
Reload Simulation Data reads the datasets again. - Renaming a net renames the traces, data displays and equations that show
its voltage; taking a label away warns of the traces it leaves behind.
Claude can look up a component type: its properties in order with
defaults, units and meaning, its netlist line, and its traps (a Vpulse
is a single pulse under SPICE; Vrect repeats). - Export a conversation: the dock's menu (⋯) > Export Conversation saves
all of it - every prompt, reply and tool with its input and output - as
a PDF (drawn as in the dock, on paper, math typeset, a page number on
each page), Markdown (the replies as Claude wrote them) or plain text.
Include Tool Details (on by default, remembered) decides whether the
contents of the boxes that fold go along; off, a row of tools is its
one summary line and the export is the chat itself. - Pin a conversation to a schematic, if you want to (off by default): the
pin beside the document chip pins the schematic in front, ⋯ > Pin to a
Schematic any open one. Pinned, its prompts name that schematic rather
than the tab in front, Claude's Qucs-S tools act on it when given no
document, and a menu action brings it to the front first - so two
conversations can work on two schematics side by side. The chip shows
the pin (a click unpins it), and a Save As keeps it pinned. - Quicker: the 22 Qucs-S tools most sessions use are loaded in every
turn and the others found by Claude Code's tool search when a task
needs them; each description is two or three sentences (all 65 tools
about 9.6k tokens, from 17.5k) and describe_tool gives a tool's whole
description. Answers are compact JSON, and structured
(structuredContent); batch runs many tools in one call - place and wire
a circuit in one turn, each change still one step to undo. A menu
action answers as soon as it is over. - Conversations kept and resumed: those open when Qucs-S closes come back
when it opens again, and the next prompt continues their Claude Code
session (⋯ > Reopen Conversations at Start turns this off). /resume, or
⋯ > Resume a Conversation…, lists the kept ones and Claude Code's own
sessions of the folder to search and go on with; /resume
goes on with one at once. - Slash commands: typing / lists them. The dock runs /clear, /new,
/resume, /quit, /exit, /help, /model, /permissions, /rename, /export,
/status, /pin and /unpin; Claude Code's own (/compact, /context, /cost,
/init, your skills...) are sent to it as typed. - Results Claude can trust: a curve in dB (a Nutmeg equation's db(...),
written as complex numbers with no imaginary part) keeps its sign -
read as a magnitude, -44 dB became +44 and its bandwidth 224 MHz for
6.1; each variable says its units (from its name, or the equation that
defines it); bandwidth is 3 dB below the peak in dB, the peak over
sqrt(2) of a magnitude, and refused on a curve that is neither. A DC
simulation's operating point is read as one: each node's value and,
with ngspice, each device's id, gm, vgs, ... under its component; a DC
bias run's files are removed before every run, never read a day late. - Claude is told what changed since its last call that it did not change
itself: your edits, another conversation's, a simulation you ran,
documents opened or closed; get_state gives each document's revision
and who made its last edit. - Markers: add_marker at an x, the peak, 3 dB below it or a crossing
(the exact point found, the marker on the nearest sample), with its
label, precision, format, indicator and colours; edit_marker,
delete_marker; get_schematic lists them. - get_schematic lists the properties not at their defaults (or those
shown, or all), the parts named or in a region, at most 200 with what
is left out; set_schematic says what it read of each section, and
describe_format explains every field of a .sch line. export_netlist
writes a SPICE or CDL netlist to a file; get_state lists the panes and
move_to_pane arranges them; screenshot takes the document on white
paper, the canvas as you see it, or the whole window and its dialogs. - Drawing: add_painting and edit_painting draw and change texts, arrows,
lines, boxes, text boxes and callouts, tables, dimensions and TeX
formulas by their fields - on a schematic, or on its symbol - each one
step to undo; delete and select take them by number, and get_schematic
lists them by their fields. - The measurements an amplifier is judged by: THD on a transient (each
harmonic's amplitude over the last whole periods of the fundamental,
as ngspice's .four), and on a loop gain its gain, phase margin and gain
margin. - list_documents lists the files of the workspace or a project - kinds,
sizes, times, which dataset is which schematic's; get_schematic's
overview tells a 24,000-part schematic in 721 bytes; export_image
writes a picture of a schematic, or of one diagram alone, without the
export dialog; set_simulator chooses the simulator. An atomic batch is
all or nothing (one that stops says how many changes stay, and undo
takes steps); simulate says when the schematic was changed while it
ran. - Wiring Claude can trust: check_schematic tells what a simulation would
fail on or not do as meant, each with its place - and Simulation >
Check Schematic now finds it too: a wire's end or a pin on another
net's wire without a junction, parts on no ground (floating), nets that
reach ground only through capacitors (no DC path); crossings without a
junction and a label on one pin alone as notes. A wire drawn across
another net's, or a part put down on a wire, says so at once. - The operating point in one call: simulate with operating_point runs the
DC bias of a transient-only schematic too and returns node voltages and
each transistor's gm, ic, vbe, ... with re, rpi, beta and ro worked out. - A part's text shown, hidden and moved by edit_component, without
rewriting its line; move moves a group with its wiring; create_subcircuit
makes parts a subcircuit; a subcircuit's parameters read and set on its
symbol; add_analysis adds an AC, transient, DC or sweep analysis with its
plot; get_dataset reads expressions (v(out)/v(in)) and compares a run
with a kept one; diagrams go where there is room; grounds are GND#1,
GND#2; set_schematic refuses a component line with a value too many. - Tune in one call: tune sets a part's value, simulates and measures until
a number comes out right (the emitter at 5 V, the peaking at 1 dB) -
false position on a log scale, a few runs - or measures a table of
values; the value found is one step to undo. - Equations by name: add_component and edit_component set an equation
block's equations (Eqn, NutmegEq, .PARAM, .OPTIONS, ...) and a Monte
Carlo's records and specs, with no line written by hand. A diagram has
a title that moves with it (and a Title field in its dialog); a marker
goes 3 dB below 0 dB or the DC value; renaming a part renames its traces
and equations. - simulate runs Check Schematic first (its warnings head the log), takes
a simulator for one run, and waits for Qucsator too. What the user
changes between Claude's calls is told part by part (R2: R 47k -> 67k);
undo_history tells the steps in words and undo goes to one. "selection"
takes what the user selected. - build_verilog_a compiles a .va at once, each error with its line;
describe_component_type gives a Verilog-A module's parameters and a
.model card. find_library_component finds a part by its values (an NPN
with Bf near 200); read_pdf reads a datasheet; import_netlist makes a
schematic of a SPICE netlist; make_symbol draws a subcircuit's symbol on
four sides; new_project, open_project, copy_document and clean_scratch
tend the files; a schematic's data display takes a report's plots. - create_library, import_library and list_libraries make, bring in and
list component libraries, each part with the add_component that
places it - by its library's name when that finds it -, and say when
another library has the name (also_named). build_verilog_a
compiles into the cache when the source's folder cannot be written;
save_document says which library Verilog-A a save linked into the
project or took away, and edit_text refuses such a link. - get_dataset measures a spectrum (fft), an eye and a Monte Carlo
family's distribution, gives a table across a sweep, and reads .csv and
.xlsx results. Relative paths come from the open project, and a
document is found by its file's name alone. - replace_component puts a part of another type in one's place - a
built-in OpAmp for a subcircuit - its pins mapped by number or name to
the old pins' nets, turned, mirrored and placed so no wire runs across
it; one step to undo. - An .OPTIONS block takes flags (noinit, keepopinfo). A symbol's port can
show its instances a label beside the pin instead of the net's name
("+", "-", or nothing) - also by a double-click on the port in the
symbol editor. The schematic's tools switch a document back from its
symbol themselves, and say so. - describe_component_type "Verilog-A" gives a module OpenVAF compiles as
it is, with the rules it wants (attributes before the declaration,
instance parameters, a DC path for every node); for any type, the
hidden properties that still go into the netlist (an OpAmp's Umax).
save_document of a subcircuit says which open schematics' instances
took its new symbol and which pins moved off their wires.
get_schematic gives the box of each shown text of a part, and
open_document says when a line has more values than its type. - set_schematic takes parts and wires as JSON, each property by its name
and checked against the type - a value too many can no longer shift
the rest - and get_schematic gives that form. A value that does not read
as a number, and a type's traps (a Vpulse is one pulse, an OpAmp clips
at Umax), are told as a part is placed or edited. - "preview": true on the tools that change a schematic says what a change
would do and does nothing (a batch too); diff compares a schematic with
its saved file, a step of its history or another file; get_netlist with
"map": true ties each netlist line to its part and each node to its
pins. run_script runs a short JavaScript program that calls the tools,
with loops and conditions, in one turn - put back when it fails, if
atomic. - What cannot be undone - a file written over, unsaved changes discarded,
clean_scratch - is asked about every time, even after Allow Qucs-S
Control (but in Auto and Bypass), and before writing over a file or
closing one with unsaved changes Qucs-S asks you in the dock with a
button for each answer (MCP elicitation). Each tool carries MCP's
annotations. The schematic's text, its netlist and netlist map, the
dataset and the window's state are MCP resources, read and subscribed
to. - Without the window: qucs-s --mcp-server serves the same tools over
stdio for any MCP client - "claude mcp add qucs -- qucs-s --mcp-server"
(on macOS /Applications/qucs-s.app/Contents/MacOS/qucs-s) - for batch
jobs, CI checks of schematics or subagents working on copies. - A schematic Claude changed is loaded again when it has no unsaved
changes. The dock runs down to the status bar, and the message,
simulation and terminal docks at the bottom end where it begins. - Git status above the prompt, as in the Claude desktop app: when the
open project (or the conversation's folder) is in a git repository, a
bar shows its folder, the branch and the lines changed since the branch
left the default one ("+2,096 -3", committed or not, new files too),
which open the changes file by file with their diffs. Create PR asks
Claude to commit, push and open the pull request with gh; once there is
one, PR #12 opens it. Its menu: a draft pull request, Commit Changes,
Push Branch, Show Changes. The ⋯ menu's Show Git Status turns it off. - Each prompt has an Edit: it goes back into the composer, and sent, the
conversation goes back to where it stood before it (Claude Code resumes
its session up to there, as a new one, so the old one stays whole).
Files Claude changed since stay as they are, and the dock says so. - Claude reaches the whole window: get_ui, set_ui and context_menu the
docks, panels, toolbars, status bar, tabs and right-click menus;
get_text, edit_text and goto_line a text tab; console a line into the
Octave, Python or Terminal dock (asked about each time, in Auto too);
get_settings and set_settings the settings by name; send_input a
click, a drag or keys; read_help the help that comes with Qucs-S.
simulate runs in the background too, followed by simulation_status,
stop_simulation and wait_for; a stopped run is told as stopped, not as
a crash. rename_file and trash_file move and trash files, and undo
moves them back. The file dialogs Claude opens are Qt's, which it
fills in. The Claude Code panel and its chip stay yours alone.
Large schematics
- A schematic of thousands of components stays responsive. The canvas
draws only what reaches the part being painted (a corner of a
24,000-component ladder: 166 ms to 6 ms); zoomed out so far that text
would be a pixel or two tall, it leaves out component names and values,
symbol texts and pin names (prints and exports keep them); and a
selection rectangle, a drag, a wire being drawn or a part being placed
draws the rest of the schematic once and, at each step, only what moves:
4 to 13 ms a step, where each took 170 ms. A drag's preview of the wires
the drop will mend looks at what moved, not at the whole schematic.
Text editor
- Syntax highlighting by the file's suffix: C/C++, JSON, Markdown,
Octave/MATLAB, Python, Qucs netlists, shell scripts, SPICE (.cir, .sp,
.lib, .inc, .mod...), Verilog and SystemVerilog, Verilog-A, VHDL and
XML. Strings and comments over several lines too, and a # in a string
is not a comment; Comment/Uncomment uses each language's mark. - A button in the status bar names the language of the text document in
front; its menu chooses another, kept for every file of that suffix
(open ones, later ones, after a restart) until Back to the Default. - Application Settings > Source Code Editor: a radio button per language;
the one chosen shows its styles - a colour, bold and italic each - on a
preview. OK or Apply saves the changes of every language, and the open
documents take them at once. - Building a Verilog-A module marks its errors and warnings in the open
.va tab: a wavy line from the column, a dot in the line numbers'
margin and the message as the line's tooltip, moving with the text. - A library's Verilog-A linked into the project opens read-only, a note
at the top naming the library; it is changed in the library.
Markdown
- A .md file opens in a tab of its own: its text, highlighted and edited
as any text document, and the text rendered - GitHub's Markdown
(headings, lists, task lists, tables, code, links, images) and TeX math
typeset. Edit, Split (side by side, scrolling together) or Preview; the
mode chosen is kept. Links to a heading scroll to it; to a file, open it.
Spreadsheets
- .csv, .tsv and .xlsx files open in a table, read and written by Qucs-S
itself. The cell in front edited above the table or in it; undo and
redo; cut, copy and paste as tab-separated text (with other
spreadsheets); Delete clears. - A CSV file keeps its delimiter (detected), quotes, encoding and line
ends; its rows and columns are inserted and deleted. - A workbook shows its sheets in tabs, column widths, merged cells,
numbers, dates, booleans, errors and formulas by their values. Saved,
it keeps all but the cells changed as it was - formatting, charts,
names, the other sheets - and Excel calculates its formulas when it
opens it (Qucs-S does not). Save As writes CSV, TSV or a workbook.
The old .xls is not read.
Tuner
- The tuner is a dock of the main window - beside the simulation output,
or floated - not a separate window; closing the dock stops tuning. Esc
in the tuner closes it, elsewhere it is the window's. Closing no longer
asks whether to keep values nobody changed.
Content panel
- A Text category, right before Others, lists the .txt files.
- Application Settings > Contents: a row per category with the patterns
of the files it lists (*.txt, .txt or txt, or names with wildcards). A
file goes under the first category that matches it; Others has *, what
no other took. Restore Default Patterns puts the defaults back. - Categories of your own: the same tab's Your categories table adds,
names, removes and orders them, each with its patterns (*.s2p, .s4p,
touchstone). They are listed after Text and before Others, take what
no category above them took, and go with Export and Import Settings. - Filter by name, as the File Browser's: only the files whose names hold
what is typed or match it as a regular expression, in their categories
and folders, opened; the header says how many. Cleared, the categories
are open as they were. - Its view is "Flat" or "Sub-trees per folder" (Toggle hierarchy search
view), the latter now the default; a choice saved is kept. Libraries/<library>/holds links to the Verilog-A of the library
devices the project's schematics use, listed with the project's
Verilog-A, the note naming the library and the tool tip the original;
Qucs-S keeps them (Libraries/ marked as its own, a record in each
folder) and takes them away with their models when no schematic uses
the device.
Projects
- Application Settings > Locations > Projects: Any folder is a project,
not only one named NAME_prj (off by default). On, the workspace's
folders are its projects (all but user_lib and hidden ones), Import
Project and Link Project take a folder under the name it has, Open
Project and a folder dropped on the window open any folder as the
project, and New Project names the folder as typed. NAME_prj folders
are projects either way. - Filter by name, under New, Open and Delete: only the projects and
folders whose names hold what is typed or match it as a regular
expression (".." always). A project it leaves out is no longer the one
Open and Delete act on. - A dot at the end of each project's row: green for the project open
now, grey for the others, none on a folder that is no project; the
tooltip says which, and where a linked project is linked from.
Markers
- A marker's label is drawn on the paper it is on - readable in the dark
theme, where it was a dark box around black text - and its dialog
chooses the colours of its text and its background (the background with
transparency too; Reset goes back to automatic). Its Transparent
background box is in sight again, and its indicator (off, square,
triangle) is saved with it at last. - A marker has a number format of its own (or its diagram's), for every
number it writes - complex values and a Smith chart's impedance too.
Toolbars
- View > Toolbars > Lock Toolbars (also in the right-click menu of the
toolbars and in Application Settings > Appearance) keeps the toolbars
where they are: no handles, no accidental drags; one left floating comes
back. Remembered between sessions; View > Toolbars also shows or hides
each toolbar.
Panes
- View > Panes: documents side by side, up to a 2x2 grid. Split Right
(Ctrl+) and Split Down (Ctrl+Shift+) open a pane; the active one,
marked by its coloured top edge, is where files open, and follows
clicks and focus. Move Document to Next Pane, Next Pane (Ctrl+`) and
Close Pane; a pane goes with its last document. - Maximize Document (Ctrl+Shift+F12, a tab double-clicked, or its menu):
the pane fills the window, the other panes and docked panels hidden;
Restore Panels or another double-click brings them back. Going to a
hidden pane, splitting or closing the pane's last document brings them
back too, and a workspace kept meanwhile keeps the layout from before.
File Browser
- A File Browser tab in the left panel shows the file system in six
views: Tree, List (a folder opened with a double-click), Icons,
Details (size, kind, date, sorted by any), Columns with a preview, and
Recent Documents. Every file Qucs-S knows has an icon of its own -
schematics, symbols, data displays, datasets, SPICE netlists and
libraries, Verilog-A and HDL sources, OSDI models, Touchstone files,
scripts - and so do common files; project folders carry a badge. Back,
forward, up, home, places and the path as buttons (Ctrl+Shift+G to
type one), a filter, Qucs-S files only, hidden files; a double-click
opens a file as the Content panel does, and the menu opens it with the
system, shows it in the file manager, copies its path, renames it,
makes a folder or a new ZIP archive (New Zip…) or moves it to the
trash. - Drag and drop: entries (several at once) dragged onto a folder, beside
the rows or onto a button of the path move there - copied with Option
(Ctrl elsewhere) or to another disk; from the Finder or the Explorer,
copied in. Where it would go is lit up, a folder held under the drag
opens, a name taken already is asked about (replace, keep both, skip),
and documents open from what moved follow it.
Paintings
- Thirteen more in the component panel: Rounded Rectangle (and filled),
Triangle, Regular Polygon, Star, Brace (curly, square, round),
Waveform (sine, square, triangle, sawtooth, pulse, damped sine), Text
Box, Note, Callout (with a pointer), Table, Dimension (a distance with
arrows and its length, scaled with a unit) and Formula (TeX math
typeset). They turn, mirror and resize by their handles, each has a
dialog with a preview, and in a subcircuit's symbol they reach every
instance.
PDF viewer
- A PDF opens in a tab of its own - from the File Browser, the Content
panel, File > Open, a drop, or Claude's open_document - its pages one
under the other, sharp at any zoom. The toolbar has the page and the
page count, zoom in and out, Fit Width and Fit Page, and a find bar that
marks every match; the sidebar shows the pages small and the document's
outline. Text is selected with a drag (a double-click takes a word,
Edit > Select All the page) and copied; links are followed. Ctrl+wheel
or a pinch zooms, the middle button pans, and the View menu's zoom
commands work on it. When the file is written again (a script's report,
say) it is read again where you were. Save As copies it; Print prints
its pages. Built without Qt's PDF module, Qucs-S opens PDFs in the
system's viewer as before.
ZIP archives
- A .zip opens in a tab of its own, as in Eclipse's zip editor: its
files and folders in a tree or a list, with size, packed size, ratio,
date, method and CRC-32, a filter by name (text or a regular
expression) and a summary line. A file opens in Qucs-S as a copy;
saved there, it goes back into the archive. Add Files, Add Folder,
files dropped in from anywhere or pasted from a file manager (a name
taken is asked about: replace, skip or cancel); New Folder, Rename,
Delete; Extract, Extract All, or entries dragged out as files. Every
change is a step to undo, and saving copies the files not changed byte
for byte, with their times, comments and Unix modes. Nothing in an
archive is run (a file Qucs-S does not open is only extracted), an
entry named to leave the folder it is extracted into (../x, /x, C:/x)
is refused, and each file is unpacked no further than its size and
128 MB. Archives over 1 GB and ZIP64 are not opened; encrypted
entries, and ones packed other than stored or deflated, are listed and
kept but not opened. The File Browser's New Zip… opens an empty one,
saved where Save asks.
Settings
- File > Export Settings... writes every setting - the application's and
the simulators', the theme, the highlighting, the Content panel's
categories, the shortcuts, Claude Code's model and permissions - into
one JSON file, the same on every platform, to share or keep. Where the
windows were, the recent files and the last folders stay out. - File > Import Settings... takes one in: it says first where it came
from, whether the workspace moves and which programs Qucs-S would run;
saves the current settings as a backup (the last ten kept; importing
one takes them back); and applies the new ones at once, without a
restart (the language, the fonts and flexible wires at the next start,
as it says). Paths of another computer not on this one, and Claude's
Bypass Permissions, stay as this computer has them. - Application Settings > Settings > Write a settings file (.cfg) beside
each text document: saving a text document wrote name.cfg beside it
(its Document Settings, of use to VHDL, Verilog and Verilog-A files
alone). Off, one is written only for a document whose Document
Settings were set or changed. - Simulators Settings > Netlist > Include ngspice_mathfunc.inc (limexp,
step, stp): whether an ngspice netlist includes the installation's
file; the tab shows the file, or that the installation has none. - Simulators Settings > Results > Keep large results binary, and Binary
above (10 MB): which runs keep a binary dataset. A schematic whose
Octave script reads the dataset after the run keeps text. - Application Settings > Locations > Library Search Paths, beside the
subcircuit search paths: each folder a section of the Libraries panel,
after the user libraries, and searched for a placed part's library
that is not where it was; a part placed from one names its library by
its name when that finds it, and takes the first library of its name
that has the part. An import keeps those on this computer. - Simulators Settings > Before a simulation > Warn of commands a
simulation runs besides the simulator (off by default): Check
Schematic warns of a System command part, ngspice's shell and the
Octave script after a run, and Claude's simulate and tune refuse such
a schematic unless given allow_commands. - Application Settings > Appearance > Cut long file names after
(characters): 50 unless set, Never to show them whole. A longer name
ends in "…" on its document's tab and in the Claude Code panel, its
extension whole, each character counted as read (an accented letter or
an emoji is one). The tab's tooltip gives the whole path.
Fixes
- A net labelled 0 or gnd - node 0 without a ground symbol, as
Simulators Settings allow with "A schematic must have a ground symbol"
off - stopped the ngspice run ("no such vector 0 in term: v(0)"), and no
dataset was written; with a ground symbol on the net too. Ground's names
are no longer among the voltages the netlist prints. - macOS: the bundle carries the Xyce digital parts' symbols; without
them the Xyce digital examples' wires met no pin. - The canvas draws its texts antialiased in grey, as a gesture's held
scene does: on Linux, where fontconfig asks for subpixel colours, a
drag showed its texts differently from a whole paint. - Dark theme: a diagram's white card holds all it draws. The numbers of
its axes are centred on the edges of its frame, and the top one and the
last one (the "25" and the "100" of a plot) were cut in half by the
card's edge, as was the top of the frame; a table's scroll bar and
header were off the card too. - Zooming out on a schematic with an element millions of units from the
origin (a file or a dialog can put one anywhere) asked for a canvas of
billions of pixels, and Qt aborted. The model plane now stays within
8 million units of the origin, and a loaded view with nonsense corners or
scale is put right. - Far-away wires no longer overflow the geometry that decides whether
three points are on a line. - Deleting with Claude's tools recorded two steps to undo, so one Undo
after it seemed to do nothing. - A schematic loaded again while its symbol was being edited (Claude
changed the file, or the "modified by another program" reload before a
simulation) put its nodes among the symbol's, and a later Undo left them
pointing at freed wires: Mirror X in the symbol crashed. Claude's reload
now also returns to the symbol when that was being edited (a .sym file
came back empty). - File Browser, Columns view: an arrow key in an empty folder crashed
Qucs-S (Qt's column view). The cursor now stays in the folder shown. - Edit > Stretch and Edit > Move crashed with a text document in front.
- Choosing a simulator on the toolbar with no document open crashed.
- An AC variable's first frequency point was read with phase 0: the
dataset reader lost the first value's imaginary part of every complex
vector. - Windows: the bundle carries Qt6Network.dll (Qt PDF needs it; without
it Qucs-S would not start), and the DLLs its plugins need; every
Windows build is now checked by starting it as a PC without MSYS2 does. - An arrow with a huge head (typed in its dialog, or in a file) overflowed
as it was drawn and saved; its head is kept within a coordinate's range. - Claude's tools no longer change a document while a dialog waits for an
answer: an undo under a part's or a diagram's dialog freed what the
dialog held. Loading a file Claude changed waits for the dialog too. - The shortcuts set in the Shortcut Manager were saved but never loaded:
they were lost at the next start. Default Values in Application
Settings put back Flexible wires as it was, not its default. - export_image of one diagram said its size was -1 x -1 pixels.
- A Nutmeg equation's Simulation "tran" matched no transient (only the
block's name, TR1, did); the analysis' kind is taken now. - A text document changed on disk by another program (a script, a shell
command, OpenVAF) is loaded again when it has no unsaved changes. - PDF Save As onto the same file under another spelling (another case on
macOS and Windows, a path through a link) deleted the PDF; nothing is
written now. A copy over a file that fails leaves the file that was
there - in Claude's simulate keep_as too, where the schematic's own
name deleted the run's dataset, and in the library dialog. - File Browser: Replace, when the item there held the one being moved (a
folder x dragged out of the folder x), sent both to the trash; it is
not offered now. Documents open from a file or folder renamed in the
browser follow it; a rename that changes only the case works, and a
name with "/" or ".." is refused instead of moving the file. Move to
Trash closes the documents open from what it trashes, and refuses while
one has unsaved changes. - Delete Project moves the folder to the trash instead of deleting it for
good; its question names the folder and what is in it, and says when
it is a project only because "Any folder is a project" is on. - Text editor: Comment/Uncomment duplicated parts of lines and took a line
too many; it now comments the lines selected (or uncomments them when
all are comments) in one step to undo. Undo right after opening no
longer empties the document. A file not in UTF-8 - a vendor library in
Windows-1252, UTF-16 - is saved as it was read, CR LF line ends too (its
°, µ and © became "�"); a character its encoding lacks is asked about,
and the file then saved as UTF-8. - Spreadsheets: a CSV file of a Windows program saved a typed "Ω" as "?",
and a UTF-16 file (Excel's Unicode Text) was read as garbage. Changing
the first cell of a formula filled down left a workbook Excel had to
repair, the other cells' formulas lost; they keep them now, and show
them. - Security: the Claude dock's git bar no longer runs programs a project's
own .git/config names (a file system monitor on every refresh, filters,
text conversions) - opening a project downloaded with its .git could run
them. Your own filters (git-lfs) still run. - Security: a link in a Markdown preview or a PDF no longer hands files or
unknown links to the system (a .command, an .app or an .exe would run):
web pages and mail open in the browser, Qucs-S's documents in a tab, any
other file is only shown in the Finder or the Explorer once asked, and
another kind of link opens only once you agree. - Allow All Edits on a permission card applies to that conversation alone,
as it says; it became the default for every conversation, after restarts
too. The Permissions menu changes the default. - Spreadsheets: a tiny .xlsx could take gigabytes - a cell at row
2,147,483,647 (25 GB), a file that unpacks to hundreds of megabytes. A
workbook is opened up to Excel's rows and columns and 2,000,000 cells,
its files at most 256 MB unpacked; styles on far rows and columns take
no room. The table stops at Excel's last row and column. - A big folder opened as the project (with "Any folder is a project") froze
Qucs-S: the Content panel walked all of it every 3 seconds. Other
programs' folders (node_modules, pycache, venv, CMake build trees)
are skipped, at most 20,000 files and folders are looked at, and the
look runs aside. - A large Formula painting zoomed in asked for an image of gigabytes; it is
capped at 64 MB. A marker's precision from a file is kept to what the
dialog allows. - View All with diagrams on the schematic: a marker's bounds were in its
diagram's coordinates, so each marker added a box by the origin and View
All showed the schematic small in a corner (a selection rectangle there
selected markers far away). A diagram's title and the numbers on the top
and right of its frame were left out of its bounds (a title wider than
its plot was cut off, in View All, prints and image exports); a Smith
chart's drawing counted the whole circles of its grid, and its card in
the dark theme was as large. - macOS: the bundle carries one Qt, not one for each of the tool apps
(filter, attenuator, transcalc, ...); the image is about a sixth of its
former size. - A CDL netlist (Simulation > Save CDL netlist, qucs-s --cdl, Claude's
get_netlist and export_netlist) wrote each .INCLUDE and .LIB line
twice. - macOS: Edit > Delete's key was the chord "E, Ctrl+G"; Backspace and
forward Delete delete again. - An & in a file's name was taken for a shortcut's mark on its tab and
in the Claude Code panel ("R&D.sch" showed "RD.sch"). - Closing a pane's last document while the keyboard focus was in it left
the pane behind, empty and with no tab: the focus moved to another
pane's document as the tab went, and made that pane the active one. - Create Library said "Successfully created library." when a
subcircuit could not be loaded, and kept the half-written library. - After Create Library the next netlist built left out the model of a
library part the new library's subcircuits used: the first simulation
then compiled no Verilog-A for it. - A library part's model and the files of its library's folder came
from two libraries of one name when one was beside the schematic and
the other on the search paths: they come from one library now. - A library of a part's name without the part - the project's own,
made after a search path's part was placed - took the part: it lost
its pins, the run failed, and the link to its Verilog-A in the project
was taken away. The library of the name that has the part is taken. - A
<br>in a Claude reply - several lines in a table's cell - blanked
the rest of the reply in the Claude Code panel: the table's other
rows, and every bullet and paragraph after it but its inline code. So
did any tag Qt's Markdown importer saw open and never closed, or a
closing tag with nothing open: a placeholder such as<name>.dat, a
type such asQList<Span>, a lone<b>, a comment with a tag in it,
a stray/>in an HTML block. Outside code now, a void element
written open (<br>,<hr>,<img ...>) is closed, a<br>in a
cell a line break as on GitHub; a tag of no HTML element, or one not
closed in its block (paragraph, list item, cell), shows as written;
closed ones (<b>,<kbd>,<details>) stay HTML; comments are left
out - in the panel, its text copy and the Markdown viewer. An<hr>
in a paragraph comes between its parts, not under the text after it,
and an HTML block (a<details>, a README's centred badges) is a
block of its own, not run into the paragraph or heading before it; in
a list item or a quote it stays set in with them. Tables, and code in
a quote or a list item, are read as Qt's Markdown reader reads them;
a<that is text in an element (<b>a < b</b>) and a link's
<destination>show as written, and so does what only looks like
one -[]: <v>, a stray](<b>- or a line's unclosed<script.
A long reply or file is read in time linear in its length, unclosed
openers by the thousand too.
Full Changelog: v26.1.4...v26.1.5