Hey I’m new to VCV plugin dev and wanted to get started. I successfully can modify and build VCVs Fundamental plugin and changes show up in VCV. Now I wanted to build my own plugin. I copied the Fundamental repo, deleted all modules but one, adjusted plugin.cpp, plugin.hpp and plugin.json accordingly. The project compiles fine and “make install” does copy the plugin file into my user folder. When restarting VCV Rack, it recognizes the plugin file and extracts into a folder, so I guess it gets recognized. However, the module does not show up in the VCV modules library, There is no error message in VCV. There is also no error message in the logs.
I have no idea what I am missing. How would I go about debugging in this case? I would appreciate any hints that could lead me in the right direction.
Not directly replying to your question. I started out (not long ago) my VCV development using the template by @pachde. Still ran into various issues but only doing baby-steps in the beginning, you can more easily back step to a “previous working” plug-in, as it you do many changes before trying to deploy it (as of now I use SVN on my NAS for version-control, but will move it to Github later)
https://github.com/Paul-Dempsey/GenericBlank
Have you given it a new plugin slug in the manifest? Otherwise it will clash with the existing Fundamental and I don’t think Rack will load it. Every plugin slug needs to be unique.
VCV Rack forces the major version of your plugin to start with 2, otherwise it won’t show up ?!?
"version": "2.X.X",
I am of the opinion that the plugin version should be completely independent of VCV Rack version, but it isn’t. I ran into it because I wanted to start small, with “0.1.0” as a not-yet-final-but-usable-release. I now understand that the major version of the plugin is supposed to signify to VCV Rack the compatibilty with its own major version. I consider this feature to be predatory behavior on behalf of VCV. Why can’t a plugin have its own versioning scheme? (Hey VCV, just try to load the plugin, why would you first check a string that should belong to the developer? At least put a message in the logs that the plugin you just unpacked and installed has the wrong version…) I’m sure it must be mentioned somewhere in the docs, but I have not stumbled upon it. To me, this behavior appears to be highly artificial, and cost me some unnecessary hassle. To identify the cause I had to redo all the changes I made incrementally to see where it fails.
Thank you to all who cared to respond. I think this community rocks!
Ran into the same issue, as I tried to start out mine as 1.0.0. But as I recall the log reported this issue? Anyway its always worth running through the log. and “errors” in the plugin.json file have been the root of many of the issues I ran into starting out.
Vcv modules are not forward and backward compatible. Modules for Vcv 1 have a different API. You may not like this versioning, but it’s better than crashing.
Yes I understand that modules are not backward compatible. But your argument makes no sense. First, there is already a field “minRackVersion” in the plugin.json and what role should it have other than signifying compatibility. Second, it is easy to create a plugin that makes VCV crash. The check of the major version in the “version” filed does nothing to prevent that.
minRackVersion is a more recent addition to the SDK to help solve issues with ABI differences between minor releases of Rack V2.The major versioning functions the way it does to facilitate coexistance of both version 1 and version 2 of rack and plugins which was especially important at the time the V1 plugins were bing ported to V2. I expect the same will happen if and when Rack V3 comes along.
Not wanting to sound like an arse, but as a seasoned plugin developer, I can quite comfortably say, if you’re getting that upset over how the versioning works, you’re not going have a very good time the next time there are major SDK changes.
Hey CountModula, thank you for the clarification. Yes, history is the explanation for so many things that do not make sense.
Don’t worry, there is much more necessary to make me upset, in no way does this hold me back from building what I want. I’ve made my comments in a somewhat tongue in cheek manner, and I should apologize for having evoked defensiveness. I did not mean to spread bad feelings in any way. I think CVC Rack is an incredibly fantastic piece of software, which is why I decided to use it as a platform. When I made my comment I thought of the Rack API’s UX aspects, which by the way are overall fantastic (I’ve worked with SDKs that had unmeasurably graver roadblocks), but as everything in life cannot be perfect, and there is always an opportunity to improve. I just meant to point out such an opportunity.