Feat: Add Windows support while preserving macOS behavior#457
Feat: Add Windows support while preserving macOS behavior#457Luciano16-gif wants to merge 17 commits into
Conversation
This reverts commit 19d9395.
There was a problem hiding this comment.
1 issue found across 32 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/hooks/app/use-panel.ts">
<violation number="1" location="src/hooks/app/use-panel.ts:182">
P2: Windows panel max-height cache keyed only by DPI factor, ignoring monitor changes on same-DPI monitors</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.
|
Oh, also, I’m happy to help test the Windows version for future updates and help maintain the Windows side if that would be useful. I currently have ChatGPT Pro 5x, so I have enough Codex usage to help with follow-up fixes for now, but I’ll probably only have a Plus sub after this month since I got Pro for my birthday haha. |
|
Small note on scope: in this PR I covered the runtime pieces that I believe are necessary for Windows support to be usable in practice:
I’m happy to split this into smaller PRs if that would make review easier. My main goal is to add Windows support with the important functionality macOS already has, so both platforms have as much practical parity as possible while keeping macOS behavior isolated from the Windows-specific changes. |
Description
Adds Windows support while preserving the existing macOS behavior as much as possible.
This PR introduces platform-specific panel/tray implementations so macOS can continue using the existing NSPanel-based flow, while Windows uses a standard hidden Tauri window with its own tray behavior. It also adds Windows provider path handling, Windows-friendly process/command behavior, NSIS Windows bundling, and release workflow support for Windows updater artifacts.
The goal is to make OpenUsage usable for Windows users without changing the macOS user experience.
Type of Change
Testing
bun run buildand it succeededbun run testand all tests passbun tauri devAdditional testing:
Screenshots
macOS smoke test:

This screenshot is from someone who was kind enough to run the app on their Mac for testing. Cursor's credit details are intentionally hidden for privacy.
Windows screenshots:









Checklist
mainbranchCaveats
There are a few caveats worth calling out, but I do not think any of them should block the PR.
Provider manual testing was limited to the providers I have available.
I manually tested Codex, Antigravity, and Copilot on Windows. Other providers should continue to work because the plugin host API is mostly unchanged, and Windows path handling was added where needed, but I could not manually verify every provider locally because I do not have access to all of them, including Cursor and opencode go.
Some providers still depend on the
sqlite3CLI.This preserves the existing OpenUsage provider execution model. On macOS,
sqlite3is normally available by default, but on Windows users may need to install SQLite and make suresqlite3.exeis available onPATH. The Windows port now surfaces an actionable error whensqlite3is missing. I intentionally did not replace this with a backend SQLite implementation in this PR because that would be a larger architecture change and could increase macOS regression risk.macOS testing was limited to smoke testing.
I do not personally have a Mac, but someone else helped verify that the app still launches and renders correctly on macOS. The macOS-specific NSPanel/tray implementation is kept separate from the new Windows implementation to minimize macOS behavior changes, but a maintainer should still do a normal macOS build/runtime check before merging.
Windows updater support is now part of the release flow.
Windows uses the NSIS installer path for updater artifacts. The workflow keeps releases as drafts until macOS Intel, macOS Apple Silicon, and Windows x64 updater metadata are all present in
latest.json. This is safer for users because public releases should not have incomplete updater metadata, but it also means a Windows release build failure will intentionally block publishing the whole release until fixed. This can be changed if needed.The release workflow still depends on the existing signing secrets.
This PR wires Windows into the updater/release flow, but it does not add or change private signing keys. The upstream CI environment still needs the existing Tauri updater signing secrets for updater artifacts to be generated correctly. This is separate from Windows installer code signing, so Windows may still show normal SmartScreen warnings unless the project later adds a Windows code-signing certificate.
Personal note
This is my first open source PR, so feel free to roast me. I’m happy to adjust the structure, scope, or implementation if there is a better way to fit this into the project. Hope you like it!
Summary by cubic
Adds native Windows support while keeping macOS behavior unchanged. Windows runs a hidden, borderless
tauriwindow with a native tray; macOS keepstauri-nspanel. Also fixes Windows panel max-height caching to prevent clipped or oversized panels on DPI/monitor changes.New Features
tauri-nspanel; Windows uses a hiddentauriwindow with a native tray and menu.sqlite3-missing hint on Windows..github/workflows/publish.yml;tauri.windows.conf.jsonfor NSIS bundling; updater artifacts enabled with passive Windows install mode.Migration
sqlite3.exeon PATH; the app now surfaces an actionable error if missing.latest.json.Written for commit bf41aa6. Summary will update on new commits.