migrate-to-rspack
Skill10 starsChanged 3 months agoMITView on GitHub
Use when migrating an existing Meteor app to Rspack (Meteor 3.4+), or upgrading Rspack 1 to 2 on Meteor 3.6 beta. Triggers on nested imports, mainModule entry points, server-only apps, replacing fourseven:scss / meteor/less / coffeescript / jorgenvatle:vite / zodern:melte with loaders, Svelte/TypeScript preprocessing or Lingui SWC plugin failures after upgrade, CommonJS default-import interop, module.exports in client graphs, Node built-ins in browser code, _build / build-assets / build-chunks, .meteorignore hiding handoff files, dynamic chunks under ROOT_URL, meteor.modules for CSS/HTML, resolve.symlinks or resolve.alias migration, automatic dependency updates and immutable CI/Docker builds. Use this skill when the user asks about migration compatibility or a build plugin's Rspack replacement. For new-app setup and rspack.config.js helpers, use meteor-modern-build-stack instead.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- wekan/wekanedited, first seen Oct 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- wekan/wekan★ 21k84% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- release-publishingSkill
- skill-gap-auditSkill
- skill-maintenanceSkill
- meteor-accountsSkill
- meteor-blazeSkill
- meteor-cli-installationSkill
- meteor-community-packagesSkill
- meteor-debuggingSkill
- meteor-deploymentSkill
- meteor-methodsSkill
- meteor-modern-build-stackSkill
- meteor-mongo-minimongoSkill
- meteor-nativeSkill
- meteor-pubsubSkill
- meteor-reactSkill
- meteor-securitySkill
- meteor-testingSkill
- meteor-typescriptSkill
- migrate-to-meteor-3Skill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 1 is distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 57
Keep valid entries/configuration.
- Very specific: line 85
Run meteor add rspack and watch the verbose [Transpiler] log for remaining (app) failures.
- Very specific: line 119
If the project already uses any of these names, rename in package.json:
- Very specific: line 131
Do not edit any file under those folders.
- Very specific: line 135
Do not match the active build context in .meteorignore or METEOR_IGNORE.
- Very specific: line 160
Prefer namespace imports. For the interop override and its app-wide CommonJS/tree-shaking cost, read references/code-migrations.md.
- Very specific: line 166
Use the existing manager's frozen install with dev dependencies, then build.
- Very specific: line 174
Add Rspack before fixing Babel fallbacks.
- Very specific: line 179
Commit _build/, public/build-assets/, public/build-chunks/, private/build-assets/.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Migrate an existing app to Rspack
Rspack compiles app code; Meteor builds Atmosphere packages and assembles the bundle. Keep packages, but audit their architecture and browser dependencies.
Meteor 3.4+ required. Prefer enabling "meteor": { "modern": true } and
fixing Babel fallbacks first. For setup/helpers, use meteor-modern-build-stack.
Match @meteorjs/rspack to the Meteor release, not to
@rspack/core or @rspack/cli:
| Meteor | rspack | @meteorjs/rspack | Capability boundary |
| 3.4 | 1.0.0 | 1.0.0 | Base integration and helpers. |
| 3.4.1 and 3.5 | 1.1.0 | 2.0.1 | Adds v2 helpers and inherited TOOL_NODE_FLAGS. |
| 3.5.1 | 1.2.0 | 2.1.0 | Revised client polyfills and extension discovery. |
| 3.5.2 | 1.3.0 | 2.2.0 | Dependency diagnostics, mode isolation, full-app/TLA and cache fixes. |
| 3.6-beta.0 | 1.4.0-beta360.0 | 3.0.0-beta.1 | Rspack 2.2.0 and workspace-aware installs. |
| 3.6-beta.1 | 1.4.0-beta360.1 | 3.0.0-beta.2 | TypeScript rebuild-loop fix; Node 26.8.2. |
| 3.6-beta.3 | 1.4.0-beta360.3 | 3.0.0-beta.3 | Rspack 2.2.7; architecture graphs and test-ignore fixes. |
| 3.6-rc.0 | 1.4.0-rc360.0 | 3.0.0-rc.0 | Rspack 2 and separate architecture entries. |
Inspect .meteor/versions, package.json, and the lockfile: Atmosphere,
Meteor npm integration and Rspack core versions are independent. With automatic
installs enabled, startup aligns dependencies; review and commit the changes.
meteor update --npm is an alternative. Keep the release pairing.
Already using Rspack? For the Meteor 3.6 beta or RC upgrade, follow Rspack 1 to 2 and its toolchain checks. Keep valid entries/configuration; skip the first-activation steps below.
Decision flow
- Does the app define client and server entry points in
package.jsonmeteor.mainModule? If no, define them. Required. - Trace the client and client-test graphs. Do they reach CommonJS export
assignments, Node built-ins, server-only local package entries, or missing
generated inputs in a clean checkout? If yes, repair the boundary before
activation. See
references/client-graph-preflight.md. - Does the app code contain nested imports (ES
importinside anif, function, or other block)? If yes, move them to top level or convert them to dynamicimport()/require. Required for app code; OK in Atmosphere packages. - Does the app rely on a Meteor build plugin (
less,fourseven:scss,coffeescript,zodern:melte,jorgenvatle:vite)? Plan an Rspack loader replacement and prove capability parity before removal. Seereferences/framework-and-css.md. - Does the app rely on bare default imports from CommonJS packages
(
import x from "some-cjs")? Decide between rewriting toimport * as xor restoring Meteor-style interop in.swcrc. Seereferences/code-migrations.md. - Is the app server-only? Set only
mainModule.server. Rspack still bundles the server; client is skipped. - Does the app keep CSS or HTML outside its entry folder, or import app-local
symlinks? Preserve the boundary with
meteor.modulesorresolve.symlinks: false; see the references. - Run
meteor add rspackand watch the verbose[Transpiler]log for remaining(app)failures.
Required: entry points
{
"meteor": {
"mainModule": {
"client": "client/main.js",
"server": "server/main.js"
},
"testModule": "tests.js"
}
}Without mainModule, Rspack has no entry. Meteor's eager-loading model
does not apply: Rspack does not auto-discover modules. See
references/framework-and-css.md for CSS and HTML routing.
For 3.6-beta.3 and RC separate legacy/native entries and earlier-version limits, read architecture preservation.
Required: no nested imports in app code
Apply the nested-import rewrites
to app code. Adapt callers when using Promise-returning import();
Atmosphere package code stays on Meteor's bundler.
Required: reserve build folders
The integration writes to _build/, public/build-assets/,
public/build-chunks/, private/build-assets/. Auto-added to .gitignore.
If the project already uses any of these names, rename in package.json:
{
"meteor": {
"buildContext": "build",
"assetsContext": "assets",
"chunksContext": "chunks"
}
}Do not edit any file under those folders. Exclude them from IDE indexing and
from every recursive formatter, linter, typechecker, test-discovery, and
coverage scan. .gitignore does not configure those tools.
Do not match the active build context in .meteorignore or METEOR_IGNORE.
Rspack writes Meteor-facing entry modules there, then Meteor reads them to
assemble the final bundle. Resolve renamed contexts before auditing ignores.
Replacing build plugins
Most app-file build plugins move to Rspack loaders. Prove capability parity
before removal; make conflicting activation and removal one reversible change.
See references/framework-and-css.md.
| Old plugin | Replacement |
meteor/less | less-loader. See references/framework-and-css.md. |
fourseven:scss | sass-loader + sass-embedded. See refs. Skeleton in meteor create --full. |
meteor/coffeescript | coffee-loader (optionally chained with swc-loader). |
zodern:melte (Svelte) | Official Rspack Svelte loader. |
jorgenvatle:vite (Vue/Solid) | Native Rspack Vue/Solid loaders. |
babel-plugin-react-compiler | SWC on the 3.6 beta pairing; earlier integrations retain Babel. See framework reference. |
zodern:types | Keep the working declaration provider during bundler migration; beta.1 native adoption is a separate explicit choice. |
Plugins acting only on Atmosphere package files can stay. Plugins acting on app-folder files (entry folder excluded) must move to Rspack.
CommonJS default-import interop
Prefer namespace imports. For the interop override and its app-wide
CommonJS/tree-shaking cost, read references/code-migrations.md.
CI and Docker
Resolve required npm updates locally and commit package.json and the lockfile.
Use the existing manager's frozen install with dev dependencies, then build.
On rspack@1.3.0 (Meteor 3.5.2), meteor.autoInstallDeps: false still reports
missing/outdated dependencies and manual commands; earlier opt-out behavior
can skip those checks. Inspect the first dependency/config error and the actual
project root before choosing a fix. See references/troubleshooting.md.
Anti-patterns
- Add Rspack before fixing Babel fallbacks. Find them with
"meteor": { "modern": { "transpiler": { "verbose": true } } }and fix them while still on the optimization-only stack. - Restore CJS interop globally in
.swcrcto avoid migrating a handful of imports. Trades real bundle-size wins for short-term convenience. - Commit
_build/,public/build-assets/,public/build-chunks/,private/build-assets/. Autogenerated. - Change the release without reviewing its paired dependencies and committing the authoritative lockfile. Validate a clean install and production build.
See also
references/eval-cases.md- For setup, helpers, and
rspack.config.jsAPI:meteor-modern-build-stack.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

