golevelup/nestjs: What the Monorepo Actually Ships
A collection of badass modules and utilities to help you level up your NestJS applications 🚀
At a glance
- What is it?
- golevelup/nestjs is a pnpm and Lerna monorepo of eleven NestJS packages, from RabbitMQ RPC to Stripe webhooks. The useful part is knowing which package you actually need, and where the documentation stops.
- Who is it for?
- Adopt @golevelup/nestjs-rabbitmq if you need both RPC and publish/subscribe patterns against one RabbitMQ connection, and @golevelup/ts-jest if you are tired of hand-written provider mocks. Skip the monorepo if you want a single dependency with one changelog and one version number, because each package here versions independently.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 8 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 4, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What golevelup/nestjs solves, and for whom
NestJS gives you modules, providers, decorators and dependency injection. It does not give you a RabbitMQ module that speaks both RPC and publish/subscribe, a way to find every provider carrying a particular piece of metadata, or a Stripe webhook pipeline. golevelup/nestjs is a collection of those gaps filled in. The README describes it as "A collection of Badass modules and utilities to help you level up your NestJS application."
The audience is narrow and specific. You already run NestJS and you have hit one of these edges: you need to consume a third-party GraphQL API with types, you need Hasura event handlers to call into your Nest code, you need webhook middleware, or you need Jest to produce typed mocks of your providers without writing them by hand. The repository is a monorepo, not a framework, and the eleven packages are independent npm artifacts with their own versions and changelogs. Nothing here replaces NestJS core; everything here plugs into it.
The eleven packages and what each one actually does
The README table is the map. @golevelup/nestjs-common holds common types and mixins. @golevelup/nestjs-discovery provides a DiscoveryModule "for finding providers, controllers and method handlers from your NestJS app that have certain metadata." @golevelup/nestjs-rabbitmq is a NestJS native module for RabbitMQ supporting both RPC and publish/subscribe. @golevelup/nestjs-modules is a dynamic module helper, useful for configuring once and importing elsewhere. @golevelup/nestjs-hasura wires Hasura event handlers into NestJS. @golevelup/nestjs-graphql-request provides dependency injection for GraphQLClient so you can make type safe requests to third-party GraphQL APIs. @golevelup/nestjs-webhooks supplies middlewares and helpers for processing webhooks. @golevelup/nestjs-stripe covers a Stripe client and webhook processing. @golevelup/ts-jest is Jest tooling for testing NestJS applications. @golevelup/nestjs-google-cloud-pubsub is a type-safe Google Cloud Pub/Sub integration. @golevelup/nestjs-graphile-worker integrates Graphile Worker.
Two observations from the layout. First, the dependency direction is visible in the root package.json: the monorepo pins @nestjs/common, @nestjs/core and @nestjs/platform-express at ^11.1.24, so the collection tracks NestJS 11. Second, the packages are not equally deep. RabbitMQ, discovery and ts-jest carry the most surface area in the table's own descriptions; common is a types-and-mixins package that exists to be depended on by the others.
How the monorepo is assembled: pnpm, Lerna and changesets
The build is a pnpm workspace driven by Lerna. The root package.json declares the build script as lerna run build with rabbitmq-integration and google-cloud-pubsub-integration excluded, and there is a matching build:watch that runs the same exclusions in parallel. Versioning goes through changesets: the README states that a changeset has to be run locally to provide human-readable notes and select the applicable packages, and that once the changeset is pushed to master a GitHub action generates a PR with the preview.
That means the release cadence is per package, not per repository. The recent releases show it plainly: @golevelup/[email protected] on 2026-05-26 and @golevelup/[email protected] on 2026-05-20. The repository was last pushed on 2026-09-15. Lerna's publish scripts run the build and the test suite before publishing from package, so a package only reaches npm after both pass.
The practical consequence for a consumer: pin exact versions of the golevelup packages you use and read the changelog for that package, not the repository as a whole. A minor bump in discovery tells you nothing about rabbitmq.
Installing a package and wiring your first RabbitMQ handler
There is no single install for the collection. You install the package you need from npm. For the RabbitMQ module, the README's package name is @golevelup/nestjs-rabbitmq:
pnpm add @golevelup/nestjs-rabbitmqThe repository ships a docker-compose.yml for a local broker. It runs the rabbitmq:management image, maps 15672 for the management UI and 5672 for AMQP, and sets the default user and password to rabbitmq with the vhost at /:
services:
rabbit:
image: 'rabbitmq:management'
environment:
RABBITMQ_DEFAULT_USER: 'rabbitmq'
RABBITMQ_DEFAULT_PASS: 'rabbitmq'
RABBITMQ_DEFAULT_VHOST: '/'
ports:
- '15672:15672'
- '5672:5672'Start it with docker compose up -d and the management UI is on port 15672. Then import the module into your application module, following the package README for the exact option names, and decorate a handler. The module is the piece that carries both messaging patterns, so the same connection serves RPC calls and publish/subscribe consumers. Verify the wiring by opening the management UI at http://localhost:15672 and confirming the connection and the queue your handler declared appear there. If nothing appears, the module was not imported or the connection options were not read.
Where the documentation stops
The top-level README is a table. It gives each package a one-line description, a version badge and a link to a per-package changelog. It does not document rollback, retry semantics, dead-letter behaviour, or what happens to in-flight RPC calls when the broker restarts. Those questions are answered, if at all, inside the individual package READMEs under packages/, and the top-level file does not summarise them.
This is the honest limitation of the collection as a whole: the repository-level documentation is an index, not a manual. If you are evaluating the RabbitMQ module for a system where message loss is unacceptable, the top-level README will not tell you whether acknowledgements are automatic or manual, and the changelog will not either. You have to read the package source and its own README. The same applies to the Hasura and Stripe packages, where the integration surface is large and the top-level description is a single clause.
There is also a version-skew risk that comes with the monorepo shape. Because each package versions independently, nothing in the repository guarantees that @golevelup/[email protected] and @golevelup/[email protected] were built against the same internal assumptions. The root workspace pins NestJS 11, but the published packages carry their own peer ranges.
When this is the wrong tool, and what to use instead
If you need one library that covers messaging, HTTP, scheduling and configuration under a single version number, golevelup/nestjs is the wrong shape. It is a set of independent packages, and adopting it means adopting several release streams. NestJS's own @nestjs/microservices is the direct alternative for the messaging case: it is maintained as part of the NestJS core distribution, ships with the framework's version, and supports multiple transports through one abstraction. The difference in approach is real. @nestjs/microservices gives you a transport-agnostic client and server with a single message pattern model. @golevelup/nestjs-rabbitmq is RabbitMQ-specific and exposes both RPC and publish/subscribe as first-class patterns on the same connection, which is what the README claims for it. If you are committed to RabbitMQ and want both patterns without layering your own abstraction, the golevelup package targets that directly. If you might move transports, or you want the framework to own the upgrade path, @nestjs/microservices is the safer default and the golevelup module is the specialised choice.
For the testing package the comparison is different. @golevelup/ts-jest exists because NestJS's testing utilities require you to construct providers yourself. If your test suite already has a mocking strategy that works, adding this package buys you little.
Licence, maintenance and the cost of upgrading
The repository is MIT licensed, and the root package.json carries "license": "MIT". MIT imposes no copyleft obligation on your application, but this is a description of the licence file, not legal advice; if your organisation has a policy on third-party dependencies, route it through that process.
The last push to the repository was on 2026-09-15. The most recent release in the list is @golevelup/[email protected] on 2026-05-26, followed by @golevelup/[email protected] on 2026-05-20. The repository is not archived. Because each package publishes through changesets and Lerna, the upgrade cost is per package: you read that package's CHANGELOG.md, which the README links for every entry in the table, and you bump that dependency. There is no repository-wide release note that covers all eleven at once, so a multi-package adoption means tracking several changelogs. The root workspace pins NestJS ^11.1.24, so a major NestJS upgrade is the event most likely to force movement across the packages you use.
Editorial conclusion
Adopt @golevelup/nestjs-rabbitmq if you need both RPC and publish/subscribe patterns against one RabbitMQ connection, and @golevelup/ts-jest if you are tired of hand-written provider mocks. Skip the monorepo if you want a single dependency with one changelog and one version number, because each package here versions independently. Before you commit, open the README of the specific package you plan to use and check whether it documents the configuration keys you need, since the top-level README only lists packages and their one-line descriptions.
Frequently asked questions
How do I install a golevelup/nestjs package?
There is no single install for the collection. Each package is published separately on npm, so you add the one you need, for example @golevelup/nestjs-rabbitmq, and follow that package's README under packages/.
Does golevelup/nestjs replace @nestjs/microservices?
No. @golevelup/nestjs-rabbitmq is RabbitMQ-specific and supports both RPC and publish/subscribe patterns, while @nestjs/microservices is transport-agnostic and ships with the NestJS core distribution.
Which NestJS version does golevelup/nestjs target?
The root package.json pins @nestjs/common, @nestjs/core and @nestjs/platform-express at ^11.1.24, so the monorepo tracks NestJS 11.
How do I run a RabbitMQ broker locally for the golevelup/nestjs RabbitMQ module?
The repository includes a docker-compose.yml that runs the rabbitmq:management image, exposes port 5672 for AMQP and port 15672 for the management UI, and sets the default user and password to rabbitmq.
Is golevelup/nestjs actively maintained?
The repository is not archived and was last pushed on 2026-09-15. Releases are per package through changesets and Lerna; the most recent listed is @golevelup/[email protected] on 2026-05-26.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/golevelup-nestjs)