Skip to content

Upgrade to Meteor 3.4 - #126

Open
harryadel wants to merge 11 commits into
nate-strauser:masterfrom
harryadel:meteor3-upgrade
Open

Upgrade to Meteor 3.4#126
harryadel wants to merge 11 commits into
nate-strauser:masterfrom
harryadel:meteor3-upgrade

Conversation

@harryadel

@harryadel harryadel commented Mar 25, 2026

Copy link
Copy Markdown

Summary

Full upgrade from Meteor 2.7.1 (Node 8) to Meteor 3.4 (Node 22) with mainModule restructuring and async/await conversion. I've not tested this thoroughly I'd greatly appreciate if you can help out with that part and point me to where it needs more work @nate-strauser

What changed

Architecture

  • Restructured to mainModule with explicit client/main.js and server/main.js entry points
  • Moved shared code to imports/both/, templates to imports/ui/, server lib to imports/server-lib/
  • All files now use ES module import/export instead of implicit globals
  • Added rspack bundler

Server-side async conversion

  • All Meteor methods converted to async/await (findOneAsync, updateAsync, insertAsync, fetchAsync)
  • HTTP.post → native fetch, Email.sendEmail.sendAsync
  • REST API: Restivus → WebApp.connectHandlers
  • RSS feed: lampe:rssfeed → manual WebApp route
  • Sitemap: gadicohen:sitemaps → manual WebApp route
  • Roles.userIsInRole()Roles.userIsInRoleAsync() on server
  • Allow/deny callbacks made async

Package replacements

  • iron:routervlasky:galvanized-iron-router (Meteor 3 fork)
  • useraccounts:bootstrap + useraccounts:iron-routingcommunitypackages:bootstrap + communitypackages:iron-routing
  • alanning:roles → core roles package
  • copleykj:stripe-syncstripe npm (native async)
  • djedi:sanitize-htmlsanitize-html npm
  • jparker:crypto-md5 → Node.js built-in crypto
  • peppelg:bootstrap-3-modal → custom lightweight Modal helper
  • mpowaga:autoform-summernote → custom AutoForm input type + summernote npm
  • nemo64:bootstrap → removed (CSS already inlined in LESS files)
  • moment → native Date + Intl.RelativeTimeFormat
  • underscore → native array methods
  • aldeed:simple-schema v1 → v2 (Atmosphere wrapper for simpl-schema npm)
  • aldeed:collection2 v2 → v4, aldeed:autoform v5 → v8

Packages removed
lampe:rssfeed, nimble:restivus, copleykj:stripe-sync, djedi:sanitize-html, jparker:crypto-md5, ongoworks:speakingurl, momentjs:moment, peppelg:bootstrap-3-modal, nemo64:bootstrap, raix:handlebar-helpers, gadicohen:sitemaps, percolate:migrations, meteorhacks:subs-manager, percolatestudio:synced-cron, reywood:publish-composite, natestrauser:publish-performant-counts, utilities:avatar, mpowaga:autoform-summernote, coffeescript, http

Dead code removed

  • server/hooks.js, server/cron.js, server/migrations.js (all commented out / already executed)
  • Stripped commented-out code from router, publications, api, rss, sitemap

Client fixes

  • UI.registerHelperTemplate.registerHelper
  • Template.xxx.renderedTemplate.xxx.onRendered
  • subs.subscribe()Meteor.subscribe() (SubsManager removed)
  • Added isActiveRoute and $eq template helpers (replacing removed packages)
  • Custom Modal.show()/Modal.hide() implementation
  • jQuery 3 via npm (required by Meteor 3's jquery package)
  • AutoForm Bootstrap 3 theme via communitypackages:autoform-bootstrap3
  • T9n translations loaded for auth error messages

Move shared code to imports/both/, templates to imports/ui/,
server lib to imports/server-lib/, router to imports/router.js.
Add client/main.js and server/main.js entry points.
Methods use findOneAsync/updateAsync/insertAsync/fetchAsync,
replace HTTP.post with fetch, Email.send with Email.sendAsync,
replace Restivus with WebApp.connectHandlers for REST API,
replace lampe:rssfeed and gadicohen:sitemaps with manual routes.
Replace UI.registerHelper with Template.registerHelper,
replace moment with native Date/Intl.RelativeTimeFormat,
replace peppelg:bootstrap-3-modal with custom Modal helper,
add custom AutoForm summernote input type via npm,
add isActiveRoute and \$eq template helpers,
add imports for template HTML files from imports/ui/.
Replace iron:router with vlasky:galvanized-iron-router,
replace useraccounts:* with communitypackages:* forks,
replace copleykj:stripe-sync with stripe npm,
replace djedi:sanitize-html with sanitize-html npm,
remove moment/underscore/nemo64:bootstrap/nimble:restivus
and other dead packages, add rspack, jquery 3 via npm,
add meteor-accounts-t9n for auth translations.
Use summernote-lite with hidden input for AutoForm value tracking,
improve modal backdrop and cleanup logic,
bypass recaptcha gracefully in development with test keys.
Templates now expose collection references via helpers for AutoForm,
add separate JobCreateSchema for client-side job creation validation,
add form submit validation handler for jobNew.
Add proper click-outside-to-close for user menu dropdown,
add avatar template, improve featured job button loading state.
Add communitypackages:autoform-bootstrap3, remove accounts-ui,
load autoform theme in client entry point, update styles.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant