Environment
- OS: Windows 11 Home (10.0.26200)
- Bun: 1.2.20
- gstack: 0.3.9 (commit bb46ca6)
- Playwright: 1.58.2
- Chromium: headless_shell-1155 + chromium-1155 (both tested)
Problem
browse goto <url> hangs indefinitely on Windows. The server never starts — it gets stuck at chromium.launch({ headless: true }) in browser-manager.ts:45.
Root Cause
Bun's child process pipe implementation on Windows does not properly handle Playwright's --remote-debugging-pipe transport. Chromium launches (PID visible) but the DevTools Protocol pipe never connects, causing a timeout.
Reproduction
# This hangs on Windows with Bun:
cd ~/.claude/skills/gstack
bun -e "import { chromium } from 'playwright'; const b = await chromium.launch({ headless: true, timeout: 15000 }); console.log('ok'); await b.close();"
# → Timeout 15000ms exceeded
# Same code works perfectly with Node:
node -e "import('playwright').then(async({chromium})=>{const b=await chromium.launch({headless:true,timeout:15000});console.log('ok');await b.close();})"
# → ok
Tested with both chromium_headless_shell-1155 and chromium-1155 (full browser). Also tried channel: 'chrome' (system Chrome). All hang with Bun, all work with Node.
Suggested Fixes
- On Windows, spawn the server with
node + tsx instead of bun — requires making server.ts runtime-agnostic (replacing Bun.serve with Node HTTP, Bun.spawn with child_process, etc.)
- Use
playwright.chromium.connectOverCDP() with websocket instead of pipe transport — would bypass the broken pipe
- Wait for Bun fix — this is ultimately a Bun issue with Windows named pipes
Workaround
Created a standalone Node-based browse wrapper that uses Node + Playwright directly. Works but lacks the full gstack browse feature set.
Environment
Problem
browse goto <url>hangs indefinitely on Windows. The server never starts — it gets stuck atchromium.launch({ headless: true })inbrowser-manager.ts:45.Root Cause
Bun's child process pipe implementation on Windows does not properly handle Playwright's
--remote-debugging-pipetransport. Chromium launches (PID visible) but the DevTools Protocol pipe never connects, causing a timeout.Reproduction
Tested with both
chromium_headless_shell-1155andchromium-1155(full browser). Also triedchannel: 'chrome'(system Chrome). All hang with Bun, all work with Node.Suggested Fixes
node+tsxinstead ofbun— requires makingserver.tsruntime-agnostic (replacingBun.servewith Node HTTP,Bun.spawnwithchild_process, etc.)playwright.chromium.connectOverCDP()with websocket instead of pipe transport — would bypass the broken pipeWorkaround
Created a standalone Node-based browse wrapper that uses Node + Playwright directly. Works but lacks the full gstack browse feature set.