Shipping Monorepo Support
September 28, 2022

Shipping Monorepo Support

Shantanu Joshi
Today, we are excited to announce the General Availability of Monorepo Support for all Render customers. If you’re using the same Git repository for multiple services, you can now configure Render to deploy your service only for relevant code changes. Even if you’re using a separate repository per service, Render’s Monorepo Support helps you avoid unnecessary deploys, reducing build times to empower you to ship even faster. Read on to learn more.

Why Monorepo Support

Monorepo support has been our most requested feature for some time now. We heard your frustration with a change in one service triggering needless deploys across dozens of other services. Some of you even turned off auto-deploys and resorted to manually deploying specific services using deploy hooks or our REST API.

Our Solution

Render's support for monorepos is unique in its layered approach, enabling you to configure a Root Directory as well as Build Filters. Use these new tools both in the Dashboard and within Blueprints to define how Render responds to what you push. The Root Directory can be set to any folder in your Git repository. Render automatically builds and deploys your service when files change inside the Root Directory and ignores all file changes outside this directory. Your build and start commands no longer need to cd into your Root Directory, and automatic installs use dependency specs (like package.json) in your Root Directory instead of the root of your repository. As one customer put it, "root directory is a home run!"
Root Directory was definitely what I was hoping for. I was debating on having two repos vs. one, and this made the decision easy to keep them in one. I’m all about trying to have the simplest setup possible. I like the simplicity of Render, vs. the monstrosity that AWS has become that requires dedicated Devops to manage.
You can also use Build Filters for precise control over changes that should or should not trigger a build. Build Filters are glob patterns that specify included paths, ignored paths, or both. Check out our docs for details.
As the founder of a start-up, it's critical to put 100% percent of our energy into developing our product, which helps 3D design teams collaborate. Render's Monorepo Support has helped us avoid needless redeploys of services when unrelated code changed and enabled us to seamlessly use autodeploys so we can iterate on our product faster and let Render take care of making sure we have great developer productivity.

Making collaboration efficient

Monorepo Support is deeply integrated across Render's platform and extends to Pull Request Previews and Preview Environments. These features automate the creation of high fidelity testing environments on each Pull Request; Pull Request Previews and Preview Environments support rapid feedback cycles without the need for external CI/CD tools and manual integrations to configure deploys and test environments. When using these, users can now reduce costs by limiting preview environment creation to only changes made within a defined Root Directory or matching glob patterns specified as part of a service's Build Filters.
Render's newly introduced monorepo support was what led me to try out Render. Almost every project I work on now is a monorepo, and part of the reason I use Render is that I don't want to run CI/CD or manage certificates. Getting Render's Build Filters set up was easy with helpful examples and documentation. Without monorepo support, I'd have to spend a lot more time on CI/CD.
UX Example
UX was great. Scripts now show an 'api-express/' prefix to signify that the scripts will run relative to that directory.
-Pranay Teja

Conclusion

Root Directory and Build Filters are versatile tools that give you full control over deploying any Render service, even when services are not based on a Monorepo.
I keep both the mobile app and the API in the same repo, making it very useful to not trigger the build when I'm not working on the API. Even without a monorepo, Render's Build Filters are quite useful for me so that tests, docs, or other content don't need to trigger a build within the repo.
Check out the documentation to get started!