You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Spinner interrupt exit code differs between the Rust and TypeScript implementations #3429
Vite+ has two spinner implementations, and they exit with different codes when the user interrupts them.
Rust spinner
TypeScript spinner
Location
crates/vp_shared/src/progress/input.rs
packages/prompts/src/spinner.ts
Example commands
vp install -g, vp upgrade
Interactive vp migrate, vp create
Ctrl+C
Ends by SIGINT, exit code 130
Exit code 0
SIGTERM
Ends by SIGTERM, exit code 143
Keeps running, then exit code 0
The TypeScript spinner should match the Rust spinner, so that an interrupted command does not report success. For example, vp migrate && git commit currently continues to the commit after Ctrl+C.
Cause
block() from @clack/core switches stdin to raw mode and calls process.exit(0) when it receives Ctrl+C.
The spinner's SIGINT and SIGTERM listeners stop the spinner and return, so Node keeps the process running.
Activity
jong-kyung commentedon Nov 11, 2026
@fengmk2 Should we make the exit codes consistent here?
fengmk2 commentedon Nov 11, 2026
We need to standardize this, and also consider which exit code would be most appropriate.
jong-kyung commentedon Nov 11, 2026
I think we should match the Rust spinner. It lets the signal end the process, so the shell reports 130 for Ctrl+C and 143 for
SIGTERM.fix(prompts): end an interrupted spinner with the signal status (void…