Codex macOS updater can get stuck after clicking Update, leaving Codex, Autoupdate, and Updater.app idle without restarting
Open 💬 5 comments Opened Apr 11, 2026 by tranch
💡 Likely answer: A maintainer (github-actions[bot], contributor)
responded on this thread — see the highlighted reply below.
What version of the Codex App are you using (From “About Codex” dialog)?
26.406.40811
What subscription do you have?
Plus
What platform is your computer?
Darwin 25.3.0 arm64 arm
What issue are you seeing?
- The update payload had already been downloaded locally.
- Sparkle cache contained a delta update file:
~/Library/Caches/com.openai.codex/org.sparkle-project.Sparkle/Installation/.../*.delta- In my case the downloaded delta file was about
46 MB. - The main app process was still running instead of exiting cleanly.
- The updater processes also stayed alive, apparently waiting for the app handoff/restart step to complete.
- No visible retry, error dialog, or recovery flow appeared.
What steps can reproduce the bug?
- Open Codex on macOS.
- Trigger an in-app update.
- Click Update.
- Wait for the app to quit and relaunch.
What is the expected behavior?
Codex should:
- download the update,
- quit cleanly,
- apply the update,
- relaunch automatically.
Additional information
If useful, I can provide:
- process list output,
- updater-related logs,
- cache/update file details.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
That's not a duplicate and I'm seeing this as well over the last 10 days or so.
Apple Silicon M2 Pro and update just hangs - eventually you have to quit it and then it will relaunch but will still be on the same version:
26.417.40842 (1851)I am experiencing this too
I hit what looks like the same failure mode on macOS: after clicking Update, the Codex window disappears, but the app process stays alive. Quitting Codex manually with Cmd+Q and launching it again restores normal behavior.
I could not find the desktop UI / Sparkle wrapper source in this public repo, so the following is based on inspecting the packaged Electron bundle from
/Applications/Codex.apprather than a source checkout. In the installed app I checked (26.513.20950, build2816), the macOS update path appears to be:install-app-updatesparkleManager.installUpdatesIfAvailable()onInstallUpdatesRequestedbefore nativeinstallUpdatesIfAvailable()app.quit()The suspicious part is that on macOS this goes through the normal Electron quit lifecycle. The update path calls
allowQuitTemporarilyForUpdateInstall(), but does not set itsskipDrainBeforeQuitoption. Thewill-quithandler thenpreventDefault()s the first quit, disposes some lifecycle managers, waits for all global state flushes, and only then callsapp.quit()again.That means if one of those flushes stalls, or if the second quit happens after the temporary update quit allowance expires, Sparkle can be left waiting for the app process to exit while Codex has already hidden/destroyed its visible window. That matches the observed “app is still running, but no window comes back until manually quitting” behavior.
A likely fix would be to make the update-install quit path bounded or update-specific, for example by passing
skipDrainBeforeQuit: truewhen quitting for Sparkle install on macOS, or by adding a timeout/fallback around thewill-quitdrain before forcing process exit for update installation. I have not been able to validate this with a local patch because the desktop wrapper source/build pipeline does not appear to be public.I hit a related updater failure on macOS, but the local evidence points to a failed Sparkle download path rather than a downloaded delta/package being stuck during handoff.
Environment:
26.513.20950(CFBundleVersion2816)com.openai.codexDarwin 25.4.0 arm64 armSUAutomaticallyUpdate = 1,SUEnableAutomaticChecks = 1)Sparkle.frameworkandSquirrel.frameworkObserved behavior:
Local updater logs show repeated Sparkle download failures for the current package URL:
The same pattern repeated at roughly
2026-05-15T02:01:31Z,03:18:37Z,04:03:55Z, and04:33:44Z. Earlier logs on May 14 show the sameNSURLErrorDomain Code=-1001timeout for the same zip.The Sparkle cache directory exists but has no persisted update payload after these failures:
I also checked the package URL directly afterward and it was reachable with HTTP 200,
content-type: application/zip, andcontent-length: 346479191, so the artifact itself was not missing at that point.This looks like the updater UI/relaunch flow is not robust to download failure/timeouts. Expected behavior would be for Codex to only offer the install/restart action after Sparkle has a verified downloaded package, or to keep the app open and show a retryable error when the download aborts. If the app does quit for an update install, it should either relaunch after a successful install or surface a clear recovery path when the install did not happen.