# golevelup/nestjs: What the Monorepo Actually Ships

> 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.

**golevelup/nestjs** — A collection of badass modules and utilities to help you level up your NestJS applications 🚀

- Repository: https://github.com/golevelup/nestjs
- Website: https://golevelup.github.io/nestjs/
- Stars: 2,749 · Forks: 301
- Language: TypeScript
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/golevelup-nestjs

## 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/nestjs-discovery@7.0.3 on 2026-05-26 and @golevelup/nestjs-rabbitmq@9.0.2 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:

```bash
pnpm add @golevelup/nestjs-rabbitmq
```

The 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 /:

```yaml
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/nestjs-rabbitmq@9.0.2 and @golevelup/nestjs-discovery@7.0.3 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/nestjs-discovery@7.0.3 on 2026-05-26, followed by @golevelup/nestjs-rabbitmq@9.0.2 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.

## 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.

## FAQ

### 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/nestjs-discovery@7.0.3 on 2026-05-26.

## Sources

- [golevelup/nestjs on GitHub](https://github.com/golevelup/nestjs)
- [License: MIT](https://github.com/golevelup/nestjs/blob/master/LICENSE)
- [Project website](https://golevelup.github.io/nestjs/)
- [README](https://github.com/golevelup/nestjs/blob/master/README.md)
- [Releases](https://github.com/golevelup/nestjs/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/golevelup-nestjs
