Which project does this relate to?
Start
Describe the bug
serverFnFetcher's getResponse logs every non-Response error thrown by a server-function call via console.log, then re-throws it. In packages/start-client-core/src/client-rpc/serverFnFetcher.ts:
async function getResponse(fn) {
let response
try {
response = await fn()
} catch (error) {
if (error instanceof Response) response = error
else {
console.log(error) // ← logs every error, incl. benign cancellations
throw error
}
}
// ...
}
Two problems:
- It's unconditional — there is no
process.env.NODE_ENV guard, so it also runs in production builds (bundlers don't strip console.log by default), spamming the browser console for real users.
- It logs benign cancellations. When a caller passes an
AbortSignal to a server function and aborts it (e.g. a request cancelled on navigation/unmount), the RPC fetch rejects with DOMException: signal is aborted without reason (AbortError). getResponse console.logs it and re-throws. The
re-thrown error is then handled by the caller (who deliberately aborted and no longer cares about the result), so the throw itself is fine — but the console.log leaves a stray, stack-trace-bearing console entry with no context.
Because it's console.log (not console.error) on a caught-and-rethrown error, it can't be intercepted from application code: it never reaches a framework error hook or error boundary, and it isn't an unhandled promise rejection, so a window unhandledrejection listener doesn't catch it either.
The only app-side workarounds are monkey-patching console or patching the package.
Complete minimal reproducer
https://codesandbox.io/p/devbox/condescending-diffie-z59y9f
Steps to Reproduce the Bug
- Start Dev Server
- Open preview browser.
- Click the button
- examine browser dev console logs
Expected behavior
Cancelling a server-function call should not log to the console. More generally, getResponse should not console.log errors it re-throws — the caller is responsible for handling and reporting them. At minimum the log should be removed; if diagnostic logging is intended, gate it behind
process.env.NODE_ENV !== 'production' and skip cancellation errors (AbortError / CancelledError).
Screenshots or Videos
No response
Platform
@tanstack/react-start 1.168.30 (@tanstack/start-client-core 1.170.13)
- React 19, Vite 8
- Browser: Chrome (reproduces in both dev and production builds)
Additional context
No response
Which project does this relate to?
Start
Describe the bug
serverFnFetcher'sgetResponselogs every non-Responseerror thrown by a server-function call viaconsole.log, then re-throws it. Inpackages/start-client-core/src/client-rpc/serverFnFetcher.ts:Two problems:
process.env.NODE_ENVguard, so it also runs in production builds (bundlers don't stripconsole.logby default), spamming the browser console for real users.AbortSignalto a server function and aborts it (e.g. a request cancelled on navigation/unmount), the RPCfetchrejects withDOMException: signal is aborted without reason(AbortError).getResponseconsole.logs it and re-throws. There-thrown error is then handled by the caller (who deliberately aborted and no longer cares about the result), so the throw itself is fine — but the
console.logleaves a stray, stack-trace-bearing console entry with no context.Because it's
console.log(notconsole.error) on a caught-and-rethrown error, it can't be intercepted from application code: it never reaches a framework error hook or error boundary, and it isn't an unhandled promise rejection, so awindowunhandledrejectionlistener doesn't catch it either.The only app-side workarounds are monkey-patching
consoleor patching the package.Complete minimal reproducer
https://codesandbox.io/p/devbox/condescending-diffie-z59y9f
Steps to Reproduce the Bug
Expected behavior
Cancelling a server-function call should not log to the console. More generally,
getResponseshould notconsole.logerrors it re-throws — the caller is responsible for handling and reporting them. At minimum the log should be removed; if diagnostic logging is intended, gate it behindprocess.env.NODE_ENV !== 'production'and skip cancellation errors (AbortError/CancelledError).Screenshots or Videos
No response
Platform
@tanstack/react-start1.168.30 (@tanstack/start-client-core1.170.13)Additional context
No response