Sync upstream/dev (2026-08-03) and forward-port ports/tao 0.36 / ports/wry 0.56 - #15
Conversation
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* ci: fix and run acl-tests * Simplify `CommandScope::from_command`
…rs (tauri-apps#15737) * docs(cli): document TAURI_SIGNING_PRIVATE_KEY_PATH and clarify key vars * docs(cli): sync signer generate output with signing env var docs and add change file
…pps#15629) * fix(build): copy newly added files from resource directories The resource copy only emitted `cargo:rerun-if-changed` for the individual files resolved at build time. When a new file was added to a resource directory, cargo had no reason to re-run the build script, so the file was never copied until an unrelated rebuild happened. Track every walked/globbed resource directory in `ResourcePathsIter` and emit a `rerun-if-changed` for each after copying, so adding or removing a file inside a resource directory re-runs the script and picks it up. Closes tauri-apps#14992 * Avoid emitting for each glob file ref: tauri-apps#15390 * Rework the test --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
…-apps#15619) * feat(bundler): add bundle > disableBinaryPatching option Tauri patches the main executable with bundle type information so the updater plugin can pick the matching installer format when multiple bundle types target the same platform. This rewrites the binary after it is built, invalidating an existing code signature on it, which breaks bundling an already-signed binary (e.g. inside the NSIS bundler). Add a `bundle > disableBinaryPatching` config option (default false). When set, the bundler skips patching the main binary and the subsequent re-sign, leaving the executable untouched. closes tauri-apps#15591 * feat(cli): add --no-binary-patching flag to build and bundle Switch the disable-binary-patching control from the proposed `bundle > disableBinaryPatching` config option to a `--no-binary-patching` CLI flag on `tauri build` and `tauri bundle`, mirroring the `--no-sign` precedent. When set, the bundler skips patching the main executable with bundle type information (and the subsequent re-sign), preserving an already-signed binary. Patching only matters when shipping multiple bundle types per platform. * chore: add @tauri-apps/cli to changefile * refactor(bundler): use positive binary_patching flag defaulting to true * refactor(bundler): hand-write SettingsBuilder default, notice on skip - Implement Default for SettingsBuilder manually so binary_patching defaults to true, instead of overriding it on top of a derived default. - Log a notice when --no-binary-patching skips patching, mirroring the --no-sign notice, and drop the now-redundant inline comment. * Always sign and warn with path data --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
…ps#15620) * feat(cli): support non-square source images in `tauri icon` `tauri icon` rejected any source whose width and height differ. Add a `--fit` option, modeled on the CSS `object-fit` property, to square a non-square source before generating icons: - `cover`: scale to fill the square, center-cropping the longer side - `contain`: scale to fit inside the square, padding the shorter side with transparency SVG sources are rasterized at their native size before fitting. Non-square sources without `--fit` still error, now with a hint pointing to the flag. closes tauri-apps#15376 * fix(cli): rasterize small SVG sources at a higher resolution * refactor(cli): apply icon --fit as SVG render transform Keep SVG sources as a vector tree through the fit step and apply the crop/pad as a transform when rendering each target size, instead of rasterizing once at a fixed floor and squaring the bitmap. Icons are now rendered directly from the vector at their final resolution, so a source with a small intrinsic size stays crisp and the MIN_SVG_RASTER_SIZE upscale hack is gone. * Small refactor * Inline width and height fn * Clean up comments * use `::min` `::max` * Add `@tauri-apps/cli` * Update tests --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
tauri-apps#15617) * fix(core): purge Rust event listeners when window/webview is destroyed Rust-side listeners registered via listen/once on a Window, Webview or WebviewWindow were never removed when that target was destroyed, leaking handlers for the lifetime of the app. Add Listeners::remove_listeners_for_target, wired into on_window_close and on_webview_close, which drops handlers whose target exactly matches the destroyed one. Matching on the full EventTarget (kind + label) instead of the label alone keeps window and webview listeners distinct in multi-webview mode, where a window and its webviews can share a label. App, Any and AnyLabel listeners are preserved. Follows the existing try_lock + Pending convention so it is safe during emit. closes tauri-apps#15613 * Remove AI task comments * Combine tests * Simplify target creations * Move the calls to listener --------- Co-authored-by: Tony <legendmastertony@gmail.com>
* refactor: reduce some nestings * a bit more * Move back down desktop to keep the diffs small * Clippy
…#15625) * Remove unwraps * Restore multi-webview focus * Cleanup * Skip if already focused * `has_children` is set to true for webview window on unstable feature * Forward the event for raw tao window * Always handle focused events in `add_LostFocus` * Clean up * Add change file * Move out to a `add_focus_change_listeners` fn * move `add_focus_change_listeners` down to bottom
* refactor: reduce some clones inside `App::run` * Use fn calls when possible * Remove useless ignore lint
* fix: customized config path. * fix: add customized path in Attributes. * chore: add change file. * chore: update docs. * fix: deprecate config_path in CodegenContext. * fix: revert config_path in CodegenContext. * Small refactors * 2.12 now * clippy * crate instead of package * proper change file --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
This reverts commit 8a8266b.
* chore(deps): update rust crate jsonschema to 0.48 * jsonschema 0.49 * bump `js-yaml` `brace-expansion` `PostCSS` * bump wrangler --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
…s#15771) * docs: document browser argument data directory requirement * Simplify and document in config as well --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
node 24 dropped 32bit support
…decorated webkitgtk window (tauri-apps#15701)
* chore(deps): update `objc2-*` crates to 0.3.2 * change tag * remove unsafe on ios
* feat: changes for tauri 0.36 * Tao 0.36 wry 0.56 events (tauri-apps#15789) * use git version of tao and wry * Migrate window events * use my wry branch * Gate behind mobile * tao 0.36 * wry 0.56 and dom_query 0.28 * change tag * Use `onCreate` exclusively --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* feat: expose wry permission handler API in tauri * fix: preserve default permission behavior * refactor: move webview permission mappings * refactor: rename permission mapping helpers * from not to * add docs about the fall through * update change file --------- Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com> Co-authored-by: Tony <legendmastertony@gmail.com>
…i-apps#15806) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Brings in 32 upstream commits since the 2026-07-19 sync, including the serde_with 3.21.0 security update. Conflict resolutions: - crates/tauri/src/app.rs: kept our version. Upstream's refactor changed the iOS supports_multiple_windows dispatch to `let _ = ...`, which lets the following rx.recv().unwrap() panic when run_on_main_thread fails. Ours returns false instead. - crates/tauri-utils/src/resources.rs, crates/tauri-build/src/lib.rs, .changes/fix-copy-new-resource-files.md: took upstream. Our resource rerun-if-changed fix (#11) was upstreamed verbatim as tauri-apps#15629; only doc comments and a test name differed. - crates/tauri-runtime-wry/src/undecorated_resizing.rs: kept our version. See "Deferred" below. - Cargo.lock, pnpm-lock.yaml: took upstream, NOT regenerated. See "DO NOT MERGE" below. Deferred: Upstream tauri-apps#15701 (resize cursor within the inset for undecorated webkitgtk windows) is written against GTK3 -- connect_motion_notify_event, connect_button_press_event, connect_touch_event, gdk::Window, WindowEdge, begin_resize_drag -- plus helpers using gdk::CursorType and Cursor::for_display, all removed in GTK4. It cannot be merged into our GTK4/WebKit6 port as-is and needs a real forward-port (EventControllerMotion + set_cursor, gdk::Surface, and a decision on touch, which GTK4 has no direct equivalent for). Upstream's entire change to that file is confined to the gtk module, so taking our side is complete and self-consistent. DO NOT MERGE -- this commit silently disables the GTK4 ports: Upstream tauri-apps#15307 bumped crates/tauri-runtime-wry to tao 0.36.0 and wry 0.56.0, but [patch.crates-io] points tao/wry at ports/tao (0.35.3) and ports/wry (0.55.1). Cargo does not error on this. It resolves successfully and drops the patches, warning only: warning: patch `tao v0.35.3 (ports/tao)` was not used in the crate graph warning: patch `wry v0.55.1 (ports/wry)` was not used in the crate graph The resulting graph pulls stock tao 0.36.0 / wry 0.56.0 / webkit2gtk from crates.io -- i.e. the entire GTK4/WebKit6 port is bypassed and the build reverts to GTK3 without failing. The lockfile in this commit is upstream's and pins tao 0.36.0 / wry 0.56.0 for that reason. Do not merge or build from this branch until ports/tao is forward-ported to 0.36 and ports/wry to 0.56, after which Cargo.lock and pnpm-lock.yaml must be regenerated and the patch-unused warnings confirmed gone.
Completes the 2026-08-03 upstream sync. tauri-apps#15307 bumped crates/tauri-runtime-wry to tao 0.36.0 / wry 0.56.0, which left [patch.crates-io] pointing at ports/ trees still at 0.35.3 / 0.55.1. Cargo did not error on that -- it silently dropped both patches and resolved stock GTK3 tao/wry from crates.io, bypassing the GTK4/WebKit6 port entirely. Both ports are now at the required versions and both patches are back in the crate graph. Method: each port was reconstructed as a git branch off the upstream commit it was actually built from (tao 722aad90, wry 09f088e9 -- both on dev, ahead of their tags, which is why the ports were already much closer to 0.36/0.56 than to 0.35.3/0.55.1), then upstream's release tag was merged in. This kept the port's own changes as the "ours" side of a real 3-way merge rather than replaying patches. All of platform_impl/linux -- the GTK4 surface -- merged without conflict. Per-conflict reasoning is in the two port merge commits. Also fixes crates/tauri/src/app.rs from the previous commit: resolving that conflict with --ours took the whole file and so discarded upstream's tauri-apps#15766 clone reduction in App::run. The file is now upstream's, with only the fork's supports_multiple_windows early return re-applied. Lockfiles regenerated: - Cargo.lock: cargo metadata now resolves tao 0.36.0, wry 0.56.0, muda, tray-icon and wayland-scanner to the local paths, with no "patch ... was not used" warnings. - pnpm-lock.yaml: regenerated so the merged pnpm-workspace.yaml overrides are reflected, including the fork's brace-expansion, js-yaml and sharp audit remediations, which upstream's lockfile did not carry. NOT COMPILE VERIFIED. This was done on Windows; the GTK4/WebKit6 code is Linux-only and cannot be built or cross-compiled here. Dependency resolution is verified, the source is not. Needs a Linux build plus the fork's CI before merging. Still deferred: upstream tauri-apps#15701 (resize cursor within the inset for undecorated webkitgtk windows) remains unported to GTK4 -- see the previous commit.
|
Important Review skippedToo many files! This PR contains 129 files, which is 29 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (5)
📒 Files selected for processing (129)
You can disable this status message by setting the 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. Comment |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
CI on PR #15 surfaced three real defects, all from resolving conflicts with --ours/--theirs, which takes the whole file and silently discards the other side's non-conflicting changes. 1. crates/tauri/src/app.rs -- rebuilding from upstream dropped a second fork change I had not noticed: store.register_initialized(plugin) reverted to upstream's store.register(plugin). register_initialized is fork-only; upstream's register() calls initialized.remove(name), which marks a just-initialized plugin as uninitialized. This is what CI reported, as dead_code on the now-uncalled method under -D warnings. Also restores the fork's webkit2gtk doc-link change. Audited all four fork changes to this file; the fourth (removing an unsafe block) had already converged upstream. 2. ports/tao android/mod.rs, ndk_glue.rs, window.rs -- resolving with --ours discarded upstream 0.36's android work and, in window.rs, the #[cfg(any(windows, linux))] gate on hit_test. The android break was a hard compile error: 0.36 moved Suspended and Resumed from Event to WindowEvent, and the retained port code still emitted event::Event::Resumed. All three are now hunk-level 3-way merges keeping only the port's deliberate divergences. 3. ports/wry examples -- taking --theirs kept only the path-traversal guard and dropped the rest of the port's hardening, notably unimplemented!() in the request handlers (a panic on any unrecognized extension) which the port had replaced with 415/404 responses. Rebuilt on 0.56's structure, since 0.56 removed the 'protocol' feature the port's module gate used. Also bumps the brace-expansion pnpm override from 5.0.7 to 5.0.9 for two advisories requiring >=5.0.8 and >=5.0.9. This one is not from the merge -- audit-js has been failing on dev since at least 2026-07-30 on 3062a89. Verified: resources.rs and tauri-build/src/lib.rs, also resolved with --theirs, are genuinely equivalent to upstream (identical rerun_if_changed push sites and the same by_ref restructure), so nothing was lost there. Cargo resolution still clean with all five patches used.
audit-js is a required check and has been failing on dev since at least 2026-07-30 on 3062a89, for reasons unrelated to the udeps fix here. Every PR targeting dev inherits it, which is why this one has been red for two weeks despite touching only .github/workflows/udeps.yml. Two advisory groups had to be cleared: - brace-expansion: the override pinned 5.0.7, but GHSA-rgw5-rvv9-x895 and its predecessor now require >=5.0.8 and >=5.0.9. Bumped to 5.0.9. - postcss: <=8.5.17 (high, path traversal in previous source map) and <=8.5.22 (moderate, incomplete fix of GHSA-6g55-p6wh-862q). Added a postcss@<8.5.23 override. `pnpm audit` now reports no known vulnerabilities, and prettier is clean on both changed files. Note: the postcss override is only needed on this branch. The upstream sync in #15 pulls newer transitive deps that already resolve postcss >=8.5.23, so once that lands this entry is redundant and can be dropped. The brace-expansion bump is the same change #15 carries, so expect a trivial conflict in pnpm-workspace.yaml / pnpm-lock.yaml between the two -- take either side for brace-expansion, drop postcss.
GHSA-4cwx-7wf7-3272 (high, cross-user information disclosure and parse-time crash via degenerate private cache directives) and GHSA-8xcm-r25x-g524 (moderate, downstream response desynchronization via the retry interceptor). Both are >=7.0.0 <7.29.0, patched in 7.29.0. Single path: crates__tauri-schema-worker>wrangler>miniflare>undici, i.e. build/test tooling for the schema worker, not the desktop binary or the frontend bundle. Pinned as ^7.29.0 rather than a bare >=7.29.0 on purpose: undici 8.x is released (8.10.0 is latest), so an open-ended lower bound would drag miniflare across a major. undici now resolves to 7.29.0 and pnpm audit reports no known vulnerabilities. These advisories are new drift, not merge fallout -- audit-js was green on this branch at 45/45 before they were published. Same pattern as the brace-expansion and postcss bumps. Note on the postcss override inherited from dev via #14: it is inert here, because the upstream sync already resolves postcss >=8.5.23 on its own. Left in place rather than removed, since dropping it is a separate decision from this sync.
Brings the fork up to date with
tauri-apps/devas of 2026-08-03 (32 commits, last sync was 2026-07-19), and forward-ports the vendored GTK4/WebKit6 crates to the versions upstream now requires.Draft: not compile verified — see Caveats.
Why this is not just a merge
Upstream tauri-apps#15307 bumped
crates/tauri-runtime-wryto tao 0.36.0 / wry 0.56.0, while[patch.crates-io]pointed atports/tao(0.35.3) andports/wry(0.55.1).Cargo does not error on that. It resolves successfully, drops both patches, and pulls stock GTK3 tao/wry from crates.io — bypassing the GTK4/WebKit6 port entirely while the build still succeeds. The only signal is:
Both ports are now at the required versions and
cargo metadataresolves tao, wry, muda, tray-icon and wayland-scanner to local paths with no patch-unused warnings.Commits
8f18a4c2— merge of upstream/dev. 7 conflicts; per-file reasoning in the commit message.f4298c93— forward-port of both ports, plus lockfile regeneration.How the ports were forward-ported
Rather than replaying patches, each port was reconstructed as a branch off the upstream commit it was actually built from, and the upstream release tag was merged in as a real 3-way merge. Both ports turned out to be branched off upstream
devahead of their tags, which is why they were already much closer to 0.36/0.56 than to 0.35.3/0.55.1.The full merges, with per-conflict reasoning, are pushed for review:
OlympusLedgerOrg/taobranchagent/gtk4-port-tao-0.36-2026-08-03(mergea534ef74)OlympusLedgerOrg/wrybranchagent/gtk4-port-wry-0.56-2026-08-03(mergec28f997a)All of
platform_impl/linux— the entire GTK4 surface — merged without conflict.Resolutions worth a second look
android/ndk_glue.rspoll_events— kept the port. Upstream readssize_of::<Event>()bytes from the wake pipe; the port'swake()(which auto-merged) writes a 1-byte token and queues events in aMutex<VecDeque<Event>>. Taking upstream would have corrupted the event stream.examples/streaming.rs,examples/async_custom_protocol.rs— took upstream's rewrites, then re-applied the fork's path-traversal guard. Upstream still doesfs::read(canonicalize(root.join(path))?)?with no check that the result stays under root.Cargo.toml— kept thewebkit = { package = "webkit6" }alias andtao = { path = "../tao" }; adopted upstream's removal of theprotocol,transparentandfullscreenfeature flags.crates/tauri/src/app.rs— upstream's file, with only the fork'ssupports_multiple_windowsearly return re-applied so a failed main-thread dispatch does not panic inrx.recv().unwrap().Lockfiles
Cargo.lockregenerated; patches verified in the graph.pnpm-lock.yamlregenerated so the mergedpnpm-workspace.yamloverrides apply — including the fork'sbrace-expansion,js-yamlandsharpaudit remediations, which upstream's lockfile does not carry.Caveats
connect_motion_notify_event,connect_touch_event,gdk::Window,WindowEdge,CursorType,Cursor::for_display), none of which exist in GTK4.undecorated_resizing.rskeeps the port's version; upstream's change to that file is confined to thegtkmodule, so the resolution is self-consistent. Porting it needsEventControllerMotion+set_cursor,gdk::Surface, and a decision on touch.