Pnpm support in Meteor 3.4+ with Rspack

Repository example:

For a long time, the Meteor community has discussed pnpm support and the limitations of the legacy Meteor bundler around symlinks, workspace layouts, and dependency resolution. With Meteor 3.4+ and the move into the modern build stack through Rspack integration, many of these limitations are no longer blockers.

Why? Because application module resolution is now delegated to a modern bundler ecosystem through Rspack, while Meteor focuses on its own runtime specifics like Atmosphere packages. This allows Meteor applications to adopt modern package manager strategies such as:

  • pnpm workspaces
  • monorepos
  • shared local packages
  • symlink-based dependency layouts

To validate this properly, I first added E2E coverage in Meteor core:

And then created a public example repository for everybody to try:

One important detail at the moment is that when using pnpm, Meteor automatic npm installation should be disabled:

{
  "meteor": {
    "autoInstallDeps": false
  }
}

This is necessary because pnpm itself owns dependency installation and workspace linking. Otherwise Meteor’s current Rspack auto-install management may interfere with the workspace behavior.

Besides that, the setup is essentially the same as any standard Meteor + Rspack application.

Rspack integration docs:


I still want to improve autoInstallDeps behavior for pnpm workspace scenarios in future Meteor versions. We could also officially expose a pnpm skeleton through meteor create , add it as a --example , and document pnpm workflows more directly.

But sincerely, this is no longer a blocker to start using pnpm properly with Meteor projects today.

Anybody using Meteor 3.4+ with Rspack integration should now be able to adopt pnpm-based workflows without needing custom hacks around the old bundler limitations.

This is just another example of what the modern build stack migration unlocked for the Meteor ecosystem.

8 Likes

Did you test npm packages with transitive dependencies with your skeleton?

I think there will be issues.

Other than that, I love this direction

Hey, thanks for the report!

I just pushed a fix. The root cause was resolve.symlinks: false in the Rspack config of the pnpm monorepo skeleton. That setting is a small optimization that only works when your workspace packages don’t bring their own npm dependencies, which is an oversimplified setup. Removing it restores resolution for transitive dependencies that pnpm keeps inside its virtual store (node_modules/.pnpm/), which is where most real-world cases break.

Could you give it a try and let me know how it goes? Happy to look into any edge case I might have missed.

Worth noting that this is still fully compatible with current Meteor 3.4+, no new Meteor 3.x release needed.

1 Like