split macOS daemon from on-demand Qt UI#243
Draft
Vonkid wants to merge 1 commit into
Draft
Conversation
TomBadash
pushed a commit
that referenced
this pull request
Jul 22, 2026
Arrange every issue and PR referring to the long-running macOS memory growth (#125, #150/#151, #233/#242, #238/#240, #243) into one status document, synthesize the post-fix test evidence into the three remaining root causes (un-pooled HID read-loop pump, un-pooled auxiliary threads, GPProcessMonitor XPC accumulation from 0.3s app polling), and define a phased plan: land validated PRs #240/#242, hotfix the read-loop pool for v3.7.1, move app detection to NSWorkspace notifications for v3.8, add footprint logging and regression gates, and review the #243 daemon split. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011uB8aXzbsRT1jAAwAP9roA
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
MouserUI.apphelperWhy
The existing single executable imports QtCore at process startup through PyInstaller's PySide6 runtime hook, even when the settings window is closed. That leaves the complete GUI runtime resident for a background mouse remapper.
This is separate from, and complementary to, the native leaks tracked in #233 and #238. Those fixes keep memory from growing over time; this change reduces the stable baseline by keeping Qt out of the resident process entirely.
On the tested Apple Silicon system, Activity Monitor settled from roughly 280 MB to roughly 48 MB after the split. Settings and the original Actions Ring start only while used and exit afterward.
Validation
PySide6orui.backendmodulesmasterbuilds successfully as a dual-app PyInstaller bundlecodesign --verify --deep --strictThis is intentionally a draft because the process split is substantial and would benefit from maintainer feedback on IPC and packaging boundaries.