Repository navigation
[Windows] Blank client area on 26.820.7780.0; --disable-direct-composition restores rendering #40878
Description
2. What version of the Codex App are you using?
26.820.7780.0
(Store package version - worth a glance at Help > About Codex to confirm it matches.)
3. What subscription do you have?
ChatGPT Plus
4. What platform is your computer?
Run this in PowerShell, paste the single line it prints:
"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"
5. What issue are you seeing?
After the Microsoft Store update from 26.818.8289.0 to 26.820.7780.0, the app opens with a completely blank client area. The window, caption buttons and process are all alive - the renderer mounts, routes mount, auth succeeds, IPC round-trips complete, and remote control from the phone works normally - but the web contents never paint.
Launching the same signed package executable with only --disable-direct-composition renders the full UI correctly. That single flag is the entire difference.
This is not a machine-wide DirectComposition failure. Chrome 151.0.7922.175 and Edge 151.0.4129.107 both render normally on the same machine with DirectComposition enabled. Chrome is five patch revisions from the Chromium 151.0.7922.170 this build embeds.
Measurements. The client area below the caption strip was screen-captured and sampled by luminance. A blank window scores 1 luminance level and 0.000% deviation from the modal value - one flat color across ~190,000 sampled pixels.
| Configuration | Result |
|---|---|
| Unflagged, direct exe launch | Blank: 1 level, 0.000% |
| Unflagged, Store identity launch | Blank: 1 level, 0.000% |
| Unflagged, moved across all 3 monitors | Blank on each |
--disable-features=CalculateNativeWinOcclusion |
Blank: 1 level, 0.000% |
--disable-direct-composition |
Painted: 99 levels, 6.558% |
| Parsec virtual display adapter disabled, unflagged | Blank on both launch paths |
| Chrome 151.0.7922.175, own top-level window | Painted |
| Edge 151.0.4129.107, own top-level window | Painted |
Also ruled out: --disable-gpu, cache clearing, a full Reset-AppxPackage with a fresh profile, and package repair.
This produces no error signal. Every startup log line reports success - window ready-to-show, React root render requested, routes mounted, auth resolved, no renderer or GPU process-gone marker, no exception. Crash telemetry will show these sessions as healthy. This failure mode is only visible if a human reports it.
Hardware and display configuration:
- Executable
ChatGPT.exe, embedded Chromium151.0.7922.170, packageOpenAI.Codex_26.820.7780.0_x64__2p2nqsd0c76g0 - NVIDIA RTX 5060 Ti, driver
32.0.16.1088(2026-07-21) - Three 4K DisplayPort monitors: 160 Hz primary, plus two at 60 Hz with Advanced Color enabled on one
- Mixed DPI: 175% user / 150% system
- Onset: Store update installed 2026-08-25 20:22; Windows logged a
MoAppHangforChatGPT.exeat 20:29
6. What steps can reproduce the bug?
- Windows 11 build 26200, NVIDIA GPU, multiple 4K monitors with mixed refresh rates and HDR enabled on one panel.
- Update the Codex app from
26.818.8289.0to26.820.7780.0through the Microsoft Store. - Launch the app normally from the Start menu tile.
- The window opens and Windows draws its caption buttons, but the client area is a single flat color and never paints. The app is otherwise healthy: logs show the primary window ready-to-show, React root render requested, routes mounted and auth resolved, and remote control from the phone works.
- Quit the app, then launch the same executable directly with the flag:
$pkg = Get-AppxPackage -Name 'OpenAI.Codex' | Sort-Object Version -Descending | Select-Object -First 1
Start-Process (Join-Path $pkg.InstallLocation 'app\ChatGPT.exe') -ArgumentList '--disable-direct-composition'- The UI renders correctly. Removing the flag reproduces the blank window every time.
7. What is the expected behavior?
The client area should paint the app UI, as it did on 26.818.8289.0 and as Chrome and Edge on the same Chromium 151 branch still do on this machine.
Secondarily: when a presentation path fails, the app should fall back to one that works rather than leaving a uniform blank surface. A window that renders nothing while reporting a fully successful startup is very expensive to diagnose, and invisible to your own telemetry.
8. Additional information
Two traps that cause false "already tested" claims. Both cost hours here and may be affecting other blank-window reports:
--disable-gpudoes not bypass DirectComposition. On Windows, Chromium still presents through DComp with the GPU disabled, so that flag never exercises the broken path. "Tried--disable-gpu, still blank" does not rule out DComp.- Relaunching via
explorer.exe shell:AppsFolder\<PFN>!Appsilently drops command-line arguments. Any flag test performed that way tested nothing.
Requests:
- Investigate the DirectComposition / swap-chain configuration change between
26.818.8289.0and26.820.7780.0. - Fall back from a failed presentation path instead of leaving a uniform blank client area.
- Document a supported way to pass Chromium switches to the signed Store build. Launching the exe directly works and retains package identity and the AUMID, but it is not a documented path, and cold
codex://protocol activation has no way to carry the switch.
Possibly related: #34351 (different rendering symptom, but also Windows build 26200), #33192 and #38710 (other Windows DWM/composition reports).
Update: the flag is not a complete workaround. A launch ~2 minutes after a reboot
produced the blank window despite carrying --disable-direct-composition; a relaunch
~8 minutes after the same boot painted normally. Same build, same flag, same
machine. Either the presentation setup fails while the display stack is still
initializing after boot, or the flag reduces rather than eliminates the failure.
Activity
github-actions commentedon Aug 26, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
TechMcKay commentedon Aug 26, 2026
Correction and additional data: I need to retract the deterministic wording in the original report.
--disable-direct-compositionis not a complete workaround, and removing it does not reproduce the failure every time.I now have 19 independently labeled launches on the same package and machine: 4 painted, 14 flat-blank, and 1 invisible/transparent. For the flag by itself, 3 of 7 launches painted and 4 of 7 were blank. Plain unflagged/Store launches were 1 of 5 painted and 4 of 5 blank. These runs were sequential and the sample is small, so that comparison should not be read as an estimated success rate; it only proves that the flag does not determine the outcome. Updating the NVIDIA driver from
32.0.16.1088to32.0.16.1656did not remove the failure.One earlier SwiftShader result also needs correction. A luminance-variation test classified it as painted, but desktop-background comparison showed that the client region was effectively transparent and exposing the desktop. The three observed states are therefore:
I compared the first 20 seconds of all 19 corresponding desktop logs. Every state logged main-frame load,
ready-to-show, renderer route mounting, and app-server connectivity, with zero startup errors and no startup renderer-gone, GPU-gone, or load-failure marker.ready-to-showtiming overlaps completely between outcomes. The current telemetry cannot distinguish painted from blank or invisible.Read-only inspection of this build's production Electron bundle shows the primary window uses
titleBarStyle:"hidden"with a transparent title-bar overlay. Its surface is selected by the appearance theme: opaque mode uses a solid background plusbackgroundMaterial:"none"; translucent mode uses#00000000plus Windows Mica. The normal fresh-primary path is shown immediately andready-to-showis logged, not used as a universal presentation gate.The strongest current boundary is an intermittent Windows presentation failure after normal renderer startup, not a proven DirectComposition-only failure. The flag remains a possible mitigation, but the root cause could be in the Electron window surface, Chromium Viz/swap-chain setup, DWM/display initialization, or their interaction.
For a diagnostic build, the most useful missing signal would pair a privacy-preserving
webContents.capturePage()/frame fingerprint with a Windows Graphics Capture fingerprint of the actual top-level window and a desktop-behind reference. That would separate renderer-flat, flat-presented, and transparent/invisible failures without uploading UI pixels.Sanitized per-session metrics and exact hashes are available if useful. I have not repeated profile/package resets because fresh state, repair, and reset were already non-discriminating.
GQ105501 commentedon Aug 27, 2026
你好你的这几个问题解决掉了没有?我今天突然也这样了、
jiayuan-ling-beiren-tech commentedon Aug 27, 2026
Confirmed on a newer Windows build of Codex Desktop:
OpenAI.Codex 26.820.9563.0.Symptoms:
ChatGPT.exeprocesses but no visible main window.--disable-gpudid not help.--disable-direct-compositionimmediately restored rendering:Package:
OpenAI.Codex_26.820.9563.0_x64__2p2nqsd0c76g0
Embedded Chromium observed from the running process:
151.0.7922.170
I also tried reinstalling the Store app, Reset-AppxPackage, clearing/recreating the Codex profile, and --disable-gpu; none fixed the blank rendering. --disable-direct-composition did.
This appears to confirm that the DirectComposition rendering regression is still present in 26.820.9563.0.
nos1609 commentedon Aug 28, 2026
I can reproduce the same blank-client-area phenotype on a newer ARM64 build after an app update.
Environment:
26.825.3734.0(Arm64, package statusOk)28000, ARM64The top-level window is alive and shows the caption buttons, but the complete client area is one uniform cream-colored surface. No application UI paints. The blank window opens repeatedly after the update.
I have not tested
--disable-direct-composition. This report extends the affected version and architecture matrix; it does not prove that DirectComposition is the cause on this device. I retained a screenshot for a private support channel.I uploaded logs and diagnostics through
/feedback.Uploaded thread:
01a0470d-0700-71b0-8afb-875b432c5088TechMcKay commentedon Aug 28, 2026
Recovery update — containment, not a root-cause fix.
Please treat the deterministic wording in the issue title/initial reproduction as superseded by the earlier 19-run correction and this update. A later live recurrence stayed black after resize/maximize-restore, moving the window between displays, turning Windows Transparency effects off, and one authenticated launch carrying
--disable-direct-composition. The flag should not be relied on as a fix.The currently installed Store package is
OpenAI.Codex 26.825.4187.0(internal app26.825.32147, build 7303, Electron42.3.0, Chromium151.0.7922.174). Read-only inspection of its signed bundle shows that both shipped chrome-theme defaults still containopaqueWindows:false. In the Windows main process,falseselects a transparent background plus Mica;trueselects an opaque background plusbackgroundMaterial:"none".A controlled containment worked:
opaqueWindows:truechanged.The UI appeared. Post-launch verification found a normal unflagged package process and both raw user-theme values still set to
opaqueWindows:true.There is an important confound: the 19-launch failure dataset was collected on package
26.820.7780.0, while this successful launch used both a newer package and the opaque override. I do not have a user-observed26.825.4187.0launch withopaqueWindows:false, so this result cannot isolate the setting from a possible build-side change. I am not switching the working app back merely to improve attribution.The result makes opaque/no-Mica mode an effective containment on this machine and points more specifically at the transparent/Mica presentation path or its initialization. It does not prove the exact Electron/Chromium/Windows primitive or a permanent vendor fix. A future blank recurrence while both values remain
truewould be materially new evidence; a future signed build should be validated with normal activation before removing the override.The unsafe local “Codex (safe rendering)” auto-heal shortcut and force-kill/retry payload have now been removed. Normal Store/Start-menu activation is the retained path.
TechMcKay commentedon Aug 28, 2026
Correction to my immediately preceding recovery update:
opaqueWindows:trueis not a reliable containment.After a full Windows restart, the same installed package (
OpenAI.Codex 26.825.4187.0) launched normally with both raw themes still set toopaqueWindows:trueand with the live config byte-identical to the earlier painted-launch checkpoint. It nevertheless produced a uniform opaque flat blank. Both screen capture andPrintWindowsampled 35,640 interior pixels at one luminance level, mean/mode 32, standard deviation 0.The blank instance still reached main-frame load,
ready-to-show, renderer route mount, and app-server connection without renderer-gone or load-failure markers. One exact-windowRedrawWindowplusDwmFlushpulse returned API success but produced byte-identical before/after captures.I then performed one normal tray Quit and one normal Store/Start launch. The new unflagged PID also remained uniformly flat blank with both raw
opaqueWindowsvalues still true and the same normal startup milestones.This removes the earlier build-versus-setting confound: the same signed build and exact config bytes produced both a painted launch and a flat-blank launch. The setting only selects the opaque/no-material surface rather than the transparent/Mica surface; it does not make presentation reliable. Please treat my prior “effective containment” wording as superseded by this correction.
The Store currently offers no newer signed package on this machine. I am stopping local retry experiments rather than risking active tasks or applying system-wide graphics changes. A diagnostic build or product-side presentation fallback remains the safest next step.
LeonardiMaker commentedon Aug 28, 2026
Additional reproduction on a different hardware stack, with CDP-level diagnostics.
This appears consistent with the presentation failure described here, including the flat opaque and transparent client-area states.
Environment
OpenAI.Codex 26.825.3734.0x64151.0.7922.17426200.9168PCI\VEN_8086&DEV_4628&SUBSYS_0C1B102832.0.101.7077Reproduction across Windows profiles
The same flat purple/blank client-area failure reproduces under two separate Windows user profiles on the same machine.
This makes per-user Codex state/auth/profile substantially less likely as the primary cause.
I also temporarily isolated
.codex-global-state.jsonand allowed Codex to generate fresh global state. The rendering failure was unchanged. The original state was then restored byte-for-byte.Renderer/application state is healthy
During a failed launch, logs and CDP show normal application startup:
ready-to-showVia CDP, the main
app://-/index.htmlpage is fully populated:So this is not an empty DOM or failed React mount.
CDP screenshot is itself corrupted
The most interesting additional observation is that
Page.captureScreenshotof the main renderer is already visually corrupted even though the DOM/layout above is populated.I also injected a trivial fixed element through
Runtime.evaluate:with simple text inside it.
The DOM/layout recognized the element, but both:
produced visibly corrupted geometry/content: the background/border were rasterized in the wrong area and the text was detached/misplaced.
That seems useful for narrowing the boundary because the corruption is observable through Chromium's own CDP capture, not only in a normal Windows screen capture.
Verified ANGLE D3D11 vs SwiftShader A/B
Normal failed launch:
I then launched the packaged MSIX through
IApplicationActivationManagerwith:and verified from the process command lines that the SwiftShader flag reached the browser and GPU processes.
SystemInfo.getInfoconfirmed that the backend actually changed:The failure remained, but changed phenotype: instead of the flat purple surface, much of the Codex client area became incorrectly transparent and exposed the window/desktop behind it.
During that state CDP still reported:
This closely matches the transparent state already reported in this issue, but on Intel hardware and with the SwiftShader backend positively verified.
Other checks
Also tested without fixing the normal blank state:
--disable-direct-composition--disable-gpu--disable-gpu-compositingopaqueWindows = truein both Light and Dark chrome themesWith both
opaqueWindowsvalues set totrue, a normal unflagged Start-menu launch still returned to the flat purple/blank state. The config was restored afterward.I stopped local mutation/reset experiments at this point.
Overall this seems consistent with the boundary already identified in this issue: renderer/application startup succeeds, while something in the Chromium/Electron raster/compositor/window-presentation path produces flat or transparent surfaces.
I can provide the corrupted CDP captures, the injected-element captures, startup logs,
SystemInfo.getInfooutput, and the exact PowerShell/CDP reproduction commands if useful.EDIT — clean version rollback A/B
I subsequently performed a controlled downgrade on the same machine, Windows installation, user profile, GPU driver, and Codex user state from:
to:
The x64 MSIX used for the rollback was a preserved copy of that release and was independently validated before installation against the known release metadata:
The package identity was also confirmed as:
No Codex user state, configuration, Windows profile, GPU driver, or system graphics setting was changed as part of this A/B. The only intended variable was the Codex application version.
After the downgrade, I launched Codex normally from the Windows Start menu with no Chromium flags or custom launcher.
Result:
The
26.818.8289.0launch rendered correctly immediately.This is the strongest result from this machine so far: the failure is reproducible on
26.825.3734.0and absent after reverting the same environment to26.818.8289.0.That strongly supports a Codex application-side regression somewhere between these releases, rather than a persistent issue with the Windows profile, Codex user state, Intel driver, or machine-wide graphics configuration.
I am keeping
26.818.8289.0installed for now and have stopped further local mutation/reset experiments.shaohereshui commentedon Aug 29, 2026
建议追加到 GitHub issue #40878 的评论草稿
标题/开头可注明:更早阶段的变体:窗口根本不出现(renderer 未启动)+ 主进程 CPU 100% 忙等
Additional data point on the same version family, but a different, earlier failure stage than the blank-window reports above.
Environment: Windows 11 26200 (x64), Intel Core i9-14900HX + NVIDIA, 16 GB RAM.
Affected versions (all reproducible on this machine):
26.820.9563.0,26.825.3734.0,26.825.4187.0(the latest Store-signed package frompersistent.oaistatic.com/codex-app-prod/ChatGPT-x64.msix). The previous build26.820.7780.0worked (last successful use 2026-08-26).Symptoms differ from the blank-window reports:
MainWindowHandle == 0.Launching app,Appshot hotkey inactive); the next line ([dynamic-app-tools-native-pipe] dynamic_app_tools_listening) that appears on working builds never prints.Minidump evidence (procdump -ma of the stuck main process): 65 threads, all blocked at syscall return points in ntdll/win32u — ~22 threads in
NtWaitForSingleObject(syscall 0x04), others inNtQuerySystemTime(0x09) polling. This looks like a startup barrier/event that is never signaled, with timeout-polling burning CPU.Excluded (all tested, no effect): full reinstall of official MSIX,
Reset-AppxPackage, cache clear, re-register,--disable-gpu,--no-sandbox,--disable-direct-composition(unlike the blank-window stage, this flag does nothing here), killing injected DLLs (Macified Dock, Nahimic), deleting singleton lockfiles, SQLite integrity (OK), proxy/network (OK), VC++ Redist/WebView2 present, VBS/CET not enabled, no Windows quality update installed around the break.Hypothesis: this may be the same underlying 26.820.7780+ presentation/display-init regression (Chromium 151 on Win11 26200), hitting an earlier gate — the transparent/Mica window path may be failing at window creation on this machine rather than at first paint. If OpenAI needs a reproducer, I can upload the minidump and logs.
leohdevstudio-debug commentedon Aug 30, 2026
Still reproducible on Windows with Codex/ChatGPT Desktop 26.825.6671.0.
I am seeing the same blank white client area.
Troubleshooting performed:
The main ChatGPT process creates the window successfully and reports Responding=True. GPU, renderer, network, and storage processes are also created.
Version:
OpenAI.Codex 26.825.6671.0
Current workaround:
ChatGPT.exe --disable-direct-composition
This appears to still be present in 26.825.6671.0.
TechMcKay commentedon Sep 3, 2026
A primary-source review of the current
26.831.2377.0evidence changes twoparts of my earlier framing but does not change the observed failure:
electron: 42.3.0, while the signedexecutable reports
152.0.7977.64. Stock Electron 42.3.0 ships Chromium148, while stock Electron 44.0/44.1 ship Chromium
152.0.7977.54/.65. This proves the shipped combination is non-stock; itdoes not establish the actual Electron major. Could OpenAI provide the
build's runtime
process.versions.electron,.chrome,.node, and.v8?ready-to-showoriginates from Blink's visually-non-empty layoutsignal. It is a layout milestone, not proof that a compositor frame was
submitted or presented. My startup logs should therefore be read as
main-frame/load/layout/app-route milestones only.
The current signed build still reproduces a visible, non-minimized,
non-cloaked but uniformly dark primary client after normal unflagged
activation, with renderer/GPU/app-server processes alive and both appearance
themes forced opaque/no-Mica. Direct screen capture verifies the visible
uniform client. I am no longer treating
PrintWindowas independent evidencefor GPU-composited content. The observed client is near
#202021, not theconfigured native fallback
#000000; this keeps both an empty/hidden web-applayer and a later Viz/presentation failure open.
Native-window occlusion is also not ruled out, but it is lower-confidence here:
a prior direct run with
--disable-features=CalculateNativeWinOcclusionstayed blank, andresize/maximize/restore plus cross-display move did not recover it. The
original public display context remains three 4K panels with mixed refresh
rates and HDR enabled on one panel.
Could a signed diagnostic build capture the following during the first blank
event, before user interaction?
process.versions;count/bounds/computed background, center hit-test, and bounded rAF ticks;
and surface identity;
DrawAndSwap, submitted/aggregated frames, andexact skip reasons; and
outcome correlated to a direct screen sample.
I do not have a reliable local workaround to recommend. Opaque/no-Mica,
--disable-direct-composition, native repaint, geometry changes, transparencychanges, and normal relaunch have all been exhausted or proved
nondeterministic. I will avoid further resets, driver/display changes, or
retry loops and can validate one newer signed build or diagnostic at the next
natural occurrence.