Skip to content

feat: run on Windows - #27

Merged
fishuke merged 6 commits into
mainfrom
mehmet/windows-support
Oct 18, 2026
Merged

fishuke merged 6 commits into
mainfrom
mehmet/windows-support

Conversation

@fishuke

@fishuke fishuke commented Oct 18, 2026

Copy link
Copy Markdown
Owner

Deck now builds and runs on Windows.

What changes

  • Terminals: PowerShell (7 if installed, else Windows PowerShell) via ConPTY. The pty host listens on a named pipe named after the userData folder. The prompt is wrapped to emit OSC 9;9, so folder tracking works without lsof.
  • Running commands as the user: runtime versions and agent lookup go through PowerShell / where.exe. npm .cmd shims for claude / codex are unwrapped to node <script>, because cmd.exe can't pass multi-line prompts.
  • Keybinds: Windows Terminal-style defaults (Ctrl+Shift, Alt+Shift; no Ctrl+Alt, because that's AltGr). Ctrl+T/W/D/K still reach the shell. Ctrl+C copies a selection and Ctrl+V pastes. Hints throughout the UI use the platform's chords.
  • Window chrome: native window controls overlay the titlebar, the tray uses the app icon, and the Dock-only options are hidden.
  • Paths: names shown in the UI split on either separator, and quoting is PowerShell-aware (cd picks, file drops, agent launch).
  • Build: NSIS target, npm run dist:win, a Windows release job, and a new CI workflow (macOS + Windows: typecheck, tests, pty smoke, packaging). It also adds a Windows-only test that runs a real PowerShell terminal.

Known gaps on Windows

  • No busy detection: ConPTY doesn't report the foreground process, so the context bar always assumes a prompt.
  • Hooks and skills need bash and curl (Git for Windows).
  • The installer is unsigned, so SmartScreen will warn.
  • Windows PowerShell 5.1 mangles " in arguments passed to native programs, so a prompt containing double quotes can arrive altered there (PowerShell 7.3+ is fine).

Not covered

macOS behavior is unchanged: typecheck, 195 unit tests and the pty smoke test pass. The UI smoke test (Approving did not move to the next review) fails the same way on main.

🤖 Generated with Claude Code

Copilot AI balanced review requested due to automatic review settings October 18, 2026 12:28

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Terminals start PowerShell (7 when installed) over ConPTY, and the pty host
listens on a named pipe instead of a unix socket. PowerShell's prompt is
wrapped to report its folder with OSC 9;9, which stands in for lsof.
Commands main runs "as the user would" go through PowerShell, and npm .cmd
shims for claude and codex are unwrapped to node so multi-line prompts
survive.

Keybinds take Windows Terminal-style defaults (Ctrl+Shift, Alt+Shift; no
Ctrl+Alt, which is AltGr) so Ctrl+T/W/D still reach the shell, hints show
the platform's chords, Ctrl+C copies a selection and Ctrl+V pastes. The
window overlays native controls on the titlebar, the tray uses the app
icon, and paths shown in the UI split on either separator.

Adds an NSIS target, a Windows release job, and a CI workflow that runs
typecheck, tests, the pty smoke test and packaging on macOS and Windows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fishuke
fishuke force-pushed the mehmet/windows-support branch from d1aa716 to 16a36bf Compare October 18, 2026 12:35
fishuke and others added 5 commits October 18, 2026 14:43
windows-latest now ships Visual Studio 2026, which @electron/node-gyp
does not recognize, so better-sqlite3 fails to build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
git reports forward-slash paths on Windows, so worktrees now resolve
them to native paths. Keybind tests assert Mac defaults and symbols, and
the agent quoting test needs /bin/sh, so they run only where those apply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ConPTY reports no foreground process, so the smoke test waited forever
for /bin/cat.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fishuke
fishuke merged commit ab99813 into main Oct 18, 2026
2 checks passed
@fishuke
fishuke deleted the mehmet/windows-support branch October 18, 2026 13:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants