SIM Development thread


Hi. Here’s a new plugin.

(Code and windows only)

My last coding experience was from a few decades ago. Lately, I’ve been hacking away at a few modules and learning about all the related obstacles the hard way. It feels like learning to dance ballet when you’re 50 years old. I’ve ended up in git-hell more than once, even though I work alone; I got stuck for a day over a typo; experienced indecision about which font to use; cursed the compiler for being too cryptic; rewrote the whole damn thing from scratch,… It made me even more grateful to all developers than I already was for all their skills and the hard work they put into developing these plugins. I had no idea it was this tough.

Anyhow. I keep adding ideas into more and more unfinished plugins and it’s heading towards vaporware. So instead of trying to finish and release the entire suite I’ve got planned, which feels overwhelming, I’ve decided to pre-release them one at a time and gather feedback from users like you. And in doing so, I hope to learn what else is involved in the development process, such as setting up a plugin build toolchain in Linux, writing an English manual, and listening to the advice of others.

I have no modular synthesis or UI design background, so all criticism is welcome.



I am having a LOT of fun with Dan’s Coerce module. It is an arbitrary voltages quantizer. It works well as a “quantize to chord”, “quantize to semitones”, “quantize to integers” and “quantize to module CV eigenvalues”.

This is truly a Swiss army knife for me.

Thanks Dan


This does look cool. I don’t understand exactly what the Quantize port does. The documentation says “The quantization values are read from the Quantize port.” But I’m having trouble understanding what that means.


Yeah, I had the same question. Just feed the polyphonic voltages you want to quantize to into the quantize input. I use a MERGE to build this input, usually. Or send a chord into it.

1 Like

Thank Don. So I need to update the manual. :slight_smile:

The most logical use is to connect the output of VCV Library - Aaron Static ScaleCV or VCV Library - Aaron Static DiatonicCV to the top quantize input to have six independent polyphonic quantizers.


Oh, so the Quantize get “normalled” down the column?

1 Like



Ah, I missed that. I need to revisit my playground :grinning:

Ah yes. The Aaron Static ScaleCV works great for quantizing to a scale and the DiatonicCV works great for quantizing to a chord. The ScaleCV is limited to the modal scales, but the DiatonicCV supplies chords as major, major7, and major79, Chord inversions and voicings can be CV controlled.

ScaleCV can send the scale to DiatonicCV.

These are very nice modules and I use them a lot. Too bad AaronStatic is MIA.

It will also generate minor and dim chords, but I can’t figure out the logic.

It probably is applying the same logic as Meander does such that all chords are either major, minor or diminished in that particular mode and and root.

1 Like

His modules are probably the reason why Coerce ended up the way it did.

The modules in the pipeline make use of aaron static + coerce to produce chords, arpeggios and ostinatos.

1 Like

Hi, and welcome to the plugin developers. You mentioned using a Linux build chain. @qno has done some excellent work on using GitHub to produce builds for all four supported architectures. Whenever you push to your repository, you can click on the Actions tab at the top of the GitHub repository and watch the builds complete for each system. Once these are completed you will see green indicators, scroll to the bottom of the page to find the plugin downloads that you can distribute for testing.

All you need to do is copy the file located at vcv-plugin-cmake-example/build-plugin.yml at main · qno/vcv-plugin-cmake-example · GitHub to your repository, and push to github. This only needs to be done once and will work for all future commits. If you have any issues with this I am happy to help.

I have just tested this by forking your repository and can confirm your plugin builds and runs on all four platforms. If you would like to look at what changes I have made : GitHub - curlymorphic/SIM: VCV Rack Plugins . The example builds can be found : Added github build chain, based on work by qno… · curlymorphic/SIM@97d0f07 · GitHub


I use this too, and I’ve become a convert/evangelist for it. I use it in my Sapphire plugin’s repo, and I’ve helped a couple of other people install it in theirs as well. No more “your code doesn’t build” from VCV Rack maintainers. Now when my code builds on Windows but not Mac, I know it instantly.

You can also add extra yml files in your .github/workflows/ folder to run additional unit tests. For example, I have this one to run my custom bash script runtests every time I push, in addition to the above-mentioned build scripts:


I agree with how good this is. I used to have something simular in V1, but qno’s version is much cleaner.

Using GitHub for continuous integration is excellent, and the original idea can be expanded. I also use it to run unit tests on mac and Linux, but I have yet to try and get them to run on windows as well. I also have a script to check formatting using clang-format.

But for a new developer, I would suggest using the script as-is and then expanding later once comfortable.

1 Like

That worked flawlessly. Thank you for preventing me from going down a probably deeper rabbit hole.


It will likely work on my next push. Beware edits to submodules without forking first. the submoduloe commit is unfound unless you fork and reset the git push/pull urls.

This is the plug-in i’ve been looking for ages. Really handy in generative patches. Thanks a lot !


COERCE works great, replaces a huge kludge I built, and looks great, too

1 Like

Is it possible to build regular .vcvplugin files instead of the .zip files with this workflow?


I am unsure, but the zip file does contain the .vcvplugin file. I just download the zip, and copy just the .vcvpluin to my plugin folder.

My apologies for not being able to help more, I know very little about this build chain.