remix-run/remix · info

${message.message}

Error message

${message.message}

What it means

This is a console warning emitted by the Remix node HMR runner when a child process requests a restart and includes a custom message (e.g. from import.meta.hot.invalidate('reason')). It is not a thrown error; the message is logged and a server restart is scheduled, clearing any pending hot updates.

Source

Thrown at packages/node-hmr/src/lib/runner.ts:416

        },
      )
      return
    }

    if (message.type === 'node-hmr:child:server-ready') {
      if (childRestartGeneration !== pendingRestartGeneration) return
      serverReadyCount += 1
      waitingForEntryServerReady = false
      setReadyGeneration(childRestartGeneration)
      resolveReadyWaiters()
      flushPendingServerUpdateEvent()
      flushAcceptedHotUpdateBrowserEvent()
      return
    }

    if (message.type === 'node-hmr:child:restart-requested') {
      if (message.message !== undefined) {
        console.warn(message.message)
      }

      pendingServerUpdateEvent = true
      clearPendingHotUpdates()
      logRestart(message.message ?? 'import.meta.hot.invalidate()')
      scheduleRestart()
      return
    }

    if (message.type === 'node-hmr:child:module-imported') {
      moduleStore.addDependency(message.importerUrl, message.depUrl)
      return
    }

    if (message.type === 'node-hmr:child:accepted-deps-resolved') {
      moduleStore.setAcceptedDependencies(message.url, message.acceptedDeps)
      return
    }

View on GitHub (pinned to 9696913134)

Solutions

  1. Treat the log as informational: it echoes the invalidation reason you passed to import.meta.hot.invalidate()
  2. If the message is unexpected, search your code for import.meta.hot.invalidate calls that fire repeatedly
  3. Avoid calling invalidate() on every module evaluation; guard it behind a condition

Example fix

// before
import.meta.hot.invalidate('always')
// after
if (needsFullReload) {
  import.meta.hot.invalidate('config changed')
}
Defensive patterns

Strategy: validation

Prevention

When it happens

Trigger: Calling import.meta.hot.invalidate('some reason') in a module during an active HMR session, or any child process message of type 'node-hmr:child:restart-requested' that carries a non-undefined `message` field.

Common situations: Developers adding invalidation reasons to hot-update hooks in Remix node apps and seeing their own message echoed as a warning; also when HMR state is stale and a full restart is triggered mid-update.

Related errors


AI-assisted analysis of remix-run/remix@9696913134 (2026-08-27). Data as JSON: /api/errors/9759721dc103a524. Report an issue: GitHub.