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
Pressing Ctrl+C after wails3 dev has fully started does not terminate the development session.
The native application exits, but the parent wails3 dev watcher and the background Vite process remain running. The terminal does not return to the shell until SIGINT is sent directly to the wails3 dev process.
This appears to be a process-group/supervision issue rather than an application shutdown deadlock.
To Reproduce
Clone the reproduction repository:
git clone https://github.com/MaimoryLab/codeoff-server.git
cd codeoff-server
git checkout 7f1325a48d493673058add6f4b2a1ca75c443854
Start the application:
wails3 dev -config ./build/config.yml
Wait for the native application and Vite development server to start.
Press Ctrl+C once.
Observe that the native application exits, but wails3 dev and Vite remain:
pgrep -fl 'wails3 dev|vite'
Send SIGINT directly to the watcher:
pkill -INT -f '^wails3 dev'
Observe that the watcher reports a graceful exit and terminates the remaining development processes.
Expected behaviour
Pressing Ctrl+C once should terminate the complete wails3 dev session, including the primary native application and all background development processes, and return control to the shell.
Screenshots
Recording.2026-08-28.at.16-02-52.mp4
Attempted Fixes
Sending SIGINT directly to the wails3 dev process terminates the complete session successfully:
Wails v3.0.0-beta.15 › Wails Doctor
# System
┌──────────────────────────────┐
| Name | MacOS || Version | 26.6.2 || ID | 25G83 || Branding | MacOS 26.6.2 || Platform | darwin || Architecture | arm64 || Apple Silicon |true|| CPU | Apple M2 Pro || CPU | Apple M2 Pro || GPU | 16 cores || Memory | 16 GB |
└──────────────────────────────┘
# Build Environment
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
| Wails CLI | v3.0.0-beta.15 || Go Version | go1.27.0 || -buildmode | exe || -compiler | gc || CGO_CFLAGS ||| CGO_CPPFLAGS ||| CGO_CXXFLAGS ||| CGO_ENABLED | 1 || CGO_LDFLAGS ||| DefaultGODEBUG | cryptocustomrand=1,tlssecpmlkem=0,tracebacklabels=0,urlstrictcolons=0,x509sslcertoverrideplatform=0 || GOARCH | arm64 || GOARM64 | v8.0 || GOOS | darwin |
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
# Dependencies
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
|*Android NDK | /Users/ppio/Library/Android/sdk/ndk/28.2.13676358 ||*Android SDK | /Users/ppio/Library/Android/sdk ||*Android platform-tools | Installed ||*Java (Android) | Not found. Install a JDK (e.g. brew install openjdk@21) or set JAVA_HOME. ||*NSIS | Not Installed. Install with `brew install makensis`. ||*Xcode (iOS) | Xcode 26.6, Build version 17F113 ||*iOS Device SDK | 26.5 ||*iOS Simulator SDK | 26.5 || Xcode cli tools | 2416 || npm | 12.0.2 || docker |*Docker version 29.7.2, build a7dcaa6fdb (cross-compilation ready) |||
└────────────────────────────────────── * - Optional Dependency ──────────────────────────────────────┘
# Signing
┌───────────────────────────────────────────────────────────────────┐
| macOS Signing | Developer ID Application: steve li (F2VC757B28) || Windows Signing | Not configured || Linux Signing | Not configured (GPG) |
└───────────────────────────────────────────────────────────────────┘
# Checking for issues
SUCCESS No issues found
# Diagnosis
SUCCESS Your system is ready for Wails development!
Need documentation? Run: wails3 docs
♥ If Wails is useful to you or your company, please consider sponsoring the project: wails3 sponsor
Additional context
The wails3 binary includes github.com/atterpac/refresh v1.0.0.
During reproduction, the terminal foreground process group belonged to the primary application task rather than the wails3 dev watcher. Ctrl+C therefore terminated the primary task without delivering SIGINT to the watcher.
refresh v1.0.0 does not end the watcher when the primary process exits. refresh v1.1.3 introduced structured process lifecycle supervision and configurable exit policies, but Wails v3.0.0-beta.15 still uses v1.0.0.
The open PR #5828 upgrades refresh to v1.1.2 for frontend readiness handling, but it does not appear to include the v1.1.3 lifecycle supervision change or configure the primary process with exit_policy: shutdown.
The Unix process-group implementation is shared by macOS and Linux, so Linux may also be affected. I have only reproduced and verified the issue on macOS. The Windows implementation does not create separate process groups and may behave differently.
Wails version family
v3
Exact Wails version
v3.0.0-beta.15
Operating System
Multiple / Other
Description
Pressing Ctrl+C after
wails3 devhas fully started does not terminate the development session.The native application exits, but the parent
wails3 devwatcher and the background Vite process remain running. The terminal does not return to the shell until SIGINT is sent directly to thewails3 devprocess.This appears to be a process-group/supervision issue rather than an application shutdown deadlock.
To Reproduce
Clone the reproduction repository:
git clone https://github.com/MaimoryLab/codeoff-server.git cd codeoff-server git checkout 7f1325a48d493673058add6f4b2a1ca75c443854Start the application:
Wait for the native application and Vite development server to start.
Press Ctrl+C once.
Observe that the native application exits, but wails3 dev and Vite remain:
Send SIGINT directly to the watcher:
Observe that the watcher reports a graceful exit and terminates the remaining development processes.
Expected behaviour
Pressing Ctrl+C once should terminate the complete wails3 dev session, including the primary native application and all background development processes, and return control to the shell.
Screenshots
Recording.2026-08-28.at.16-02-52.mp4
Attempted Fixes
Sending SIGINT directly to the wails3 dev process terminates the complete session successfully:
Process inspection after Ctrl+C showed:
The foreground process group (13185) had already exited, while the watcher and Vite remained alive.
Sending
kill -INT 13050directly to the watcher produced graceful exit requested and cleaned up the remaining processes.Related historical reports were reviewed:
These reports concern Wails v2 and do not appear to cover the current v3
watcher implementation.
System Details
Wails v3.0.0-beta.15 › Wails Doctor # System ┌──────────────────────────────┐ | Name | MacOS | | Version | 26.6.2 | | ID | 25G83 | | Branding | MacOS 26.6.2 | | Platform | darwin | | Architecture | arm64 | | Apple Silicon | true | | CPU | Apple M2 Pro | | CPU | Apple M2 Pro | | GPU | 16 cores | | Memory | 16 GB | └──────────────────────────────┘ # Build Environment ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ | Wails CLI | v3.0.0-beta.15 | | Go Version | go1.27.0 | | -buildmode | exe | | -compiler | gc | | CGO_CFLAGS | | | CGO_CPPFLAGS | | | CGO_CXXFLAGS | | | CGO_ENABLED | 1 | | CGO_LDFLAGS | | | DefaultGODEBUG | cryptocustomrand=1,tlssecpmlkem=0,tracebacklabels=0,urlstrictcolons=0,x509sslcertoverrideplatform=0 | | GOARCH | arm64 | | GOARM64 | v8.0 | | GOOS | darwin | └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ # Dependencies ┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐ | *Android NDK | /Users/ppio/Library/Android/sdk/ndk/28.2.13676358 | | *Android SDK | /Users/ppio/Library/Android/sdk | | *Android platform-tools | Installed | | *Java (Android) | Not found. Install a JDK (e.g. brew install openjdk@21) or set JAVA_HOME. | | *NSIS | Not Installed. Install with `brew install makensis`. | | *Xcode (iOS) | Xcode 26.6, Build version 17F113 | | *iOS Device SDK | 26.5 | | *iOS Simulator SDK | 26.5 | | Xcode cli tools | 2416 | | npm | 12.0.2 | | docker | *Docker version 29.7.2, build a7dcaa6fdb (cross-compilation ready) | | | └────────────────────────────────────── * - Optional Dependency ──────────────────────────────────────┘ # Signing ┌───────────────────────────────────────────────────────────────────┐ | macOS Signing | Developer ID Application: steve li (F2VC757B28) | | Windows Signing | Not configured | | Linux Signing | Not configured (GPG) | └───────────────────────────────────────────────────────────────────┘ # Checking for issues SUCCESS No issues found # Diagnosis SUCCESS Your system is ready for Wails development! Need documentation? Run: wails3 docs ♥ If Wails is useful to you or your company, please consider sponsoring the project: wails3 sponsorAdditional context
The wails3 binary includes
github.com/atterpac/refresh v1.0.0.During reproduction, the terminal foreground process group belonged to the primary application task rather than the
wails3 devwatcher. Ctrl+C therefore terminated the primary task without delivering SIGINT to the watcher.refresh v1.0.0does not end the watcher when the primary process exits.refresh v1.1.3introduced structured process lifecycle supervision and configurable exit policies, but Wailsv3.0.0-beta.15still usesv1.0.0.The open PR #5828 upgrades refresh to v1.1.2 for frontend readiness handling, but it does not appear to include the v1.1.3 lifecycle supervision change or configure the primary process with
exit_policy: shutdown.The Unix process-group implementation is shared by macOS and Linux, so Linux may also be affected. I have only reproduced and verified the issue on macOS. The Windows implementation does not create separate process groups and may behave differently.