Weekly Update (May 28, 2025): New 3.3-rc.0 Release, Faster Builds Delivered! 🚀

We’ve also added a patch for percolate:migrations (we maintain it, but it’s not in core yet):

  • Run async migrations in sequence (PR #90)

To pull in the latest changes:

meteor add percolate:migrations@2.0.1

We could make it part of the Meteor core later. What do you think? (Bring percolate:migrations to Meteor core packages · meteor/meteor · Discussion #13648 · GitHub).

7 Likes

Great work, y’all. Using SWC by default makes this one of the most significant releases in terms of DX in a long time. :tada:

7 Likes

I’m very much for integrating percolate:migrations. It is the de facto standard already and is necessary for any production apps.

4 Likes

with "modern": true I get this error message:

Parcel watcher error on /Users/jan-michaelpilgenroeder/Code/plAIground: [Error: Events were dropped by the FSEvents client. File system must be re-scanned.]

Seems to work fine though. Don’t notice any problems.

2 Likes

I was able to reproduce this issue on my Mac M1 reported here as well. It seems specific to Mac environments and only shows up with meteor profile. Did you see this log during a normal meteor run when working in development mode?

Yes, I got it with a normal meteor run when working in dev mode (M1 as well):

“MONGO_URL=‘[…]’ meteor run --exclude-archs web.browser.legacy --settings=settingsLocal.json”

I also saw this, on a Mac (not M1)

Me too, on M1, also seems to work just fine.

@nochocodonor - This is brilliant work! Major kudos for swapping out Babel for Speedy Web Compiler! Gave it a spin this weekend, and it worked great.

Screen shot of a P2P app using Interplanetary File System (IPFS) protocol (most of you will be familiar with IPFS via Ethereum), built with Meteor and SWC.

I’ll provide one bit of feedback/feature request for consideration. When we try to integrate the Helia IPFS library, we’re getting the following error:

meteor run --port 3000 --settings config/settings.helia1.json
[[[[[ /Volumes/SonicMagic/Code/ipfs-on-fhir-prototype-rust ]]]]]

=> Started proxy.                             
=> Started HMR server.                        
=> Started MongoDB.                           
W20250525-12:53:40.924(-5)? (STDERR) [meteor-desktop] will not watch for changes is .desktop because there is no .desktop/settings.json or desktopHCP is set to false.  Remove this plugin if you do not want to use desktopHCP.
W20250525-12:53:40.929(-5)? (STDERR) ❌ Failed to load Helia modules via wrapper: Failed to load helia: No "exports" main defined in /Volumes/SonicMagic/Code/ipfs-on-fhir-prototype-rust/node_modules/helia/package.json
I20250525-12:53:40.930(-5)? Starting FHIR P2P server (Direct Helia priority)...
I20250525-12:53:40.930(-5)? 🔍 Testing IPFS connection strategies (Direct Helia priority)...
I20250525-12:53:40.930(-5)? 📦 Strategy 1: Trying direct Helia import...
I20250525-12:53:40.930(-5)? 🚀 Initializing direct Helia with config: {
I20250525-12:53:40.930(-5)?   repoPath: '/tmp/ipfs-helia-3000',
I20250525-12:53:40.930(-5)?   swarmPort: 4001,
I20250525-12:53:40.930(-5)?   wsPort: 4002,
I20250525-12:53:40.930(-5)?   enableGC: true,
I20250525-12:53:40.930(-5)?   enablePubsub: true,
I20250525-12:53:40.930(-5)?   enableRelay: true
I20250525-12:53:40.930(-5)? }
I20250525-12:53:40.930(-5)? 🚀 Starting Direct Helia IPFS node...
I20250525-12:53:40.930(-5)? 📍 Repo path: /tmp/ipfs-helia-3000
I20250525-12:53:40.930(-5)? 📍 Swarm port: 4001
I20250525-12:53:40.930(-5)? 📍 WebSocket port: 4002
I20250525-12:53:40.930(-5)? 📦 Loading Helia modules with SWC-compatible imports...
I20250525-12:53:40.930(-5)? ❌ Direct Helia failed: Failed to load Helia modules: Failed to load helia: No "exports" main defined in /Volumes/SonicMagic/Code/ipfs-on-fhir-prototype-rust/node_modules/helia/package.json
I20250525-12:53:40.930(-5)? 💡 Check: npm install helia @helia/unixfs libp2p...
I20250525-12:53:40.930(-5)? 📦 Strategy 2: Trying simple HTTP client...
W20250525-12:53:41.034(-5)? (STDERR) ❌ Failed to start embedded Helia (direct): Error: Failed to load Helia modules: Failed to load helia: No "exports" main defined in /Volumes/SonicMagic/Code/ipfs-on-fhir-prototype-rust/node_modules/helia/package.json
W20250525-12:53:41.034(-5)? (STDERR)     at HeliaEmbeddedDirect._loadModules (server/ipfs-helia-direct.js:133:13)
W20250525-12:53:41.034(-5)? (STDERR)     at processTicksAndRejections (node:internal/process/task_queues:105:5)
W20250525-12:53:41.034(-5)? (STDERR)     at HeliaEmbeddedDirect.start (server/ipfs-helia-direct.js:152:23)
W20250525-12:53:41.034(-5)? (STDERR)     at createHeliaNode (server/ipfs-helia-direct.js:416:17)
W20250525-12:53:41.034(-5)? (STDERR)     at server/main.js:92:25
W20250525-12:53:41.034(-5)? (STDERR)     at /tools/static-assets/server/boot.js:453:5
W20250525-12:53:41.034(-5)? (STDERR)     at /tools/static-assets/server/boot.js:503:5
W20250525-12:53:41.034(-5)? (STDERR)     at startServerProcess (/tools/static-assets/server/boot.js:501:3)
I20250525-12:53:41.034(-5)? Connecting to IPFS at http://localhost:5001
I20250525-12:53:41.034(-5)? ✅ Connected to IPFS node: 12D3KooWE9Q56iunu9u8k6deKSnZLnwRGAernNsY4fBMwczhHivJ
I20250525-12:53:41.034(-5)? IPFS Protocol Version: undefined
I20250525-12:53:41.034(-5)? IPFS Agent Version: kubo/0.35.0/Homebrew
I20250525-12:53:41.034(-5)? ✅ Simple HTTP client connected successfully!
I20250525-12:53:41.034(-5)? Network methods updated: Simple HTTP (Available: true)
I20250525-12:53:41.034(-5)? ✅ IPFS client initialized
I20250525-12:53:41.034(-5)? 🔧 Client Type: Simple HTTP
I20250525-12:53:41.034(-5)? 🔧 IPFS Available: true
I20250525-12:53:41.034(-5)? 🚀 Server Port: 26323
I20250525-12:53:41.034(-5)? 
I20250525-12:53:41.034(-5)? 🎉 External IPFS daemon connected!
I20250525-12:53:41.034(-5)?    ✅ Create shares with real IPFS storage
I20250525-12:53:41.034(-5)?    ✅ Pin content to your node
I20250525-12:53:41.034(-5)?    ✅ Share via IPFS URIs and gateway URLs
I20250525-12:53:41.034(-5)?    ⚠️  Requires external IPFS daemon
I20250525-12:53:41.034(-5)? 
I20250525-12:53:41.034(-5)? ✅ FHIR P2P server started

This error occurs when Node.js cannot resolve the entry point for a modern ES module package. The helia package uses the newer ES module “exports” field in its package.json to define entry points, but the Node.js module resolver is looking for the traditional “main” field instead. This typically happens when:

  1. Module Resolution Mismatch: The package uses modern ESM “exports” syntax (e.g., "exports": { ".": "./dist/src/index.js" }) but the importing environment expects the older CommonJS “main” field (e.g., "main": "index.js").
  2. Toolchain Compatibility: Build tools like Meteor’s SWC compiler or certain Node.js versions may not fully support the newer “exports” field resolution, causing them to fall back to looking for “main” which doesn’t exist in modern ESM-only packages.

Root Cause: Modern IPFS/libp2p ecosystem packages (helia, @helia/unixfs, libp2p, etc.) are published as ESM-only with “exports” fields, but Meteor’s current module resolution doesn’t properly handle this newer package.json format, especially when using dynamic imports in server-side code.

Impact: This prevents server-side usage of modern IPFS libraries in Meteor applications, forcing developers to either use older HTTP client approaches or implement complex bundling workarounds.

Request Before releasing official SWC support, add support for modern ESM “exports” syntax (e.g., "exports": { ".": "./dist/src/index.js" })

4 Likes

Great to see you get a sucessfully adoption of SWC in your project!

We’re aware of the ESM-only export fields limitation in Meteor. There’s a community PR to address this, but we’ll add core support as part of a modern bundler integration in future versions unless the existing PR gains more attention. We’ve already contributed to that PR and are available to assist further with direct core contributions for this complex, bundler-specific feature.

5 Likes

We’ve released Meteor 3.3-rc.0 to address feedback received so far:

  • Fixed an issue where TypeScript projects saw no SWC speedup in app code, even though node modules and packages were accelerated.
  • Resolved non-fatal watcher warnings on macOS.
  • Made meteor profile run reliably in various scenarios and clean up any touched project files. (meteor reset to get the new changes)
  • Added support for swc.config.js in the app root to enable dynamic configs (for example, multiple aliases based on an environment variable).
  • Enabled .swcrc configs to apply differently depending on their nested file context.

This release is now closed unless a critical issue arises. Next, we’ll publish the official 3.3 version. Later, we’ll release patch 3.3.1 with fixes and updates for the new build stack based on feedback from early adopters.


Hands on

To update an existing app:

meteor update --release 3.3-rc.0

To create a new app:

meteor create --release 3.3-rc.0

Add this to your package.json to enable the new modern build stack:

"meteor": {
  "modern": true
}

This setting is on by default for new apps.

10 Likes

Trying a second app. Anybody run into a import.meta error in other libraries?

I’ve been trying to use the latest METEOR@3.3-rc.0 with a .swcrc file:

{
  "$schema": "https://swc.rs/schema.json",
  "jsc": {
    "parser": {
      "syntax": "ecmascript",
      "jsx": true,
      "dynamicImport": true,
      "privateMethod": true,
      "functionBind": false,
      "exportDefaultFrom": true,
      "exportNamespaceFrom": true,
      "decorators": false,
      "decoratorsBeforeExport": false,
      "topLevelAwait": true,
      "importMeta": true
    },
    "transform": {
      "react": {
        "runtime": "automatic",
        "importSource": "react",
        "pragma": "React.createElement",
        "pragmaFrag": "React.Fragment",
        "throwIfNamespace": true,
        "development": false,
        "useBuiltins": false
      },
      "optimizer": {
        "globals": {
          "vars": {
            "import.meta": "{ env: { NODE_ENV: 'development' }, url: 'file:///' }"
          }
        }
      }
    },
    "target": "es2020",
    "loose": false,
    "externalHelpers": false,
    "keepClassNames": true
  },
  "module": {
    "type": "es6",
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false,
    "ignoreDynamic": true,
    "preserveImportMeta": true,
    "resolveFully": false
  },
  "minify": false,
  "sourceMaps": true,
  "inlineSourcesContent": true,
  "isModule": true,
  "env": {
    "targets": {
      "chrome": "90",
      "firefox": "90",
      "safari": "14",
      "edge": "90"
    }
  },
  "exclude": [],
  "include": []
}

But so far, no luck. Doing a little research:


Cornerstone3D uses modern ES module syntax including import.meta for worker registration and environment detection. Meteor’s bundling system (even with SWC) is treating these as non-module scripts during the bundling phase.

Potential Solutions for MDG to Investigate:

  1. Module Context Preservation: Ensure that when processing node_modules with ES module syntax, the module context is preserved
  2. import.meta Polyfill: Provide a built-in import.meta polyfill during the bundling phase
  3. Selective Module Processing: Allow certain packages to be processed as true ES modules rather than being bundled

Could you provide a minimal repository with the expected setup and a concrete example showing the limitation? This will make it easier for us to review new bundler features and check compatibility later for your use case.

Sure, why not…

Cornerstone3D is a DICOM viewer for Radiology images. It’s sort of a beast of a library that uses every optimization available to squeeze every bit of performance out of the web browser… GPU optimizations, webworkers, web assembly. It’s a piece of art. But ‘minimal’ is in the eye of the beholder in this case.

@chafey May have some insights.

2 Likes

Neat! Have you seen OHIF? GitHub - mieweb/OHIF-Viewers: OHIF zero-footprint DICOM viewer and oncology specific Lesion Tracker, plus shared extension packages https://docs.ohif.org/

2 Likes

I have! Chris and I go way back, and I was attending OHIF meetings for a short while.

I’ve been going through the scrapyard of projects, using LLMs to refactor them to Meteor v3, and have been wanting to get the Radiology projects upgraded. I got the older cornerstone.js library integrated into Meteor v3, but it’s deprecated and doesn’t have the GPU rendering, webworkers, WASM files, etc.

If OHIF library integration works in the Meteor ecosystem, I would content myself with it. But I’m pretty sure Chris migrated to webpack for the OHIF viewer because of the Meteor bundler issues. I’d like to get Cornerstone3D back into the Meteor ecosystem, so we can integrate a quality image viewer with all the other EHR/PHR modules we have on hand.

2 Likes

@awatson1978 I think it should be easy to convert a ESM package into a CommonJS package and use it published or as a local NPM in your Meteor Project.

2 Likes

Eh, easier said than done. But if someone can figure it out, I’d love to see it.

1 Like