Skip to content

Windows desktop port#520

Merged
AnthonyRonning merged 11 commits into
masterfrom
windows/pr1-compile-launch
Jun 2, 2026
Merged

Windows desktop port#520
AnthonyRonning merged 11 commits into
masterfrom
windows/pr1-compile-launch

Conversation

@ldstreet
Copy link
Copy Markdown
Collaborator

@ldstreet ldstreet commented May 16, 2026

Summary

Brings the Tauri desktop app to Windows (x64, NSIS installer).

This is the single consolidated PR for the Windows port. Per maintainer direction it replaces the earlier stacked PR-per-slice plan and grows until Windows reaches feature parity, rather than merging incomplete slices across many PRs.

Build/CI/dev-setup is intentionally minimal here. The reproducible build + release pipeline (likely cross-compilation via nix) is owned by the maintainer and lands after the Windows app is in a good place. The windows-latest CI job in this PR is an interim compile/build gate only — a placeholder to keep the app building until that pipeline replaces it.

What's included

  • Compile + launch — minimal Windows port skeleton; builds and launches on a clean Windows host.
  • CI (interim)windows-latest jobs produce an unsigned NSIS build on both master-push and PRs.
  • Proxy — config moved to %APPDATA% (Tauri app_config_dir()); API key stored in Windows Credential Manager (keyring) and scrubbed from the JSON, with plaintext fallback if secure storage is unavailable. macOS/Linux behavior byte-for-byte unchanged.
  • Deep links / OAuthcloud.opensecret.maple:// registered via the NSIS template + runtime register(); installMode: currentUser; msi excluded from bundle targets. Adds a Windows startup diagnostic logging is_registered() to debug "OAuth callback does nothing" reports.
  • UI copy — document-upload dialog now lists Windows as a desktop platform.

Still pending (toward full feature parity)

  • TTS — ship + load onnxruntime.dll on Windows
  • Windows VM acceptance pass — login, payment return, upload, mic, TTS, proxy, update, uninstall/reinstall
  • Code signing + release CI — deferred to the maintainer's build pipeline

Scope notes

  • Cross-platform proxy refactors (config-path unification, shutdown hook, port-fallback ladder) were evaluated and left out — not Windows-specific, would expand blast radius onto macOS/Linux.
  • The in-app /downloads page is left as-is (superseded by trymaple.ai/research#download).

Test plan

  • build-windows CI (master-push + PR) stays green
  • Fresh Windows VM: install NSIS build, launch, OAuth login (GitHub/Google/Apple)
  • Proxy works against %APPDATA% config + Credential Manager
  • start cloud.opensecret.maple://auth?... from cmd focuses the app and logs the deep link

🤖 Generated with Claude Code

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 16, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds Windows CI jobs for signed and PR builds, pins and provisions Windows ONNX Runtime with checksum verification, tightens Tauri filesystem capabilities to $APPCONFIG, adjusts Tauri bundling/updater settings, and refactors proxy config persistence to use Tauri AppHandle for platform-aware paths.

Changes

Windows Desktop Build Support

Layer / File(s) Summary
Tauri bundling and installer configuration
frontend/src-tauri/tauri.conf.json
Bundle targets switch from "all" to explicit array (nsis, deb, appimage, rpm, dmg, app); Windows updater/webview settings (timestampUrl, webviewInstallMode) and nsis.installMode set to currentUser.
Filesystem capability restrictions
frontend/src-tauri/capabilities/default.json
fs:allow-read-file, fs:allow-write-file, fs:allow-create, fs:allow-exists now target only $APPCONFIG/**; fs:allow-mkdir limited to $APPCONFIG, removing $HOME/.config/maple entries.
Proxy configuration refactor for AppHandle
frontend/src-tauri/src/proxy.rs
Commands start_proxy, load_proxy_config, and save_proxy_settings now accept AppHandle; persistence helpers use get_config_path(&AppHandle) to select app_config_dir() on Windows and ~/.config/maple on non-Windows; auto-start updated to new signatures.
Windows ONNX Runtime provisioning and verification
frontend/src-tauri/scripts/onnxruntime-pins.sh, frontend/src-tauri/scripts/provide-windows-onnxruntime.sh
Adds Windows x64 SHA256 pins (v1.22.0) and a provisioning script that downloads, verifies, extracts, validates onnxruntime.dll, and prints ORT_LIB_LOCATION, ORT_SKIP_DOWNLOAD, and ORT_DYLIB_PATH.
Windows CI/CD build jobs
.github/workflows/desktop-build.yml, .github/workflows/desktop-pr-build.yml
Adds build-windows job(s) that set up Bun/Rust, download/verify and expose Windows sccache, cache sccache, run ONNX provisioning, install frontend deps with Bun, run Tauri builds (signed in release workflow, unsigned in PR workflow), output sccache stats, and upload NSIS .exe artifacts.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 I hopped through workflows, checksums, and build,
I fetched ONNX DLLs, verified each guild.
AppHandle led configs to their Windows nest,
Caps now tight so files rest.
CI packs installers—bounce into the wild!

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'Windows desktop port' is partially related to the changeset. It captures a key aspect (Windows support), but fails to highlight the main deliverable of this PR: compile, launch, and unsigned CI, which are the core objectives outlined in the PR description.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch windows/pr1-compile-launch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 16, 2026

Deploying maple with  Cloudflare Pages  Cloudflare Pages

Latest commit: 02da761
Status: ✅  Deploy successful!
Preview URL: https://a5f67da1.maple-ca8.pages.dev
Branch Preview URL: https://windows-pr1-compile-launch.maple-ca8.pages.dev

View logs

coderabbitai[bot]

This comment was marked as resolved.

@ldstreet ldstreet force-pushed the windows/pr1-compile-launch branch from bbb7960 to a4161cd Compare May 18, 2026 16:50
@ldstreet ldstreet marked this pull request as ready for review May 19, 2026 19:12
@ldstreet ldstreet requested a review from AnthonyRonning May 19, 2026 19:12
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

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

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 4 additional findings.

Open in Devin Review

coderabbitai[bot]

This comment was marked as resolved.

@AnthonyRonning
Copy link
Copy Markdown
Contributor

I've been making significant updates to the build processes, you'll likely want to rebase and standardize around them at some point

@ldstreet ldstreet force-pushed the windows/pr1-compile-launch branch from 1aa2673 to 2c4e927 Compare May 21, 2026 17:32
coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@ldstreet ldstreet force-pushed the windows/pr1-compile-launch branch 2 times, most recently from 19b863d to 4e074dc Compare May 21, 2026 17:48
@ldstreet
Copy link
Copy Markdown
Collaborator Author

I've been making significant updates to the build processes, you'll likely want to rebase and standardize around them at some point

Rebased the PR and updated to follow some of the new patterns you set up. All builds are passing and I was able to download the windows installer and run on my VM successfully

@ldstreet ldstreet force-pushed the windows/pr1-compile-launch branch from 4e074dc to c5e79a2 Compare May 26, 2026 17:10
coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@AnthonyRonning
Copy link
Copy Markdown
Contributor

Does this have full feature compatibility?

@ldstreet
Copy link
Copy Markdown
Collaborator Author

Does this have full feature compatibility?

most features work - login, chat, voice record, file picker, search, folders. I'll be following up with some other updates over the next couple of days -

  • keeping creds in windows keychain
  • downloading and running text to speech
  • deep links
  • ui copy / downloads page
  • signed releases

@AnthonyRonning
Copy link
Copy Markdown
Contributor

I’d say keeping working on that in a single PR then. No point in splitting things across many PRs and merging in incomplete code.

also don’t spend any more extra time on any cicd or development setup scripts or anything. All of that is going to be redone with my new nixos reproducible build setup.

@ldstreet
Copy link
Copy Markdown
Collaborator Author

I’d say keeping working on that in a single PR then. No point in splitting things across many PRs and merging in incomplete code.

also don’t spend any more extra time on any cicd or development setup scripts or anything. All of that is going to be redone with my new nixos reproducible build setup.

Sounds good, happy to run it that way. I'll close my other PR and convert this back to a draft for now so it can all land together. 👍

@ldstreet ldstreet marked this pull request as draft May 27, 2026 14:57
@ldstreet ldstreet changed the title Windows port PR 1: compile + launch + unsigned CI Windows desktop port May 27, 2026
@ldstreet ldstreet force-pushed the windows/pr1-compile-launch branch 2 times, most recently from 022613d to 260af74 Compare May 27, 2026 21:18
@ldstreet ldstreet marked this pull request as ready for review June 1, 2026 18:34
@AnthonyRonning
Copy link
Copy Markdown
Contributor

I tested this on Windows 11 ARM in UTM. TTS setup fails at the first model download.

The Tauri log only shows:

[app_lib::tts][INFO] Downloading TTS model: duration_predictor.onnx

and then no success/failure line. The dialog shows Failed to download TTS models.

From the code, the failure likely happens around client.get(&url).send().await in tts_download_models. Most failure branches return Err(String) without log::error!, and the frontend currently does err instanceof Error ? err.message : "Failed to download TTS models", which hides plain string errors returned by Tauri invoke.

Could we log the exact download error/status and surface String(err) in the TTS dialog? That would make it possible to tell whether this is HTTP, TLS, timeout, checksum/size mismatch, Windows ARM networking, etc.

@AnthonyRonning
Copy link
Copy Markdown
Contributor

these logs are expected, but it's going to be hard to test until we build release builds for these. can you double check the logic at least and verify that it should work correct?

[2026-06-02][04:34:45][app_lib][INFO] Performing automatic update check on startup
[2026-06-02][04:34:45][app_lib][INFO] Checking for updates...
[2026-06-02][04:34:46][app_lib][ERROR] Failed to check for updates: None of the fallback platforms `["windows-x86_64-nsis", "windows-x86_64"]` were found in the response `platforms` object

@AnthonyRonning
Copy link
Copy Markdown
Contributor

Also hard to test oauth deeplink flow since CICD build for the dev environment but I think it might work just fine based on the logs:

[2026-06-02][04:40:03][app_lib][INFO] [Deep Link] Received: cloud.opensecret.maple://auth/?access_token...
[2026-06-02][04:40:03][app_lib][INFO] [Deep Link] Event emitted successfully
[2026-06-02][04:40:03][app_lib][INFO] Single instance detected: Maple, ["C:\\Users\\dev\\AppData\\Local\\Maple\\maple.exe", "cloud.opensecret.maple://auth/?access_token..."], C:\WINDOWS\system32

however I do not know what's up with that system32 log at the end.

@AnthonyRonning
Copy link
Copy Markdown
Contributor

Also i fixed some cicd things in master, if you rebase it should fix the failures we were having here.

ldstreet and others added 10 commits June 2, 2026 10:10
Three minimum-viable changes to unblock building Maple on Windows. Atomic
migration, keyring storage, signing, TTS DLL shipping, and the CI matrix
job are deferred to follow-up epics.

tauri.conf.json (MPLR-uyqowcnn / 1a):
- bundle.targets switched from "all" to an explicit list excluding "msi".
  Tauri's WiX template hard-codes HKLM + perMachine install, which would
  shadow the HKCU keys we rely on for cloud.opensecret.maple deep links.
- bundle.windows.nsis.installMode = "currentUser" so the NSIS installer is
  per-user (no UAC) and writes deep-link registration under HKCU.
- bundle.windows.webviewInstallMode.type = "downloadBootstrapper" set
  explicitly to avoid surprise behavior if the Tauri default changes.

capabilities/default.json (MPLR-zivybmgl / 1b):
- Dropped $HOME/.config/maple/** scope entries from every fs:allow-*
  permission. The path tokens don't resolve to anything meaningful on
  Windows, no JS code touches them via the Tauri fs plugin, and proxy.rs
  writes via raw std::fs which bypasses the capability system entirely.
  $APPCONFIG/** entries are kept.

src/proxy.rs (MPLR-oshibkah / 1c):
- get_config_path now takes &AppHandle and resolves to
  %APPDATA%\cloud.opensecret.maple\ on Windows via Tauri's path resolver.
  macOS and Linux behavior is byte-identical (still ~/.config/maple/).
- AppHandle is plumbed through save_proxy_config, load_saved_proxy_config,
  start_proxy, load_proxy_config, save_proxy_settings, and the auto-start
  initializer. Frontend invoke() calls are unchanged — Tauri auto-injects
  AppHandle on commands.
- USERPROFILE fallback removed; Windows now uses the proper Tauri path.

cargo check + cargo clippy -D warnings + cargo fmt --check all pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Introduces Windows as a third desktop build target across both desktop CI
workflows. Both jobs are born conformant with the patterns shipped during
PR review (pinned actions, Bun 1.3.5, Rust 1.95.0, sha256-verified binary
fetches via onnxruntime-pins.sh + sibling helper script).

desktop-build.yml (MPLR-hzehaxpp / 1e):
- New build-windows job runs on push to master, mirrors build-macos /
  build-linux step-for-step, builds via tauri-action (signing env wired
  up so the action doesn't error mid-build, though Authenticode is
  deliberately out of scope here), uploads the .exe artifact.
- All third-party actions SHA-pinned to the same commits used by the
  Linux/macOS jobs: actions/checkout, oven-sh/setup-bun,
  dtolnay/rust-toolchain, actions/cache, tauri-apps/tauri-action,
  actions/upload-artifact.
- bundle.targets in tauri.conf.json already constrains the Windows build
  to NSIS (MPLR-zsvmhjjx / 1i), so the redundant `--bundles nsis`
  tauri-action arg is omitted.

desktop-pr-build.yml (MPLR-hzehaxpp / 1e):
- Parallel build-windows job runs on pull_request, modeled on the
  existing macOS/Linux PR jobs: no secrets, no codesigning, no updater
  artifacts (`bun tauri build --no-sign --config '{"bundle":{"createUpdaterArtifacts":false}}'`),
  dev-environment VITE URLs, artifact suffixed `-pr`.

sccache install (MPLR-gelmlpfg / 1h):
- Mirrors the Linux job's style (long-form curl, `sha256sum --check -`,
  current-dir extract). Windows twist: download/verify/extract run inside
  a subshell cd'd to RUNNER_TEMP so all paths stay relative. MSYS2 tar
  mangles absolute D:\ paths passed via -C/-f even with --force-local;
  relative paths sidestep it. Inline comment explains.

ONNX Runtime install (MPLR-hzehaxpp / 1e):
- New provide-windows-onnxruntime.sh helper mirrors
  provide-linux-onnxruntime.sh one-for-one: same sha256_file /
  verify_sha256 helpers, archive + DLL double SHA256 verify, emits
  ORT_LIB_LOCATION / ORT_SKIP_DOWNLOAD / ORT_DYLIB_PATH for the
  GITHUB_ENV file. Workflow step reduces to a single invocation piped to
  GITHUB_ENV.
- onnxruntime-pins.sh extended with windows_x64_archive_sha256 and
  windows_x64_dll_sha256 lookups for 1.22.0 (matches the existing
  linux_x64 pattern).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
proxy.rs writes proxy_config.json to ~/.config/maple on macOS/Linux
(byte-identical behavior deferred to PR3's app_config_dir() unification),
but the capability only allowed $APPCONFIG/** ($APPCONFIG resolves to the
bundle-identifier dir, e.g. ~/.config/cloud.opensecret.maple on Linux).
Those writes fell outside the allowed scope and failed with permission
errors. Restore the $HOME/.config/maple entries to match proxy.rs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The build-windows job signs builds and tauri.conf.json sets
createUpdaterArtifacts: true, so Tauri emits .nsis.zip and .nsis.zip.sig
alongside the .exe installer. The upload step only globbed *.exe, silently
discarding the updater artifacts (inconsistent with the Linux job). Add the
.nsis.zip and .nsis.zip.sig globs so auto-update artifacts are preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
On Windows the proxy config lives in the roaming %APPDATA% profile, so a
plaintext api_key could sync across machines in a domain/AAD environment.
Store it in Credential Manager via keyring (windows-native) and scrub it
from the JSON; restore it on load. If secure storage is unavailable, fall
back to plaintext-in-JSON. All keyring code and the dependency are gated
to target_os="windows" — macOS/Linux keep their existing local
plaintext-with-0o600 behavior, byte-for-byte unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
On Windows, OAuth/payment deep links only reach the app if
HKCU\Software\Classes\cloud.opensecret.maple\shell\open\command points at
the running exe. A missing or stale key (installer skipped, dev build
deleted, exe moved) silently breaks the OAuth callback with no signal.

Log the result of DeepLinkExt::is_registered() once at startup so support
can diagnose "the callback button does nothing" reports. Windows-gated;
no behavior change on macOS/Linux.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The "Desktop" card listed only "macOS • Linux". Windows is now a supported
desktop target, so include it. Listed last to reflect relative priority.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
maple.exe links onnxruntime.dll by ordinal. On a clean Windows install the
loader binds that import to the OS-shipped Windows-ML onnxruntime.dll (a
forwarder to onnxruntime_x64.dll, currently v1.17), which lets the app launch
but hangs TTS at the first Session::builder call.

Ship ONNX Runtime 1.22.0 and its four MSVC C++ runtime DLLs (VCRUNTIME140,
VCRUNTIME140_1, MSVCP140, MSVCP140_1) next to maple.exe so the executable's
own directory wins the Windows DLL search order over System32. The four CRT
DLLs are deployed app-local (rather than via vc_redist) to avoid a UAC prompt
on the per-user install.

Deployment uses an NSIS installer hook, not bundle.resources: in Tauri 2.11 a
resources map supplied via the platform config gets the DLLs into the installer
payload but not into the NSIS install file-list, so they never land in the
install dir (verified: only maple.exe + uninstall.exe were installed). The hook
copies them explicitly into $INSTDIR and removes them on uninstall.

- resources/windows/install-dlls.nsh: NSIS_HOOK_POSTINSTALL File-copies the 5
  DLLs from <src-tauri>/resources/windows into $INSTDIR (anchored on
  ${MAINBINARYSRCPATH}); NSIS_HOOK_PREUNINSTALL deletes them.
- tauri.windows.conf.json: register the hook via bundle.windows.nsis.installerHooks
  (Windows-only; macOS/Linux/iOS unaffected).
- resources/windows/: README + .gitignore (the redistributable DLLs are staged
  at build time, not committed).
- desktop-pr-build.yml / desktop-build.yml: stage the 5 DLLs into
  resources/windows before the Tauri build, from the already-downloaded ORT
  (ORT_DYLIB_PATH) and the MSVC CRT redist located via vswhere (year/edition
  agnostic, with a System32 fallback).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The desktop menu was built as a flat in-window bar on Windows/Linux
(About / Check for Updates / Undo / Redo / Cut / Copy / Paste /
Select All / Quit), adding a cluttered, dated row at the top of the
window. The edit items are handled natively by the webview regardless
of the menu, About is available in the in-app account menu, and updates
are applied by the automatic check (startup + hourly), so the bar added
only noise.

Gate the entire menu-creation block (and its event handler) to macOS,
which keeps its proper nested app/Edit submenus. Windows and Linux now
get a clean window with just the title bar. The updater auto-check loop
is untouched and still uses check_for_updates, so no code is orphaned.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A hard delete_credential() failure left the stale credential in place but
still reported success, so save_proxy_config scrubbed the key from the JSON.
On the next load the surviving credential won over the (empty) JSON value and
the cleared key was silently resurrected.

Propagate the delete failure instead of warning + returning Ok(true), and
have save_proxy_config surface a clear failure rather than scrubbing the JSON.
Store failures keep the existing plaintext-fallback behavior.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ldstreet ldstreet force-pushed the windows/pr1-compile-launch branch from a925930 to bf6c3b1 Compare June 2, 2026 14:11
Every failure branch in tts_download_models returned Err(String) without
logging, so a failed download produced no log line after "Downloading TTS
model: ..." and the exact cause was invisible. The frontend compounded this
with `err instanceof Error ? err.message : "..."`, which discards the
plain-string error a Tauri Result<_, String> rejects with — the user only ever
saw a generic "Failed to download TTS models".

- tts.rs: wrap the flow so any propagated error is logged once via log::error!;
  include the URL (and existing HTTP status) on the network branches so HTTP /
  TLS / timeout / DNS are distinguishable from size / checksum failures.
- TTSContext.tsx: surface a string rejection directly so the real message
  reaches the dialog (covers download and load failures).

Reported by @AnthonyRonning testing on Windows 11 ARM (PR #520 review).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ldstreet
Copy link
Copy Markdown
Collaborator Author

ldstreet commented Jun 2, 2026

TTS setup fails at the first model download … Could we log the exact download error/status and surface String(err) in the TTS dialog?

Done in 02da761 (in the latest PR build). Two changes:

  • tts.rs: every failure branch in tts_download_models now logs the exact error via log::error! — previously they returned Err(String) silently, which is why you saw nothing after Downloading TTS model: …. I also added the URL to the network branches and kept the HTTP status, so HTTP/TLS/timeout/DNS are distinguishable from a size/checksum mismatch.
  • TTSContext.tsx: it was doing err instanceof Error ? err.message : <generic>, but a Tauri Result<_, String> rejects with a plain string, so the real message was always discarded. Now it surfaces the string directly.

To be clear, this makes the failure visible — it doesn't fix it. I deliberately didn't guess at the cause, since the candidates need different fixes (the model URLs are HuggingFace LFS links that 302-redirect to a CDN, so it could be the redirect failing on the VM, a timeout, an error page failing the checksum, or TLS). Could you re-run on this build and paste the dialog error + the [ERROR] TTS model download failed: … line from the log? That'll tell us exactly which one and I'll fix it.

@ldstreet
Copy link
Copy Markdown
Collaborator Author

ldstreet commented Jun 2, 2026

[ERROR] Failed to check for updates: None of the fallback platforms ["windows-x86_64-nsis", "windows-x86_64"] were found in the response platforms object … can you double check the logic at least

Checked — the client side is correct. windows-x86_64-nsis / windows-x86_64 are exactly what tauri-plugin-updater 2.10.1 derives for an NSIS build, and our updater config (endpoint + pubkey) is right.

The error is server-side: scripts/ci/latest-json.sh only emits darwin-* and linux-x86_64 entries — there's no windows-* key in the published latest.json, so the lookup fails. We already upload the *.nsis.zip + .sig, but adding the latest.json entry + verifier support is release-CI, so I left it for your nixos redo.

Heads-up that it'll keep erroring post-release until that entry lands (keyed windows-x86_64-nsis, pointing at the *-setup.nsis.zip + .sig, mirroring the darwin/linux pattern) — the happy path isn't testable until then.

@ldstreet
Copy link
Copy Markdown
Collaborator Author

ldstreet commented Jun 2, 2026

I do not know what's up with that system32 log at the end.

Benign — that's the cwd arg of the single-instance callback (|app, argv, cwd|). On Windows the URI-scheme handler is launched as a fresh process with its working directory defaulting to C:\WINDOWS\system32; single-instance forwards that process's argv + cwd to the running instance, and we just log all three.

The actual deep-link URL is argv[1], and your log shows [Deep Link] ReceivedEvent emitted successfully immediately after, so the chain's intact. The pattern that would indicate a problem is Single instance detected without a following [Deep Link] Received — that's not what we see here. No action needed.

@ldstreet
Copy link
Copy Markdown
Collaborator Author

ldstreet commented Jun 2, 2026

Also i fixed some cicd things in master, if you rebase it should fix the failures we were having here.

Done — rebased onto master. #562 (tagged-appimage-tools) cleared the linuxdeploy-plugin-appimage flake-hash failures, so the Linux checks are green again. Thanks for the fix.

@AnthonyRonning
Copy link
Copy Markdown
Contributor

Maybe it was a fluke or my environment but the TTS worked this time! even played in the vm.

I think everything as far as we can currently test and hypothesis is in a really solid position!

I think it makes sense to merge this now. I will iterate on some nixos and signed release build stuff from here.

great work getting this working end to end!

@AnthonyRonning AnthonyRonning merged commit 9f4e70f into master Jun 2, 2026
17 checks passed
@AnthonyRonning AnthonyRonning deleted the windows/pr1-compile-launch branch June 2, 2026 19:22
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