Well, here's the answer (running in SaviHost, thanks arakula for making my life easier.. can you fix that wheel bug though, please):

It's not quite Spice, but still (hopefully) useful for cooking virtual circuits.
This is very much tech preview, not a product.
http://www.signaldust.com/files/salt-techdemo.zip <- feel free to try.
But yes, you can edit the circuits! No need to learn math or even programming, just drag-and-drop components and you can do it too (some basic EE knowledge might help, but experimentation works too). Virtual bread-boarding here we go.
Yes, it runs in a VST plugin, and processes audio on the fly (Windows 32-bit only for now; the code-gen back-end can't emit x64 code yet, so the JIT wouldn't work, and the REF solver is slow).
With regards to CPU use: this tech-demo runs at fixed internal samplerate of 150kHz (so aliasing isn't too ridiculous) and two-copies for stereo (unless you use the dry-right mode).. and doesn't currently split the channels to different threads so.. yeah it's not very light-weight, even if the tech should be fairly competitive.
Everything might not work correctly, but maybe it's not too badly broken right now.. since it might also be a bit different from your average plugin.
The component selection is "the absolute minimum that makes sense for a tech toy" and the GUI is basically "whatever allows me to test this during development."
There are no pots or control voltages available. There is no C-code export available. Both are things that will eventually become features: I actually started writing a tool for easier "zero-delay" type development, and it got a bit out of hand, and this is what I ended up with.
It should save the circuit in presets (the one on screen.. it will NOT save the one that is currently active in audio code, sorry) in theory, and there's some preset space and a few simple examples / test-circuits. It shouldn't crash too much either. But you're nuts if you try to use this for any production stuff.
There will in general be no support for this "version", and I might not even fix bugs, unless I think they are serious (or if they are too much pain to deal with). I just wanted to show what I'm currently wasting my time on.
I'll answer reasonable questions.
But since this is a bit geeky in general, I'll provide the following instructions:
---
What you need to know:
This tech-demo uses trapezoidal method, because it's the most well-tested integrator and generally works reasonably for audio. Non-linear components are solved by Newton's method (so I guess it might theoretically be possible to build stuff that doesn't converge.. just so you know).
Whenever changes are made to the circuit (including movement of the output when probing different points) you need to power-cycle for the changes to become active (so it can optimize and recompile the new circuit, which is pretty quick). Use the "process" switch on the GUI for power-cycling, not sure if it notices host-bypass.
There should be at least one "Signal In" if you intend to process some audio.
There should be at least one "Signal Out" if you intend to "extract" that audio.
There can be multiple inputs, they will just feed the same data to multiple points. Technically multiple outputs are also possible (this isn't checked), but which one you actually hear is damn-near random.. so just use one output. If there are no outputs at all, you will get pass-through signal.
For dry/wet comparisons (on scope, phase-plot, etc) use the "dry right" mode, which will mono-sum the input, process it once, put it into left channel, and put the latency-matched dry-signal on the right channel. You can also use this mode to save some CPU, since it runs in mono then.
The REF ("straight" reference solver) and JIT (native just-in-time compiler) solvers SHOULD give the same results, except REF uses about twice the CPU typically, and has a lower iteration limit (5 for REF, 10 for JIT). The main reason "REF" exists is to compare in case there's reason to believe that the JIT is doing something weird.. but that should not happen.
DC block .. will subtract the calculated VDC from the output. It's a simple one-pole filter, with quite a long time-constant, so it can take a second or so to get the rail-voltages back to IO levels after a reset.
---
Editing instructions:
Lots of patience required: the GUI is NOT very user-friendly. It's a "works for me" temporary design, as I've been trying to get the damn low-level tech to work reliably.
Draw wires with left-mouse from a "pin" of a component (no, they aren't visible, but they should be fairly obvious). Right-click on wire to remove them. Crossing wires over pins will auto-connect, but otherwise you can cross wires (click to connect a crossing point).
Right-click on empty-space to add components. Right-click on component to make it turn or flip around.. depends on the component what is possible. Shift+right-click to remove a component. You don't need wires if pins "happen" to be at the same position (not visually indicated, but works anyway).
To change values of resistors and capacitors (from a limited set right now): left-click to cycle through the selection.. or more realistically use a host where mouse-wheel works, and scroll with mouse. Haven't had time to add anything better yet, so sorry if that doesn't work for you. The value-label positioning sucks too, but it was the best I could do in the 5 minutes that I've spent on it.
You can NOT move larger groups at once, yeah I know it sucks. There is no undo either. Sorry. Those are just things that I have not implemented yet. Same with the limited working space.
---
Useful circuit details:
The external I/O is +/-5V for standard 0dBfs VST range (no selection, sorry).
The voltage rails are +/-15V and ideal.. hopefully good compromise, but see next chapter.
Resistors and capacitors are ideal. OPAs are near ideal (finite high gain), no slew-rate limiting and not limited by the voltage rails (so you need voltage higher or lower than +/-15V, use the OPAs). Both resistors and the OPAs are cheap in terms of CPU, so don't worry about those too much.. they mostly get simplified away anyway (it's not like this would work without optimizations), so resistor mazes are perfectly fine. Capacitors are handled individually right now (no circuit-theoretic simplification, sorry), and in general cost more, since they need to be solved for the integration to work.
The diode and BJT models are fixed "test models" that I used for getting the lower-level stuff to work.. they should behave like some hypothetical silicon devices, but if you need more details, you'll have to measure yourself. The basic model BJT model is the usual "two diodes + transport" simplification, plus a few small resistances to make it's harder to get the math to fail.
I won't add more components or better models, sorry. Yes, I know it's limited, but this stuff takes a BIT too much time to give it all away for free.
---
Troubleshooting:
If it says "VDC +big/-big" then you got a voltage more than 1kV (could be infinite too), either because the math failed, or you did something stupid (both are possible, since the OPAs are not supply-limited).
Note that capacitor charges can also "run away" if the caps have no path to any reference, which can make a seemingly "well-behaved" circuit fail after a while (standard SPICE-like advice applies here). If it says "iters: 0" (well, it might say other values if one channel is still running) then that means the simulation failed "hard" and could not find a solution. If "iters" is negative, then please check the power button.
Components that are part of the "solution" for the output need to have a path to a reference voltage (ground or rails). In other cases it mostly doesn't matter; standard SPICE-like precautions apply... but Salt solves only the parts that it really needs to solve, so it might not notice that there is a problem, if those problems are irrelevant in terms of the output.
---
This is why I don't like doing "zero delay feedback" math manually.
