I know it is not the main point of this thread, but I feel like it’s worth me trying to have a go at a second explanation of what the duniverse tool provides. This is based on my memory of a discussion with the tool’s authors a few weeks ago – so details and motivations may well be wrong, but hopefully the general idea will still be fairly accurate.
duniverse
is basically a tool that takes a description of a set of inter-dependent projects and sets up a dune workspace containing all those projects as git subtrees. This allows you to conveniently build and edit those projects simultaneously, and even make git commits containing changes to multiple projects (which IIUC git will auto-magically turn into appropriate commits in the individual subtrees). This should make it much easier to coordinate changes across multiple dependent projects.
I think that the original idea was to use this to manage projects that want to vendor in their dependencies. From this perspective the whole combined workspace is your project and you commit it to your master branch. You can make edits to your dependencies, and easily submit them upstream, and since you’ve vendored the dependencies you can easily control which version of the dependency is used with your project.
Now, I’m a bit wary of vendoring – I think it is reasonable for an executable but a bit dubious for libraries – so I was initially a little sceptical. However, it was pointed out to me that this same tooling also supports another use case – which I shall dub “virtual monorepos” for lack of a better term. In this use case, the workspace created by duniverse is not commited as the source for your actual project – instead it is just your own little local monorepo with all the convenience benefits that provides.
No one needs to know that you are secretly using a monorepo workflow – duniverse just quietly sets one up for you and when you’re done helps you to submit your changes to the non-monorepo outside world. However, if you and your fellow collaborators are all working in very similar workspaces then you can also make a repo containing just the config files that tell duniverse how to set-up your workspace and anyone can just clone it, call duniverse
and immediately have a convenient workspace for working on your projects.
I think this is all @jeremiedimino is really suggesting: adding a repo to the community organisation with the config files for a workspace containing all the projects under the organisation. For those who want to use it, it will give them a nice workflow for working on the community projects out-of-the-box.
Now, duniverse is, to my knowledge not actually released yet, and I worry that we’ve stolen some of @avsm’s thunder by discussing it publicly before he’s had a chance to do his big release/reveal. But I find myself quite excited by this project, and I didn’t want people to get the wrong idea about it before it was even released, so I thought I would post this anyway.