P4V is initiative to create a community driven package manager for VVVV, that will allow us to download only packages needed for current project, solve dependencies between packages and allow us to easily update it and search for the new and popular stuff.
Some History
Firstly, we discussed the possibilities of package manager in IRC with devvvvs about a year ago. The main topic against separated packages was, that we have addonpack and it’s easy to download just one zip.
But what about current situation? Currently we have addonpack with a lot of unusable and almost deprecated nodes. Also, people like vux developing they own packages, that completely replacing big part of VVVV functionality, such as DX9 pipeline.
So, for today we have:
- Pack of DX11 nodes
- Pack of OpenCV nodes
- Community created pack of huge amount of cool and not so cool nodes
- Contributions section on website, with more than 9 pages of interesting stuff
As we discussed with Elliot, devvvvs currently planning to introduce new download type, called — pack. For example now on main page we have addonpack as separate download, but in future we will have also dx11 pack and openCV pack.
For me this all structure already looks like a mess. So i think we should somehow simplify the process of adding new independent contributions to vvvv and make this process consistent as possible.
Solution
At node festival i meet Fibo, that already come with the same idea. So we started to work on P4V - the package manager for vvvv. It’s already working in prototype version and have it’s own webserver running on Heroku free hosting.
What It Can Now
P4V is just reuse of the Bower - universal package manager, created by Twitter. It can pull any files from git, solve dependencies and update it. So it’s doing exactly what we need, but have some limitations.
Limitations
Bower is based on NodeJS, so we need to have it installed. Also, we need to have Git added to Path variable, so we can use it from any system’s command line.
Also, the core philosophy of Bower is local packages, so every project just have a file, describing, which packages it needs and we downloading this packages to the project folder. This is good, because different projects can use different versions of plugins, but bad, because we have packs and pack is the globally installed package, if i’m understanding it right.
Another Possible Solutions
Chocolatey is another possible solution for package management. We already have vvvv and addonpack packages there. It works only on windows, but don’t require you to install any additional scripting languages. The bad thing, is that it’s should be hard to setup package management solution on linux server and also we can’t use it for managing vvvv.js packages in future, because it’s locked to Windows.
Benefits From The Custom Server
Custom server allow us to create any API that we need. For example, we can provide an API method to describe, which nodes included in this package.
Also, we can write automatic packager, that allow us to automatically create a correct contribution from the user files, that uploaded via special form.
In other case, we can integrate package search system into vvvv website.
Topics for future discussion
- We should understand, do we really need global packages? Or we only need a global packages and nothing else?
- Do we really care about additional installation like Node.js or we can use it’s minimal version, integrated into vvvv download?
- Maybe vvvv should be distributed just as a package manager, that downloads new versions automatically and this versions is included into projects, because many people have a copy of vvvv in they project directories.
- Do we need a cross platform solution? Or we can just stick with windows?
- How current packs like openCV, dx11 and addonpack should be distributed?
- How we can install packages? For example - we can integrate package manager to VVVV search box, so we always see which nodes we can use, but need to download it. Downloading is fully automatic, we need just click on node and wait some time. (Suggested by @elliotwoods)) and ((user:elias)