with one click
modern-tools
Use when working with tools-core utilities, rspack integration, or modern tooling. Covers logging, npm management, process spawning, git helpers, and Meteor app configuration APIs.
Use when working with tools-core utilities, rspack integration, or modern tooling. Covers logging, npm management, process spawning, git helpers, and Meteor app configuration APIs.
| name | modern-tools |
| description | Use when working with tools-core utilities, rspack integration, or modern tooling. Covers logging, npm management, process spawning, git helpers, and Meteor app configuration APIs. |
Utility packages for modern tooling, bundler integrations, and native solutions.
/packages/tools-core)Central utility package providing helpers for npm, logging, process management, and Meteor configuration. This is the foundation for modern tool integrations.
lib/log.js)import { logProgress, logError, logInfo, logSuccess } from 'meteor/tools-core';
logProgress('Building application...'); // Blue
logSuccess('Build complete'); // Green
logError('Build failed'); // Red
logInfo('Using Rspack bundler'); // Purple
Respects METEOR_DISABLE_COLORS environment variable.
lib/npm.js)| Function | Description |
|---|---|
getNodeBinaryPath(binaryName) | Gets path to Node binaries (npm, npx, node) |
checkNpmDependencyExists(dep, opts) | Checks if npm package is installed |
checkNpmBinaryExists(binary, opts) | Checks if binary exists in node_modules/.bin |
checkNpmDependencyVersion(dep, opts) | Validates semver with conditions (gte, lt, eq) |
installNpmDependency(deps, opts) | Installs dependencies (npm/yarn, dev/exact flags) |
getNpmCommand(args) | Returns npm command with meteor npm fallback |
getNpxCommand(args) | Returns npx command with meteor npx fallback |
getYarnCommand(args) | Gets yarn command path |
isYarnProject(opts) | Detects yarn projects (yarn.lock, packageManager) |
getMonorepoPath(opts) | Detects monorepo root (workspaces, lerna, pnpm) |
isMonorepo(opts) | Boolean monorepo detection |
lib/process.js)| Function | Description |
|---|---|
spawnProcess(cmd, args, opts) | Spawns process with streaming output, color preservation |
stopProcess(proc, opts) | Graceful termination with SIGTERM/SIGKILL fallback |
isProcessRunning(proc) | Checks if process is still running |
isPortAvailable(port, host) | Checks if port is free |
waitForPort(port, opts) | Waits for port availability with timeout |
Options for spawnProcess: env, cwd, detached, onStdout, onStderr, onExit, onError
lib/meteor.js)Application Configuration:
| Function | Description |
|---|---|
getMeteorAppDir() | Gets application root directory |
getMeteorAppPackageJson() | Parses app's package.json |
getMeteorAppConfig() | Retrieves Meteor config from package.json or Plugin |
getMeteorAppPort() | Gets app port from environment |
getMeteorAppConfigModern() | Gets modern bundler configuration |
isMeteorAppConfigModernVerbose() | Checks verbose flag |
hasMeteorAppConfigAutoInstallDeps() | Auto-install deps flag |
Entry Points:
| Function | Description |
|---|---|
getMeteorAppEntrypoints() | Gets main/test modules for client/server |
getMeteorInitialAppEntrypoints() | Gets initial entry points with HTML detection |
isMeteorAppTestModule() | Checks if project is test module |
setMeteorAppEntrypoints(opts) | Sets entry points via environment variables |
setMeteorAppIgnore(pattern) | Sets file ignore patterns |
setMeteorAppCustomScriptUrl(url) | Sets custom script URLs |
Command Detection:
| Function | Description |
|---|---|
isMeteorAppRun() | Running in 'run' mode |
isMeteorAppBuild() | Running in 'build' or 'deploy' |
isMeteorAppUpdate() | Running in 'update' |
isMeteorAppTest() | In test mode |
isMeteorAppTestFullApp() | Test mode with full-app flag |
isMeteorAppTestWatch() | Test mode in watch mode |
isMeteorAppNativeAndroid() | Native Android mode |
isMeteorAppNativeIos() | Native iOS mode |
isMeteorAppNative() | Any native mode |
isMeteorAppDevelopment() | Development mode |
isMeteorAppProduction() | Production mode |
isMeteorAppDebug() | Debug mode |
Package Detection:
| Function | Description |
|---|---|
isMeteorBlazeProject() | Has blaze/blaze-html-templates |
isMeteorBlazeHotProject() | Blaze with hot reload |
isMeteorCoffeescriptProject() | Has CoffeeScript |
isMeteorLessProject() | Has Less CSS |
isMeteorScssProject() | Has SCSS/Sass |
isMeteorTypescriptProject() | Has TypeScript |
isMeteorBundleVisualizerProject() | Has bundle visualizer |
isMeteorPackagesTest() | test-packages command |
File Operations:
| Function | Description |
|---|---|
getMeteorAppFilesAndFolders(opts) | Scans app directory (recursive, with ignore) |
getMeteorAppPackages() | Lists all loaded packages |
getMeteorEnvPackageDirs() | Gets package directories from env vars |
getMeteorToolsRequire(filePath) | Requires module relative to Meteor tools |
lib/global-state.js)Maintains persistent state across file changes during development:
import { getGlobalState, setGlobalState, removeGlobalState, clearGlobalState } from 'meteor/tools-core';
setGlobalState('buildStartTime', Date.now());
const startTime = getGlobalState('buildStartTime');
lib/git.js)| Function | Description |
|---|---|
isGitRepository(dir) | Checks if directory is git repo |
gitignoreExists(dir) | Checks .gitignore existence |
ensureGitignoreExists(dir, entries) | Creates .gitignore with initial entries |
getMissingGitignoreEntries(dir, entries) | Finds missing entries |
addGitignoreEntries(dir, entries, ctx) | Adds entries with context logging |
lib/string.js)| Function | Description |
|---|---|
capitalizeFirstLetter(str) | Capitalizes first character |
shuffleString(str) | Shuffles string characters |
joinWithAnd(items, opts) | Human-readable list ("a, b, and c") |
/packages/rspack)Modern bundler integration using Rspack (Rust-based Webpack alternative).
| File | Description |
|---|---|
lib/constants.js | Default versions, global state keys, build contexts |
lib/dependencies.js | Dependency checking and auto-installation |
lib/build-context.js | Build directory management |
lib/config.js | Meteor configuration for Rspack |
lib/processes.js | Rspack process spawning |
lib/compilation.js | Compilation tracking |
| Context | Directory | Purpose |
|---|---|---|
RSPACK_BUILD_CONTEXT | _build | Build output |
RSPACK_ASSETS_CONTEXT | build-assets | Static assets |
RSPACK_CHUNKS_CONTEXT | build-chunks | Chunk bundles |
RSPACK_DOCTOR_CONTEXT | .rsdoctor | Analysis/diagnostics |
@rspack/core ^1.7.1@meteorjs/rspack ^0.3.56 (configuration logic)@rspack/plugin-react-refresh ^1.4.3swc-loader ^0.2.6getMeteorInitialAppEntrypoints() for entry points/packages/typescript)Compiler plugin for TypeScript/TSX file compilation.
Registered Plugin: compile-typescript
Supported Extensions: .ts, .tsx
Implied Packages: modules, ecmascript-runtime, babel-runtime, promise, dynamic-import
Features:
Limitations:
/packages/webapp)HTTP server integration using Express.js 5.x framework.
import { WebApp } from 'meteor/webapp';
// Middleware registration
WebApp.connectHandlers.use('/api', myMiddleware);
WebApp.handlers.use(compression());
// Direct Express access
WebApp.expressApp.get('/health', (req, res) => res.send('OK'));
// Server instance
WebApp.httpServer;
// Hooks
WebApp.onListening(() => console.log('Server ready'));
| Property | Description |
|---|---|
WebApp.connectHandlers | Express middleware registry (legacy name) |
WebApp.handlers | Current middleware registry |
WebApp.rawConnectHandlers | Raw Express handlers |
WebApp.expressApp | Direct Express app instance |
WebApp.httpServer | HTTP server instance |
WebApp.express | Express module export |
Dependencies: express@5.1.0, cookie-parser@1.4.6, compression@1.7.4, errorhandler@1.5.1
Use when writing tests, debugging test failures, running the test suite, or setting up test infrastructure. Covers self-test, package tests, and modern E2E tests.
Use when bumping Meteor package versions for beta, RC, or official releases. Covers the two version schemes (meteor-tool vs all other packages), the update-semver automation tool, manual files the tool does not handle, and the full lifecycle from beta through official release. Applies to packages/*/package.js, scripts/admin/, npm-packages/meteor-installer/, and .meteor/versions in test apps.
Use for writing, reviewing, editing, or generating Meteor release changelog entries. Defines canonical file locations, naming rules, required section structure, formatting conventions, PR-based generation workflow (with gh CLI and web fallback), incremental updates, and common entry patterns. Applies to files under v3-docs/docs/generators/changelog/versions/.
Use when analyzing release branch changes for missing user-facing documentation. Compares the release branch against devel, filters for user-facing changes, scans v3-docs/docs/ for coverage, and produces a gap report (.md file) with prioritized documentation opportunities. Does NOT write documentation — only identifies gaps and outputs a plan for later action.
Use when adding, modifying, or reviewing E2E test apps/skeletons to keep the test coverage report up to date.
Use when creating, updating, or maintaining AI documentation files (AGENTS.md, CLAUDE.md, skills). Covers file structure, conventions, and guidelines for evolving AI context.