vitejs/vite · error · Error

Cannot print server URLs before server.listen is called.

Error message

Cannot print server URLs before server.listen is called.

What it means

Thrown by server.printUrls() when the server is not in middleware mode but resolvedUrls is still empty — which only happens before the HTTP server has been told to listen. resolvedUrls is populated during server.listen(), so calling printUrls earlier has nothing to print.

Solutions

  1. Call printUrls() only after await server.listen() has resolved.
  2. Move the printUrls call into the listen callback / after the await.
  3. If you use server.listen(callback) form, call printUrls inside the callback.

Example fix

// before
const server = await createServer(cfg)
server.printUrls()          // throws
await server.listen(5173)
// after
const server = await createServer(cfg)
await server.listen(5173)
server.printUrls()
Defensive patterns

Strategy: validation

Validate before calling

// only call after listen resolves
await server.listen()
server.printUrls()

Prevention

When it happens

Trigger: Calling server.printUrls() before awaiting server.listen(). The branch at server/index.ts:800 fires because resolvedUrls is undefined at that point.

Common situations: Reordering startup code so printUrls runs before listen. Forgetting to await listen() in an async bootstrap. Calling printUrls inside a configureServer hook that runs during creation.

Related errors


AI-assisted analysis of vitejs/vite@b4d66fee14 (2026-08-11). Data as JSON: /api/errors/69b57a924b474f6c. Report an issue: GitHub.

Appendix: source

Thrown at packages/vite/src/node/server/index.ts:800

      }
    },
    async close() {
      if (!closeServerPromise) {
        closeServerPromise = closeServer()
      }
      return closeServerPromise
    },
    printUrls() {
      if (server.resolvedUrls) {
        printServerUrls(
          server.resolvedUrls,
          serverConfig.host,
          config.logger.info,
        )
      } else if (middlewareMode) {
        throw new Error('Cannot print server URLs in middleware mode.')
      } else {
        throw new Error(
          'Cannot print server URLs before server.listen is called.',
        )
      }
    },
    bindCLIShortcuts(options) {
      bindCLIShortcuts(server, options)
    },
    async restart(forceOptimize?: boolean) {
      if (!server._restartPromise) {
        server._forceOptimizeOnRestart = !!forceOptimize
        server._restartPromise = restartServer(server).finally(() => {
          server._restartPromise = null
          server._forceOptimizeOnRestart = false
        })
      }
      return server._restartPromise
    },

View on GitHub (pinned to b4d66fee14)