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
- Call printUrls() only after await server.listen() has resolved.
- Move the printUrls call into the listen callback / after the await.
- 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
- Call printUrls() inside the resolved listen() promise chain.
- Treat printUrls as a post-listen step in your startup checklist.
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
- Cannot call server.listen in middleware mode.
- Cannot print server URLs in middleware mode.
- There is already a server associated with the config.
- Cannot print server URLs before server is listening.
- client ID conflict detected. Please restart the dev server.
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)