monospace kinda like monorepo but different
npm install @t-rex.software/monospaceThey came with benefits, some of which are:
- Better communication between developers teams
- Ease on-boarding of new developers in the organization by allowing them to get all source code in a single command
- Ability to launch tasks on multiple projects at once (lint, test, build ...)
- Most advanced tools allow for caching command results, implying a gain of time when working locally, and with external caching services some offers time and cost reduction on CI too.
But they also came with some drawbacks:
- Open sourcing part of a private monorepository is not simple, you end up with either an external dependency that bring us back to multi-repository paradigm. Or introducing some more tools to export part of the monorepository to an external repository, which will make it more cumbersome when it comes to accept external Pull requests
- Multi-repositories allow for fine grained access control, whether it's not impossible to achieve in monorepositories, it's not an easy task either (some tools have this feature built-in but then you rely on a new access control system to keep in sync).
So here come monospace
monospace aim to provide you with the best possible subset of this too worlds:
- Easy on-boarding allowing to get all the necessary source code in a single command line
- Same benefits as monorepo for cross team communication
- Ability to launch tasks through multiple projects at once
- Fine grained access control with tools you already have in place (git repository access)
- Easy separation between private and public projects without additional cost for accepting external contributions
So how does it work ?
In a monospace you can have many kind of projects like applications, libraries, ...
But in monospace terms there is three kind of projects:
"internal", "external" and "local":
- internal: are projects which are embedded in the monospace repository and share the same history.
- external: are projects that has their own repositories inside the monospace repository. They are gitignored by the monospace repository, and so they manage their own history.
- local: this is exactly the same as external projects but without a configured remote repository, and so they are not published anywhere, but their name is reserved in the global monospace so the name won't be taken by another developer accidentally. This case can be used by a new library project you have not shared yet with the rest of the organization.
Donation over 1000€ will allow you or your company to appears on this page as sponsors of the project, in such case contact us at contact.trex.software@gmail.com with the receipt of your donation.