Meteor 3.3.2 is Out – Bug Fixes, DX Improvements, and Security Updates

We’re excited to announce that Meteor 3.3.2 is now available and recommended for all projects! 🎉

This release brings a strong focus on security patches, bug fixes, and developer experience improvements, especially around Mongo, accounts packages, and Cordova compatibility. It also marks an important step forward toward future versions of Meteor.

Quick Start

Want to use Meteor 3.3.2 now?

Update your existing app:

Bash
meteor update --release 3.3.2


Create a new app with 3.3.2:

Bash
meteor create my-app --release 3.3.2

Highlights

🔗 Async-Compatible Account URLs

You can now define async versions of Accounts.urls for system-generated links (like password resets):

JavaScript
Accounts.urls.resetPassword = async (token) => {
  const user = await Meteor.users.findOneAsync(
    { "services.password.reset.token": token },
    { fields: { "services.password.reset.email": 1 } }
  );
  const email = user.services?.password?.reset?.email;
  return Meteor.absoluteUrl(
    `reset-password/${token}?email=${encodeURIComponent(email)}`
  );
};

This makes it easier to personalize emails and URLs using user data.

findUserByEmail Moved to accounts-base

The findUserByEmail method was moved from accounts-password to accounts-base. That means you no longer need to install accounts-password if you just want to find users by email:

Bash
meteor remove accounts-password

insertedId Returned on upsertAsync (Client)

We’ve restored behavior from Meteor 2.x. Now when you use upsertAsync, it returns insertedId when a new document is inserted (not when updated):

JavaScript
const result = await collection.upsertAsync({ name: "doc" }, { $set: { value: 1 } });
console.log(result.insertedId); // Only present if inserted

Bug Fix: Unrecognized Operators

We’ve resolved an issue where using certain Mongo operators could trigger unexpected errors:

JavaScript
Meteor.publish('Home', function(viewport) {
  check(viewport, Match.ObjectIncluding({ bounds: geoPolygonSchema }));
  return Features.find({
    hull: { $geoIntersects: { $geometry: viewport.bounds } },
  });
});

No more crashes when using valid query operators like $geoIntersects.

Security Fix

We’ve patched a vulnerability in sha.js, improving the overall security of your apps.

Cordova: Modern Browser Support

Cordova apps now default to modern browser support unless explicitly disabled. This ensures better performance and compatibility across devices.

Internal Changes

  • Removed the deprecated lodash.template dependency.
  • Multiple performance and consistency improvements across packages.

Package Updates

Meteor Packages Bumped:

NPM Packages Bumped:

🙌 Special Thanks

A big shoutout to our amazing contributors who helped make this release possible:

Your contributions are essential to the evolution of the Meteor ecosystem. 💜

What’s Next?

Meteor 3.4 – Coming Soon

  • Deeper integration with Meteor-Rspack 6
  • Better production bundling, faster builds, and improved plugin support
  • Dev-only packages to reduce final server build size
  • Community-led improvements from recent GitHub issues and discussions

Meteor 3.5 – In the Works

  • Native support for MongoDB change streams
  • New driver to replace OPLOG and polling strategies in the reactivity layer

🧑‍💻 Want to Get Involved?

Check out our GitHub repo, browse open issues, and start contributing. We always welcome help! Especially if you’re interested in performance, bundlers, or data layers.