@tauri-apps/cli 3.0.0-alpha.1 → 3.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.0.0-alpha.3]
4
+
5
+ ### Bug Fixes
6
+
7
+ - [`0dd3c561a`](https://www.github.com/tauri-apps/tauri/commit/0dd3c561acb62e1968bcedaeaa12a80e6981e27f) ([#14443](https://www.github.com/tauri-apps/tauri/pull/14443)) `tauri dev` now kills the whole process tree of the running app when it restarts or exits, so processes spawned by the app (e.g. sidecars) are no longer left orphaned.
8
+
9
+ ### What's Changed
10
+
11
+ - [`d29d9054e`](https://www.github.com/tauri-apps/tauri/commit/d29d9054e09416bc1c05a39d71b53c3de67a1d40) Pull changes from Tauri 2.12 release.
12
+
13
+ ### Dependencies
14
+
15
+ - Upgraded to `tauri-cli@3.0.0-alpha.3`
16
+
17
+ ## [3.0.0-alpha.2]
18
+
19
+ ### Bug Fixes
20
+
21
+ - [`747a0612d`](https://www.github.com/tauri-apps/tauri/commit/747a0612d5dba9829fb3487a3ed6cdf7b5e81dd9) Only probe for libappindicator (and add it to the deb dependencies and AppImage files) when the `linux-libappindicator` feature is enabled. The `tray-icon` feature alone now uses the D-Bus StatusNotifierItem backend, so the probe panicked with "Can't detect any appindicator library" on hosts without the GTK 3 library.
22
+
23
+ ### What's Changed
24
+
25
+ - [`d42c0d62b`](https://www.github.com/tauri-apps/tauri/commit/d42c0d62ba18e741a449bfb507dc8dcd2a8ca4ee) Pull latest v2 changes.
26
+
27
+ ### Dependencies
28
+
29
+ - Upgraded to `tauri-cli@3.0.0-alpha.2`
30
+
3
31
  ## [3.0.0-alpha.1]
4
32
 
5
33
  ### Dependencies
@@ -34,6 +62,116 @@
34
62
  - Nothing runtime-specific is done for other runtimes.
35
63
  - The app and plugin templates add the `tauri-runtime-wry` dependency and select it with `tauri::Builder::default().runtime(tauri_runtime_wry::Wry::default())`.
36
64
 
65
+ ## [2.12.0]
66
+
67
+ ### New Features
68
+
69
+ - [`f6c1eb253`](https://www.github.com/tauri-apps/tauri/commit/f6c1eb2533a0445e081c334931d67fee3e354c6f) ([#15401](https://www.github.com/tauri-apps/tauri/pull/15401)) Added `bundle.windows.bundleVCRuntime` to copy the Visual C++ runtime DLLs into Windows MSI and NSIS installers. The bundler locates the runtime through `VCTOOLS_REDIST_DIR` or the bundled `vswhere.exe`.
70
+ - [`f76b1d3ae`](https://www.github.com/tauri-apps/tauri/commit/f76b1d3ae70d0ba0f0eba80b94b867593aa5ca8b) ([#15644](https://www.github.com/tauri-apps/tauri/pull/15644)) The bundler now prints the size of each generated bundle next to its path in the `Finished N bundles at:` output (directories such as macOS `.app` bundles are measured recursively).
71
+ - [`af465eae1`](https://www.github.com/tauri-apps/tauri/commit/af465eae1ad99d7b16b8fdbf9aa96bf76d6b9a76) ([#15619](https://www.github.com/tauri-apps/tauri/pull/15619)) Add a `--no-binary-patching` flag to `tauri build` and `tauri bundle`. When set, the bundler skips patching the main executable with bundle type information (and the subsequent re-signing), leaving an already-signed binary untouched. Patching is only required when shipping multiple bundle types per platform that should each update with their own installer format.
72
+ - [`0646cc162`](https://www.github.com/tauri-apps/tauri/commit/0646cc1623608dfdaec8d1adbc08d0159b9c2369) ([#15620](https://www.github.com/tauri-apps/tauri/pull/15620)) Add a `--fit` option to `tauri icon` to accept non-square source images. `--fit cover` center-crops the source to a square (clipping the longer side) and `--fit contain` pads the shorter side with transparency. Non-square sources without `--fit` keep erroring, now with a hint pointing to the flag.
73
+ - [`f6c1eb253`](https://www.github.com/tauri-apps/tauri/commit/f6c1eb2533a0445e081c334931d67fee3e354c6f) ([#15401](https://www.github.com/tauri-apps/tauri/pull/15401)) Added `build.windows.staticVCRuntime` to control MSVC static runtime linking. The `STATIC_VCRUNTIME` environment variable is now deprecated and emits a migration warning when used.
74
+ - [`f45ec0dcf`](https://www.github.com/tauri-apps/tauri/commit/f45ec0dcf83c139c8fdde5e61923a0e82836f756) Record the app version in the trusted comment of updater signatures, so a signed artifact is bound to the version it was released as.
75
+
76
+ An update endpoint response is not signed, and the signature only covers the downloaded artifact, so the announced `version` on its own does not prove which release the `url` and `signature` point at. minisign covers the trusted comment with its global signature, which lets the updater plugin compare the two and reject a response that pairs a version number with a different release. Enable `requireSignedVersion` in the updater plugin configuration to enforce this.
77
+
78
+ `tauri build` fills the version in automatically, and `tauri plugin add updater` now enables `requireSignedVersion` for the project it is adding the plugin to. `tauri signer sign` gains an `--app-version` flag for signing updater artifacts by hand, and warns when it is omitted.
79
+
80
+ ### Enhancements
81
+
82
+ - [`e19121427`](https://www.github.com/tauri-apps/tauri/commit/e19121427332c8a14165999251cce415707a62fc) ([#15993](https://www.github.com/tauri-apps/tauri/pull/15993)) Don't always rewrite `Cargo.toml` file from CRLF line endings to LF
83
+ - [`aebf38c84`](https://www.github.com/tauri-apps/tauri/commit/aebf38c845b57bc5653eca677e2e2e044528ea73) ([#15694](https://www.github.com/tauri-apps/tauri/pull/15694)) Migrate the Android Gradle scripts from the deprecated `kotlinOptions` DSL to `compilerOptions`, which is accepted by both Kotlin Gradle Plugin 1.9.x and 2.x. This lets projects move to Kotlin 2.x without hitting the hard error that 2.3+ raises on the old DSL.
84
+
85
+ This increased the minimum supported Gradle version to 8.13, if your `gradle` is on an earlier version, delete `src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties` and re-run `tauri android init` to update it.
86
+ - [`d89d8fa62`](https://www.github.com/tauri-apps/tauri/commit/d89d8fa62302bd3553b66fd47ecfa046b2fc84ef) ([#15780](https://www.github.com/tauri-apps/tauri/pull/15780)) Warn during Android commands (`init`/`dev`/`build`) when the active Java version is too new for the Gradle version the project uses (e.g. Java 27 against the Gradle 9.6.1 the template ships, or Java 25 against a project still on Gradle 8.14), instead of letting the build fail later with a cryptic error. The warning points to the Gradle/Java compatibility matrix and suggests a supported JDK.
87
+ - [`c3d21bd60`](https://www.github.com/tauri-apps/tauri/commit/c3d21bd60c3355b284b23dee1a181c3423231182) ([#15730](https://www.github.com/tauri-apps/tauri/pull/15730)) Use `Theme.Material3.DayNight.NoActionBar` instead of `Theme.MaterialComponents.DayNight.NoActionBar` when running `tauri android init`
88
+ - [`f654f470c`](https://www.github.com/tauri-apps/tauri/commit/f654f470c122e925e425424cea733f13d3306412) ([#15862](https://www.github.com/tauri-apps/tauri/pull/15862)) Update template to use `targetSdk = 37`
89
+ - [`cdaf7eab6`](https://www.github.com/tauri-apps/tauri/commit/cdaf7eab6c5fccc2a4812af18f58fd3530f3eedd) ([#15765](https://www.github.com/tauri-apps/tauri/pull/15765)) Clarify that the `tauri init` frontend commands run before `tauri dev` and `tauri build`, and can be left empty when they are not needed.
90
+ - [`d0f38df06`](https://www.github.com/tauri-apps/tauri/commit/d0f38df06a2f4406b388a336694aa18b3c6bf1a9) ([#15997](https://www.github.com/tauri-apps/tauri/pull/15997)) When stdin is not a terminal, `tauri init` now automatically skips prompts, avoiding IO errors in CI and scripts. This eliminates the need to pass `--ci` explicitly in non-interactive environments.
91
+ - [`ca160ad48`](https://www.github.com/tauri-apps/tauri/commit/ca160ad4808f477380cb0865a08a8ae781e37f85) ([#15895](https://www.github.com/tauri-apps/tauri/pull/15895)) `tauri build` now warns when `productName` is still set to the default `tauri-app`, since it names the generated bundles and is written into install paths and metadata that are expected to be unique to your application. The config documentation for `productName` now lists what the field controls on each platform, and `identifier`'s documentation notes that the default value is rejected.
92
+ - [`010f06bae`](https://www.github.com/tauri-apps/tauri/commit/010f06baecd499c41321da3130e20147c50025f7) ([#15737](https://www.github.com/tauri-apps/tauri/pull/15737)) Document the `TAURI_SIGNING_PRIVATE_KEY_PATH` environment variable and clarify that `TAURI_SIGNING_PRIVATE_KEY` accepts a string or a path for the `build` and `bundle` command but must be the literal key string for the `signer sign` command, both in `ENVIRONMENT_VARIABLES.md` and in the `signer generate` command output.
93
+
94
+ ### Bug Fixes
95
+
96
+ - [`9bad06b9f`](https://www.github.com/tauri-apps/tauri/commit/9bad06b9f61996faed1c33709f1b8dd196602793) ([#16096](https://www.github.com/tauri-apps/tauri/pull/16096)) `tauri capability new` and `tauri permission new` now accept an `--out` path to a file that does not exist yet, trim comma-separated prompt answers (so `fs:default, core:default` works), report invalid permissions as errors instead of panicking, and reject identifiers that are not valid file names (such as `../../x`), which previously let them write outside of the capabilities or permissions directory.
97
+ - [`9642b3087`](https://www.github.com/tauri-apps/tauri/commit/9642b30879eda8bde35fa3c7606718ca0d364f2e) ([#16117](https://www.github.com/tauri-apps/tauri/pull/16117)) `tauri add` now honors `--tag`, `--rev` and `--branch` for official plugins instead of silently installing the registry version, and rejects passing more than one of them. With npm, the JS package requirement is now `~<version>` like the other package managers, instead of `>=<version>` which allowed a later major version.
98
+ - [`cada1cd4f`](https://www.github.com/tauri-apps/tauri/commit/cada1cd4f3e59efb48b2c7a176d240846f55ad0d) ([#16105](https://www.github.com/tauri-apps/tauri/pull/16105)) Fix Android dev server port forwarding: `adb reverse --list` is now matched on the exact port (so `tcp:80` no longer matches `tcp:8080`), stale forwards on other connected devices are actually removed, and the forward verification gives up with a warning after a few attempts instead of retrying forever.
99
+ - [`d5bd04658`](https://www.github.com/tauri-apps/tauri/commit/d5bd046583d066024ba073840007f4476e52a5fb) ([#16111](https://www.github.com/tauri-apps/tauri/pull/16111)) Fix `bundle > android > debugApplicationIdSuffix` being written to the `signingConfigs` debug block instead of the `buildTypes` one, and keep the existing content of single-line debug blocks such as `getByName("debug") { isDebuggable = true }` instead of dropping it.
100
+ - [`ba17da2e5`](https://www.github.com/tauri-apps/tauri/commit/ba17da2e55184fe74990db64496b0d02e79cce09) ([#16101](https://www.github.com/tauri-apps/tauri/pull/16101)) `tauri icon` now generates 72x72 Android `hdpi` launcher icons (previously 49x49) and writes the Android launcher background color in `#RRGGBB`/`#AARRGGBB` notation instead of the raw CSS color string, which Android rejected or misread. Invalid SVG sources and `--png 0` now return an error instead of panicking.
101
+ - [`272842a57`](https://www.github.com/tauri-apps/tauri/commit/272842a571a56401649db7aaa93ea400561a1661) ([#16128](https://www.github.com/tauri-apps/tauri/pull/16128)) Fix error messages that printed placeholders such as `{t}` literally instead of the value, e.g. "Could not find an Android device matching {t}".
102
+ - [`10ad4e54e`](https://www.github.com/tauri-apps/tauri/commit/10ad4e54e2f1272ee7bb08418dc386058532a5e8) ([#16127](https://www.github.com/tauri-apps/tauri/pull/16127)) The Bash completions generated by `tauri completions` no longer replace the completions of `cargo`, `npm`, `pnpm`, `yarn`, `bun` and `deno`. They now define a `_tauri_cli` function registered only for the `tauri` and `cargo-tauri` commands. Generating completions when running the `cargo-tauri` binary directly no longer panics.
103
+ - [`0e4ded72a`](https://www.github.com/tauri-apps/tauri/commit/0e4ded72a6a617fa16dff196e7fbd3716997e66f) ([#16107](https://www.github.com/tauri-apps/tauri/pull/16107)) Fix binaries in `src/bin` and `src/main.rs` being left out of bundles when `Cargo.toml` declares a `[[bin]]` target without a `path`.
104
+ - [`8e0fa2e2f`](https://www.github.com/tauri-apps/tauri/commit/8e0fa2e2f8859cdd38dc07cfc24a1b012ef29fc3) ([#16097](https://www.github.com/tauri-apps/tauri/pull/16097)) Fix the bundler using the host target triple when `--target` is not passed but `build.target` is set in `.cargo/config.toml`. The CLI now also accepts `build.target` as an array and honors the `CARGO_BUILD_TARGET` environment variable.
105
+ - [`7bb0a5421`](https://www.github.com/tauri-apps/tauri/commit/7bb0a542179bd4ccb17e0baf0dca2c3b2f3f7721) ([#16120](https://www.github.com/tauri-apps/tauri/pull/16120)) Fix the Cargo.toml feature rewrite corrupting a string dependency version that has a trailing comment or uses single quotes (e.g. `tauri = "2" # pin` became `"2#pin"`). The version value is now kept as-is and the comment is preserved.
106
+ - [`e4630258e`](https://www.github.com/tauri-apps/tauri/commit/e4630258e3184fceb60e6c548a7ec61fb81f885d) ([#16114](https://www.github.com/tauri-apps/tauri/pull/16114)) Fix the CLI's working directory being left changed to the config directory when the Tauri configuration fails to parse, for example when `tauri dev` reloads an invalid config.
107
+ - [`1b91b7b7b`](https://www.github.com/tauri-apps/tauri/commit/1b91b7b7b3dad8b77bcaeadc6653250e04f0cb7b) ([#16102](https://www.github.com/tauri-apps/tauri/pull/16102)) `tauri info` now logs a warning when it cannot check the latest crate version on crates.io instead of silently ignoring the failure, and no longer panics if crates.io returns a version it cannot parse.
108
+ - [`1b91b7b7b`](https://www.github.com/tauri-apps/tauri/commit/1b91b7b7b3dad8b77bcaeadc6653250e04f0cb7b) ([#16102](https://www.github.com/tauri-apps/tauri/pull/16102)) `tauri info` now lists every locked version of a Rust crate when `Cargo.lock` contains more than one, and no longer panics when the crates.io response cannot be parsed.
109
+ - [`6507d0b8b`](https://www.github.com/tauri-apps/tauri/commit/6507d0b8b360a41615139619eb39680e60df7732) ([#16124](https://www.github.com/tauri-apps/tauri/pull/16124)) `tauri dev` now reports an error instead of panicking when the `beforeDevCommand` cannot be spawned or the `devUrl` host cannot be resolved, and no longer risks stopping the `beforeDevCommand` process tree twice when Ctrl+C and the app exit race.
110
+ - [`c1ea96ad6`](https://www.github.com/tauri-apps/tauri/commit/c1ea96ad6b433524c5cb570f55bbbe1fd72cca1e) ([#16110](https://www.github.com/tauri-apps/tauri/pull/16110)) Fix `tauri dev` not reacting to the app exiting when a process spawned by the app kept its stderr open, and stop keeping the whole app stderr output in memory. Also fix command output capture that could return empty output when the command finished before its output was read.
111
+ - [`d61fbdc3e`](https://www.github.com/tauri-apps/tauri/commit/d61fbdc3e825749261c76b7a37454dd3c4483619) ([#16109](https://www.github.com/tauri-apps/tauri/pull/16109)) Fix Cargo.toml feature injection and the v1 migration only updating either `[dependencies]` or `[target.'cfg(..)'.dependencies]`, whichever came first in the file. Both the main and all target-specific dependency tables are now updated.
112
+ - [`5d995ed35`](https://www.github.com/tauri-apps/tauri/commit/5d995ed35b029cecd780fdbe614dc6023a89b81b) ([#16017](https://www.github.com/tauri-apps/tauri/pull/16017)) Normalize `gen/android/gradlew` CRLF line endings to LF on all host platforms, not only Unix. A `gradlew` checked out with CRLF broke `sh ./gradlew` on Windows hosts using Git Bash. The rewrite only runs when a CRLF is actually present. A failure to rewrite aborts on Unix, where the script is executed directly; on Windows the CLI invokes `gradlew.bat`, so failures there only warn.
113
+ - [`6d943c420`](https://www.github.com/tauri-apps/tauri/commit/6d943c420454e75636af968b435efb9167818d22) ([#16065](https://www.github.com/tauri-apps/tauri/pull/16065)) Fix the `tauri capability new` command description, which said "Create a new permission file", and the `--skip-stapling` help text on `tauri build` and `tauri bundle`, whose first line described the opposite of what the flag does.
114
+ - [`b8be924d3`](https://www.github.com/tauri-apps/tauri/commit/b8be924d39c87eaecb9ba6f893e1a7be94d7bd68) ([#16106](https://www.github.com/tauri-apps/tauri/pull/16106)) `tauri init` no longer panics when the app name, window title, frontend dist, dev URL or before dev/build commands contain quotes or backslashes (e.g. `-D ..\dist` or `vite --host "0.0.0.0"`); the values are now JSON-escaped in the generated `tauri.conf.json`.
115
+ - [`b9b32a259`](https://www.github.com/tauri-apps/tauri/commit/b9b32a259fb00524808e84b4da0f7904a51be06c) ([#16108](https://www.github.com/tauri-apps/tauri/pull/16108)) Fix `PRODUCT_BUNDLE_IDENTIFIER` in the iOS Xcode project being set to the raw `identifier` (with underscores) instead of the sanitized iOS bundle identifier used by the Xcode project template and the export options provisioning profiles.
116
+ - [`4f51a2f06`](https://www.github.com/tauri-apps/tauri/commit/4f51a2f06248f231fc6a9160c95c026634356ba5) ([#16115](https://www.github.com/tauri-apps/tauri/pull/16115)) Fix `tauri ios run --features` being ignored, and `tauri ios dev --release` still building the app in debug mode.
117
+ - [`59e077457`](https://www.github.com/tauri-apps/tauri/commit/59e077457ac87ffd43db4c557ca2987d2fa6d37e) ([#16075](https://www.github.com/tauri-apps/tauri/pull/16075)) `tauri ios build` for a simulator target no longer fails with "failed to rename app: Directory not empty" when the output `.app` from a previous build exists.
118
+ - [`fe1aa30d2`](https://www.github.com/tauri-apps/tauri/commit/fe1aa30d2b1743325cdd882fe36604daf62c2440) ([#16113](https://www.github.com/tauri-apps/tauri/pull/16113)) Quote the Tauri CLI path and the Xcode variables in the iOS "Build Rust Code" build phase, fixing builds when Xcode or the CLI is installed in a path containing spaces (requires regenerating the Xcode project with `tauri ios init`). Also fixes `CXXFLAGS` not being set for iOS targets in `tauri ios xcode-script`.
119
+ - [`aa0a801c3`](https://www.github.com/tauri-apps/tauri/commit/aa0a801c3acb6cc1f9d0afbae6cbfa144a5ea7fb) ([#16116](https://www.github.com/tauri-apps/tauri/pull/16116)) Fix Java version detection for the Android Java/Gradle compatibility warning when `JAVA_HOME` is not set: the `java` binary on `PATH` is now resolved through symlinks (e.g. Linux alternatives and Homebrew), and on macOS the `/usr/bin/java` stub falls back to `/usr/libexec/java_home`.
120
+ - [`1aafaa4e3`](https://www.github.com/tauri-apps/tauri/commit/1aafaa4e3cafc779d4d825c95c3604a7da661092) ([#16103](https://www.github.com/tauri-apps/tauri/pull/16103)) When rewriting a localhost `devUrl` to the network address for mobile development, the query string and fragment are now preserved, and the IPv6 loopback (`[::1]`) and unspecified (`[::]`) addresses are now treated as localhost.
121
+ - [`022932dd5`](https://www.github.com/tauri-apps/tauri/commit/022932dd596e38d27a0bafebf26ea9df2ec2cff3) ([#16123](https://www.github.com/tauri-apps/tauri/pull/16123)) Fix iOS Xcode project synchronization corrupting `project.pbxproj` when several build settings were added to the same configuration, when an added setting was changed again, or when a multi-line setting was overwritten. Product names, signing identities and other values written to the project are now properly escaped.
122
+ - [`a4099d819`](https://www.github.com/tauri-apps/tauri/commit/a4099d819bdc33385adcc11b7830fc5fdda410d2) ([#16098](https://www.github.com/tauri-apps/tauri/pull/16098)) `tauri permission add` (and `tauri add`) no longer overwrites an existing `capabilities/desktop.json` or `capabilities/mobile.json` when adding a desktop-only or mobile-only plugin permission and no platform-restricted capability exists; the new capability now gets an unused file name and identifier (e.g. `desktop-2.json`). An explicitly passed capability is now used even if its platforms do not match the plugin, with a warning, instead of being silently ignored.
123
+ - [`e49d1b474`](https://www.github.com/tauri-apps/tauri/commit/e49d1b47429acaf34de9e9edc251f71163990783) ([#16100](https://www.github.com/tauri-apps/tauri/pull/16100)) `tauri permission rm <plugin>:*` and `tauri remove` no longer strip unrelated permissions whose identifier merely contains the plugin name (e.g. `tauri remove os` removing `positioner:default`). Local permission files are now looked up in the Tauri directory, like `tauri permission new`, and an unparsable permission file is skipped with a warning instead of aborting the command.
124
+ - [`efa82f5ed`](https://www.github.com/tauri-apps/tauri/commit/efa82f5ed989f84b076b6ee6d2f0e1e6dd0aadbf) ([#16125](https://www.github.com/tauri-apps/tauri/pull/16125)) Fix plugin scaffolding for names like `my-plugin`: the default Android package ID now uses a snake_case segment (`com.plugin.my_plugin`) and user-provided IDs are validated, iOS Xcode folders use the same kebab-case name as the project file, and the `plugin ios init`/`plugin android init` code snippets now match the generated bindings and the `setup(|app, api| ..)` API. `plugin init` into a non-empty directory no longer creates a `permissions` folder after skipping the template.
125
+ - [`db6804d80`](https://www.github.com/tauri-apps/tauri/commit/db6804d80223aabc6b338e94d192a5ad6dd6220b) ([#16126](https://www.github.com/tauri-apps/tauri/pull/16126)) Fix `--release` being added to the cargo command when a custom profile is passed as `--profile=<name>`, which made cargo reject the build.
126
+ - [`8310461f6`](https://www.github.com/tauri-apps/tauri/commit/8310461f6453ce478d2092a4744d42e3468e0bb0) ([#16104](https://www.github.com/tauri-apps/tauri/pull/16104)) Fix `tauri init` and `tauri info` detecting SvelteKit projects as plain Svelte; `tauri init` suggested the wrong dev server URL and frontend dist directory.
127
+ - [`eaf96690d`](https://www.github.com/tauri-apps/tauri/commit/eaf96690db2439445fe16da24031bf3294ada605) ([#15804](https://www.github.com/tauri-apps/tauri/pull/15804)) On Linux, do not bundle xdg-open and xdg-utils in the AppImage anymore. This rarely worked and usually requires host system support anyway.
128
+ - [`2b7c1f8b6`](https://www.github.com/tauri-apps/tauri/commit/2b7c1f8b63619c6f4c16380d0c4a3358e694fb11) ([#16003](https://www.github.com/tauri-apps/tauri/pull/16003)) Fix `tauri add` / `tauri remove` installing npm plugin packages into `src-tauri` instead of the frontend directory.
129
+ - [`c735ba32b`](https://www.github.com/tauri-apps/tauri/commit/c735ba32b36d505cbf9eabfb4a33005ca31edbdd) ([#15241](https://www.github.com/tauri-apps/tauri/pull/15241)) Fix broken child window icons in Task Manager, you'll need to re-run `tauri icon` to generate the fixed icons
130
+ - [`adf5acf6f`](https://www.github.com/tauri-apps/tauri/commit/adf5acf6fbc0ef26de6b1eb30c47bb701c256954) ([#15651](https://www.github.com/tauri-apps/tauri/pull/15651)) Fix MSI bundling when an external binary filename starts with a digit.
131
+ - [`11012a13f`](https://www.github.com/tauri-apps/tauri/commit/11012a13f55ab55ec5ed12ca3ac95338ae1731c3) ([#15681](https://www.github.com/tauri-apps/tauri/pull/15681)) Fix WiX bundler doesn't respect the resource's target file name.
132
+ - [`59e077457`](https://www.github.com/tauri-apps/tauri/commit/59e077457ac87ffd43db4c557ca2987d2fa6d37e) ([#16075](https://www.github.com/tauri-apps/tauri/pull/16075)) Detect pnpm from `npm_config_user_agent` when generating the mobile projects. pnpm's native binary (pnpm 11+) runs package scripts without setting `PNPM_PACKAGE_NAME`, and when installed through corepack the binary is named `pnpm-native`, so `tauri android init` recorded `pnpm-native` as the command for Gradle to run and the Android build failed with "A problem occurred starting process 'command 'pnpm-native''".
133
+ - [`6a298ee12`](https://www.github.com/tauri-apps/tauri/commit/6a298ee12e7ffde115175d43ac63a2fdcba51c3e) ([#15713](https://www.github.com/tauri-apps/tauri/pull/15713)) Fix `tauri info` reporting the Rust-only plugins (`localhost`, `persisted-scope` and `single-instance`) as missing their `@tauri-apps/plugin-*` JavaScript package, which is never published for those plugins.
134
+ - [`33b3ea582`](https://www.github.com/tauri-apps/tauri/commit/33b3ea582340ce8fe799929472595789319d0826) The bundled `vswhere.exe` is now written to a new, uniquely named temporary file on each use and removed afterwards, instead of running any existing `%TEMP%\vswhere.exe`.
135
+
136
+ ### What's Changed
137
+
138
+ - [`2e6e33c85`](https://www.github.com/tauri-apps/tauri/commit/2e6e33c8501c66c9a49aad861048d39345cfb26f) ([#16029](https://www.github.com/tauri-apps/tauri/pull/16029)) Moved to edition 2024 for the `tauri init`/`tauri plugin init` templates
139
+ - [`ce3f13b91`](https://www.github.com/tauri-apps/tauri/commit/ce3f13b91a75cb723f229f56a3e82eb5f2d3f644) ([#15887](https://www.github.com/tauri-apps/tauri/pull/15887)) Lock unstable tauri crates to minor versions.
140
+
141
+ ### Security fixes
142
+
143
+ - [`98918df64`](https://www.github.com/tauri-apps/tauri/commit/98918df6416f7ac6849962141a41bbd210131067) ([#16112](https://www.github.com/tauri-apps/tauri/pull/16112)) `tauri add` no longer installs the npm package `tauri-plugin-<name>-api` for community plugins. npm and crates.io are separate namespaces, so that package may be unowned or squatted; the CLI now asks you to install the plugin's JavaScript bindings yourself. `tauri remove` only removes the plugin's JS package when `package.json` lists it, and a failure there no longer skips the capability cleanup.
144
+ - [`cc9d522c6`](https://www.github.com/tauri-apps/tauri/commit/cc9d522c64329b8dab84ecbd38c76928ad31cb43) ([#16095](https://www.github.com/tauri-apps/tauri/pull/16095)) The built-in dev server now rejects requests whose `Host` header is not the address it serves on, which blocks DNS rebinding attacks, and rejects cross-site `Origin`s on its reload WebSocket. The `index.html` fallback now goes through the same path scope check as other files, and the reload WebSocket no longer closes when the client sends a message.
145
+ - [`dacddfe9f`](https://www.github.com/tauri-apps/tauri/commit/dacddfe9ff1f28b53e2c0324498e3a666a8041fa) ([#16094](https://www.github.com/tauri-apps/tauri/pull/16094)) The CLI no longer writes its default ignore rules to shared files in the system temporary directory (`.gitignore` and `.tauri/.gitignore`) and reads them back, which let other local users change which files the project lookup and the dev watcher skip. The rules are now applied in memory. `TAURI_CLI_WATCHER_IGNORE_FILENAME` is now consistently treated as an ignore file name looked up in each directory, as documented.
146
+ - [`fdd56da19`](https://www.github.com/tauri-apps/tauri/commit/fdd56da19e40962cb2db613a0b87a38a21f571e4) ([#16099](https://www.github.com/tauri-apps/tauri/pull/16099)) Secure the local server that `tauri android|ios dev|build` uses to pass options to the Android Studio and Xcode build scripts: requests now need a random per-session token, WebSocket connections from web pages (with an `Origin` header) are rejected, and variables whose name contains `TOKEN`, `PASSWORD`, `SECRET` or `CREDENTIAL` are no longer sent. The connection details are now written with owner-only permissions to `gen/<android|apple>/.tauri/cli-options-server.json` (instead of the shared temp directory) and removed when the command exits. The IDE build scripts now report a clear error when the Tauri CLI command is not running.
147
+ - [`ff7cd8d86`](https://www.github.com/tauri-apps/tauri/commit/ff7cd8d863061aaa1c5932062b071db6b17af36e) ([#16118](https://www.github.com/tauri-apps/tauri/pull/16118)) `tauri signer generate --write-keys` now creates the private key with owner-only permissions (0600) on Unix and refuses to overwrite either the private or the public key file without `--force`. Updater signing now rejects file names containing tabs or newlines (which would corrupt the signature's trusted comment) and assumes an empty password instead of prompting when no password is given and stdin is not a terminal. `tauri signer` reports errors instead of panicking.
148
+ - [`51aa20388`](https://www.github.com/tauri-apps/tauri/commit/51aa20388e01c9d03f33992647b14dcf7800c540) ([#16119](https://www.github.com/tauri-apps/tauri/pull/16119)) On Windows, package manager commands (`npm`, `pnpm`, `yarn`, `bun`, `deno`, `node`) are now executed directly instead of through `cmd /c`, so arguments such as `@tauri-apps/plugin-fs@>=2` are escaped properly and can no longer be interpreted as shell redirections or command separators.
149
+
150
+ ### Dependencies
151
+
152
+ - Upgraded to `tauri-cli@2.12.0`
153
+ - [`e2e585ad1`](https://www.github.com/tauri-apps/tauri/commit/e2e585ad1196c9572f86ef39aae01ef4c3b1a762) ([#15828](https://www.github.com/tauri-apps/tauri/pull/15828)) On Android, fix missing `consumer-rules.pro` file in the template.
154
+
155
+ **IMPORTANT**: For plugin authors, update your `build.gradle.kts` file to remove the
156
+
157
+ ```kotlin
158
+ buildTypes {
159
+ release {
160
+ isMinifyEnabled = false
161
+ proguardFiles(
162
+ getDefaultProguardFile("proguard-android-optimize.txt"),
163
+ "proguard-rules.pro"
164
+ )
165
+ }
166
+ }
167
+ ```
168
+
169
+ section and rename your `proguard-rules.pro` to `consumer-rules.pro` to match the `consumerProguardFiles("consumer-rules.pro")` in the template.
170
+ - [`e2e585ad1`](https://www.github.com/tauri-apps/tauri/commit/e2e585ad1196c9572f86ef39aae01ef4c3b1a762) ([#15828](https://www.github.com/tauri-apps/tauri/pull/15828)) On Android, updated the template to use Gradle v9.6.1 (`com.android.tools.build:gradle` v9.3.1) and Kotlin v2.2. Use `tauri android init` to apply the change.
171
+ - [`9e9a54dea`](https://www.github.com/tauri-apps/tauri/commit/9e9a54dea26ae66de63800cabbccf980902a1cd3) ([#15890](https://www.github.com/tauri-apps/tauri/pull/15890)) Update the generated iOS Xcode project to build with Xcode 27. The scenes lifecycle is **not** enabled by default: to opt in, add the `UIApplicationSceneManifest` key to your `src-tauri/Info.ios.plist`.
172
+ - [`b6660a041`](https://www.github.com/tauri-apps/tauri/commit/b6660a041db44729893dae7991a9be61cf8c2ed5) ([#15954](https://www.github.com/tauri-apps/tauri/pull/15954)) Update typescript to v7 in `tauri plugin init` template. Also fixes the default `rootDir` in the template `tsconfig.json`
173
+ - [`9e9a54dea`](https://www.github.com/tauri-apps/tauri/commit/9e9a54dea26ae66de63800cabbccf980902a1cd3) ([#15890](https://www.github.com/tauri-apps/tauri/pull/15890)) Update cargo-mobile2 and change the default minimum iOS version to 15.0 to support Xcode 27.
174
+
37
175
  ## \[2.11.4]
38
176
 
39
177
  ### Bug Fixes
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://schema.tauri.app/config/3.0.0-alpha.1",
2
+ "$id": "https://schema.tauri.app/config/3.0.0-alpha.3",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
4
  "title": "Config",
5
5
  "description": "The Tauri configuration object.\nIt is read from a file where you can define your frontend assets,\nconfigure the bundler and define a tray icon.\n\nThe configuration file is generated by the\n[`tauri init`](https://v2.tauri.app/reference/cli/#init) command that lives in\nyour Tauri application source directory (src-tauri).\n\nOnce generated, you may modify it at will to customize your Tauri application.\n\n## File Formats\n\nBy default, the configuration is defined as a JSON file named `tauri.conf.json`.\n\nTauri also supports JSON5 and TOML files via the `config-json5` and `config-toml` Cargo features, respectively.\nThe JSON5 file name must be either `tauri.conf.json` or `tauri.conf.json5`.\nThe TOML file name is `Tauri.toml`.\n\n## Platform-Specific Configuration\n\nIn addition to the default configuration file, Tauri can\nread a platform-specific configuration from `tauri.linux.conf.json`,\n`tauri.windows.conf.json`, `tauri.macos.conf.json`, `tauri.android.conf.json` and `tauri.ios.conf.json`\n(or `Tauri.linux.toml`, `Tauri.windows.toml`, `Tauri.macos.toml`, `Tauri.android.toml` and `Tauri.ios.toml` if the `Tauri.toml` format is used),\nwhich gets merged with the main configuration object.\n\n## Configuration Structure\n\nThe configuration is composed of the following objects:\n\n- [`app`](#appconfig): The Tauri configuration\n- [`build`](#buildconfig): The build configuration\n- [`bundle`](#bundleconfig): The bundle configurations\n- [`plugins`](#pluginconfig): The plugins configuration\n\nExample tauri.config.json file:\n\n```json\n{\n \"productName\": \"tauri-app\",\n \"version\": \"0.1.0\",\n \"build\": {\n \"beforeBuildCommand\": \"\",\n \"beforeDevCommand\": \"\",\n \"devUrl\": \"http://localhost:3000\",\n \"frontendDist\": \"../dist\"\n },\n \"app\": {\n \"security\": {\n \"csp\": null\n },\n \"windows\": [\n {\n \"fullscreen\": false,\n \"height\": 600,\n \"resizable\": true,\n \"title\": \"Tauri App\",\n \"width\": 800\n }\n ]\n },\n \"bundle\": {},\n \"plugins\": {}\n}\n```",
@@ -222,9 +222,20 @@
222
222
  "default": false
223
223
  },
224
224
  "enableGTKAppId": {
225
- "description": "If set to true \"identifier\" will be set as GTK app ID (on systems that use GTK).",
225
+ "description": "Whether the application `identifier` is used as the GTK application ID on systems that use GTK.\n\nSetting the GTK application ID lets the desktop environment associate the app's windows with\nits `.desktop` entry of the same name, which is what makes Wayland compositors and GNOME show\nthe correct icon and application name, and group the windows in the dock or taskbar.\n\nDefaults to `false`, because registering an application ID also makes GTK register the\napplication on the session bus under that ID, which prevents running more than one instance\nof the app at the same time.\n\n## Platform-specific\n\n- **Linux / FreeBSD / DragonFly / NetBSD / OpenBSD**: The identifier must be a valid GTK\n application ID.\n- **Windows / macOS / Android / iOS**: Unsupported.",
226
226
  "type": "boolean",
227
227
  "default": false
228
+ },
229
+ "appDirectoriesOverride": {
230
+ "description": "Overrides the directories returned by the `app_*_dir` path APIs (`app_config_dir`, `app_data_dir`,\n`app_local_data_dir`, `app_cache_dir` and `app_log_dir`) and the matching `$APPCONFIG`, `$APPDATA`,\n`$APPLOCALDATA`, `$APPCACHE` and `$APPLOG` base directory variables.\n\nThis is useful for portable apps that keep all of their data next to the executable,\nand for apps that want their app directories in a location they choose, such as `$DOCUMENT/my-app`.\nEverything that resolves paths through these APIs follows the override, including Tauri itself\n(the default webview data directory on Windows and Linux) and plugins,\nso the storage locations do not need to be configured one by one.\nThe only exception is a window's `dataDirectory` config, which is not affected.\n\nIt can also isolate the data of a development build from an installed version of the app,\nthough a distinct `identifier` for development builds achieves that while keeping the production directory layout.\n\nThe value is either a single path used as the root of every app directory\n(config, data and local data resolve to the root itself, cache to `<root>/caches` and log to `<root>/logs`),\nor an object that overrides individual directories (`config`, `data`, `localData`, `cache` and `log`),\neach resolving to exactly the configured path. Directories that are not listed in the object keep their default location.\n\nEach path is resolved as follows:\n\n- A path starting with a base directory variable is resolved relative to that directory.\n The supported variables are `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`,\n `$DOWNLOAD`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$TEMP` and `$VIDEO`.\n `..` components are kept, so `$DATA/../my-app` refers to a sibling of the data directory.\n- An absolute path is used as is.\n- Any other path is resolved relative to the directory containing the executable,\n which must be writable, see the platform-specific notes below.\n\n## Examples\n\nKeep all data in an `app-data` folder next to the executable, for a portable build:\n\n```json\n{\n \"app\": {\n \"appDirectoriesOverride\": \"./app-data\"\n }\n}\n```\n\nOnly move the logs and the cache:\n\n```json\n{\n \"app\": {\n \"appDirectoriesOverride\": {\n \"log\": \"$DATA/my-app/logs\",\n \"cache\": \"$CACHE/my-app\"\n }\n }\n}\n```\n\nSet the override at runtime, for instance from an environment variable, a command line flag\nor a directory picked by the user, by modifying the config returned by `tauri::generate_context!()`\nbefore building the app:\n\n```rust\nuse tauri::utils::config::AppDirectoriesOverride;\n\nfn main() {\n let mut context = tauri::generate_context!();\n\n if let Ok(data_dir) = std::env::var(\"MY_APP_DATA_DIR\") {\n context.config_mut().app.app_directories_override =\n Some(AppDirectoriesOverride::Root(data_dir.into()));\n }\n\n tauri::Builder::default()\n .run(context)\n .expect(\"error while running tauri application\");\n}\n```\n\n## Security\n\nScopes and permissions that use the `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE` and `$APPLOG`\nvariables follow the override, so the configured paths must be directories dedicated to the app.\nA single root is used as is for the config, data and local data directories, so a root that is not dedicated\nto the app, such as `\"./\"` or `\"$DOCUMENT\"`, extends those scopes to everything it contains.\nWith `\"./\"`, `fs:default` (which allows reading the app directories recursively) lets the webview read\nevery file next to the executable, including anything else in the folder the app was run from,\nsuch as the downloads folder. If the app also grants write access to an app directory, a compromised webview\n(e.g. through XSS) can replace files next to the executable, such as dropping a DLL that Windows loads\nfrom the executable's directory on the next launch, leading to code execution.\nAlways point the override to a subfolder owned by the app, such as `\"./app-data\"` or `\"$DOCUMENT/my-app\"`.\n\n## Platform-specific\n\nA path relative to the executable only works where the executable's directory is writable:\nportable builds, `tauri dev` builds in the `target` directory and the cases listed below.\nEverywhere else every write to an app directory fails at runtime, so installed apps should use\na base directory variable or an absolute path instead. Unless every distribution of the app is portable,\nkeep relative paths out of the shared configuration and apply them to the portable build flavor only,\nfor instance with the CLI's `--config` flag, which accepts a JSON file or an inline JSON string:\n\n```sh\ntauri build --config '{ \"app\": { \"appDirectoriesOverride\": \"./app-data\" } }'\n```\n\n- **Linux**: Relative paths only work for AppImages, where they are resolved relative to the AppImage file,\n as long as it is kept in a writable directory. `.deb` and `.rpm` packages install the executable to `/usr/bin`.\n- **macOS**: Relative paths are resolved next to the `.app` bundle. This does not work for installed apps,\n since `/Applications` is not writable for standard users, nor for bundles downloaded from the internet,\n which run from a random read-only location (App Translocation) until the user moves them out of the quarantined folder.\n- **Windows**: Relative paths also work for per-user NSIS installers,\n but not for per-machine installers in `Program Files`.\n- **Android / iOS**: Relative paths are not supported, since there is no writable directory next to the executable.\n Use a base directory variable or an absolute path instead. `$DESKTOP` is not available on Android.",
231
+ "anyOf": [
232
+ {
233
+ "$ref": "#/definitions/AppDirectoriesOverride"
234
+ },
235
+ {
236
+ "type": "null"
237
+ }
238
+ ]
228
239
  }
229
240
  },
230
241
  "additionalProperties": false
@@ -381,7 +392,7 @@
381
392
  "default": true
382
393
  },
383
394
  "transparent": {
384
- "description": "Whether the window is transparent or not.\n\nNote that on `macOS` this requires the `macos-private-api` feature flag, enabled under `tauri > macOSPrivateApi`.\nWARNING: Using private APIs on `macOS` prevents your application from being accepted to the `App Store`.\n\nOn Windows, using `noRedirectionBitmap` can help avoid a white flash when creating a transparent window.",
395
+ "description": "Whether the window is transparent or not.\n\n## Platform-specific\n\n- **macOS**: Requires the `macos-private-api` Cargo feature, which is enabled by setting\n `app > macOSPrivateApi` to `true` in the configuration file.\n **WARNING:** Using private APIs on macOS prevents your application from being accepted to the App Store.\n If you only need a translucent background, use `windowEffects` instead, which relies on public APIs.\n- **Windows**: Using `noRedirectionBitmap` can help avoid a white flash when creating a transparent window.\n- **CEF runtime**: The window can be transparent but the webview cannot: a windowed Chromium browser paints an opaque background. The runtime logs a warning.",
385
396
  "type": "boolean",
386
397
  "default": false
387
398
  },
@@ -486,7 +497,7 @@
486
497
  ]
487
498
  },
488
499
  "additionalBrowserArgs": {
489
- "description": "Defines additional browser arguments on Windows.\n\n## Warning\n\nWebview instances with different browser arguments must also have different [data directories](Self::data_directory).\n\nBy default wry passes `--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection`\nso if you set this, you also need to disable these components by yourself if you want.",
500
+ "description": "Defines additional browser arguments on Windows.\n\n## Platform-specific\n\n- **CEF runtime**: Unsupported. Chromium's command line is per process, not per webview;\n pass switches through `Cef::command_line_arg` in Rust instead.\n\n## Warning\n\nWebview instances with different browser arguments must also have different [data directories](Self::data_directory).\n\nBy default wry passes `--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection`\nso if you set this, you also need to disable these components by yourself if you want.",
490
501
  "type": [
491
502
  "string",
492
503
  "null"
@@ -534,7 +545,7 @@
534
545
  "default": false
535
546
  },
536
547
  "browserExtensionsEnabled": {
537
- "description": "Whether browser extensions can be installed for the webview process\n\n## Platform-specific:\n\n- **Windows**: Enables the WebView2 environment's [`AreBrowserExtensionsEnabled`](https://learn.microsoft.com/en-us/microsoft-edge/webview2/reference/winrt/microsoft_web_webview2_core/corewebview2environmentoptions?view=webview2-winrt-1.0.2739.15#arebrowserextensionsenabled)\n- **MacOS / Linux / iOS / Android** - Unsupported.",
548
+ "description": "Whether browser extensions can be installed for the webview process\n\n## Platform-specific:\n\n- **Windows**: Enables the WebView2 environment's [`AreBrowserExtensionsEnabled`](https://learn.microsoft.com/en-us/microsoft-edge/webview2/reference/winrt/microsoft_web_webview2_core/corewebview2environmentoptions?view=webview2-winrt-1.0.2739.15#arebrowserextensionsenabled)\n- **MacOS / Linux / iOS / Android** - Unsupported.\n- **CEF runtime**: Unsupported. CEF removed its extension loading API; the runtime logs a warning.",
538
549
  "type": "boolean",
539
550
  "default": false
540
551
  },
@@ -562,7 +573,7 @@
562
573
  ]
563
574
  },
564
575
  "backgroundThrottling": {
565
- "description": "Change the default background throttling behaviour.\n\nBy default, browsers use a suspend policy that will throttle timers and even unload\nthe whole tab (view) to free resources after roughly 5 minutes when a view became\nminimized or hidden. This will pause all tasks until the documents visibility state\nchanges back from hidden to visible by bringing the view back to the foreground.\n\n## Platform-specific\n\n- **Linux / Windows / Android**: Unsupported. Workarounds like a pending WebLock transaction might suffice.\n- **iOS**: Supported since version 17.0+.\n- **macOS**: Supported since version 14.0+.\n\nsee <https://github.com/tauri-apps/tauri/issues/5250#issuecomment-2569380578>",
576
+ "description": "Change the default background throttling behaviour.\n\nBy default, browsers use a suspend policy that will throttle timers and even unload\nthe whole tab (view) to free resources after roughly 5 minutes when a view became\nminimized or hidden. This will pause all tasks until the documents visibility state\nchanges back from hidden to visible by bringing the view back to the foreground.\n\n## Platform-specific\n\n- **Linux / Windows / Android**: Unsupported. Workarounds like a pending WebLock transaction might suffice.\n- **iOS**: Supported since version 17.0+.\n- **macOS**: Supported since version 14.0+.\n- **CEF runtime**: Unsupported per webview. Chromium throttles hidden pages process-wide; pass `--disable-background-timer-throttling` through `Cef::command_line_arg` to turn that off for every webview.\n\nsee <https://github.com/tauri-apps/tauri/issues/5250#issuecomment-2569380578>",
566
577
  "anyOf": [
567
578
  {
568
579
  "$ref": "#/definitions/BackgroundThrottlingPolicy"
@@ -578,7 +589,7 @@
578
589
  "default": false
579
590
  },
580
591
  "allowLinkPreview": {
581
- "description": "on macOS and iOS there is a link preview on long pressing links, this is enabled by default.\nsee https://docs.rs/objc2-web-kit/latest/objc2_web_kit/struct.WKWebView.html#method.allowsLinkPreview",
592
+ "description": "on macOS and iOS there is a link preview on long pressing links, this is enabled by default.\nsee https://docs.rs/objc2-web-kit/latest/objc2_web_kit/struct.WKWebView.html#method.allowsLinkPreview\n\nNot applicable on the CEF runtime, Chromium has no link previews.",
582
593
  "type": "boolean",
583
594
  "default": true
584
595
  },
@@ -588,14 +599,14 @@
588
599
  "default": false
589
600
  },
590
601
  "dataDirectory": {
591
- "description": "Set a custom path for the webview's data directory (localStorage, cache, etc.) **relative to [`appDataDir()`]/${label}**.\n\nTo set absolute paths, use [`WebviewWindowBuilder::data_directory`](https://docs.rs/tauri/2/tauri/webview/struct.WebviewWindowBuilder.html#method.data_directory)\n\n#### Platform-specific:\n\n- **Windows**: WebViews with different values for settings like `additionalBrowserArgs`, `browserExtensionsEnabled` or `scrollBarStyle` must have different data directories.\n- **macOS / iOS**: Unsupported, use `dataStoreIdentifier` instead.\n- **Android**: Unsupported.",
602
+ "description": "Set a custom path for the webview's data directory (localStorage, cache, etc.),\n**relative to the local data directory (`localDataDir()`), followed by the window label**.\n\nTo set absolute paths, use [`WebviewWindowBuilder::data_directory`](https://docs.rs/tauri/2/tauri/webview/struct.WebviewWindowBuilder.html#method.data_directory)\n\nThis path is not affected by the `app > appDirectoriesOverride` config.\nTo keep the webview data in an overridden directory, leave this unset (the webview then uses the app local data directory)\nor resolve a path from `app.path().app_local_data_dir()` and set it with `WebviewWindowBuilder::data_directory`.\n\n#### Platform-specific:\n\n- **Windows**: WebViews with different values for settings like `additionalBrowserArgs`, `browserExtensionsEnabled` or `scrollBarStyle` must have different data directories.\n- **macOS / iOS**: Unsupported, use `dataStoreIdentifier` instead.\n- **Android**: Unsupported.",
592
603
  "type": [
593
604
  "string",
594
605
  "null"
595
606
  ]
596
607
  },
597
608
  "dataStoreIdentifier": {
598
- "description": "Initialize the WebView with a custom data store identifier. This can be seen as a replacement for `dataDirectory` which is unavailable in WKWebView.\nSee https://developer.apple.com/documentation/webkit/wkwebsitedatastore/init(foridentifier:)?language=objc\n\nThe array must contain 16 u8 numbers.\n\n#### Platform-specific:\n\n- **iOS**: Supported since version 17.0+.\n- **macOS**: Supported since version 14.0+.\n- **Windows / Linux / Android**: Unsupported.",
609
+ "description": "Initialize the WebView with a custom data store identifier. This can be seen as a replacement for `dataDirectory` which is unavailable in WKWebView.\n\nSee <https://developer.apple.com/documentation/webkit/wkwebsitedatastore/init(foridentifier:)?language=objc>\n\nThe array must contain 16 u8 numbers.\n\n#### Platform-specific:\n\n- **iOS**: Supported since version 17.0+.\n- **macOS**: Supported since version 14.0+.\n- **Windows / Linux / Android**: Unsupported.\n- **CEF runtime**: Supported. The identifier names a profile directory under the runtime's cache path, the same isolation `dataDirectory` gives; `dataDirectory` wins when both are set.",
599
610
  "type": [
600
611
  "array",
601
612
  "null"
@@ -610,7 +621,7 @@
610
621
  "maxItems": 16
611
622
  },
612
623
  "scrollBarStyle": {
613
- "description": "Specifies the native scrollbar style to use with the webview.\nCSS styles that modify the scrollbar are applied on top of the native appearance configured here.\n\nDefaults to `default`, which is the browser default.\n\n## Platform-specific\n\n- **Windows**:\n - `fluentOverlay` requires WebView2 Runtime version 125.0.2535.41 or higher,\n and does nothing on older versions.\n - This option must be given the same value for all webviews that target the same data directory.\n- **Linux / Android / iOS / macOS**: Unsupported. Only supports `Default` and performs no operation.",
624
+ "description": "Specifies the native scrollbar style to use with the webview.\nCSS styles that modify the scrollbar are applied on top of the native appearance configured here.\n\nDefaults to `default`, which is the browser default.\n\n## Platform-specific\n\n- **Windows**:\n - `fluentOverlay` requires WebView2 Runtime version 125.0.2535.41 or higher,\n and does nothing on older versions.\n - This option must be given the same value for all webviews that target the same data directory.\n- **Linux / Android / iOS / macOS**: Unsupported. Only supports `Default` and performs no operation.\n- **CEF runtime**: Unsupported per webview. Overlay scrollbars are a process-wide Chromium feature; enable them for every webview with `Cef::enable_features([\"OverlayScrollbar\"])`.",
614
625
  "default": "default",
615
626
  "allOf": [
616
627
  {
@@ -619,7 +630,7 @@
619
630
  ]
620
631
  },
621
632
  "limitNavigationsToAppBoundDomains": {
622
- "description": "Whether to limit navigations to App-Bound Domains. This is necessary to\nenable Service Workers on iOS according to\n[StackOverflow](https://stackoverflow.com/questions/49673399/service-workers-unavailable-in-wkwebview-in-ios-11-3/64155509#64155509).\n\nDefault is false.\n\nNote: If you set this to `true` make sure to add localhost and any [`registrable\ndomains`](https://developer.mozilla.org/en-US/docs/Glossary/Registrable_domain)\nused in this webview to tauri-src/Info.ios.plist:\n\n```xml\n<plist>\n<dict>\n <key>WKAppBoundDomains</key>\n <array>\n <string>localhost</string>\n <string>aregistrabledomain.example</string>\n </array>\n</dict>\n</plist>\n```\n\nYou must add `localhost` if any webview with this set to true opens a\nlocal webpage, makes any localhost calls, or uses the isolation pattern\nbecause Tauri uses the `localhost` domain for hosting the application\nwebpage, the IPC protocol, and the isolation pattern's iframe.\n\nRequests served through custom uri schemes are allowed so long as they use\na registrable domain specified in the `WKAppBoundDomains` array for all the\nrequests from the app, including requests for the `localhost` domain.\n\nIn theory, you can whitelist an entire uri scheme by including the\nprotocol name followed by a colon. For example, to allow all requests\nusing a custom \"stream\" uri scheme (see [this tauri\nexample](https://github.com/tauri-apps/tauri/blob/dev/examples/streaming/main.rs)),\nyou could add `stream:` to the AppBoundDomains array. That said, I'm not\nsure whether Apple would let your app through app review if you do\nwhitelist an entire protocol because this feature is not mentioned in\n[their blog post on App-Bound\nDomains](https://webkit.org/blog/10882/app-bound-domains/).\n\nSee https://webkit.org/blog/10882/app-bound-domains/ and\nhttps://developer.apple.com/documentation/webkit/wkwebviewconfiguration/limitsnavigationstoappbounddomains\nfor the official documentation on App-Bound Domains.\n\n## Platform-specific\n\n- **iOS**: Supported since version 14.0+.\n- **Linux / Windows / Android / MacOS:** Unsupported.",
633
+ "description": "Whether to limit navigations to App-Bound Domains.\n\nThis is required to enable Service Workers in WKWebView, which are otherwise\nunavailable. Defaults to `false`.\n\nWhen this is set to `true`, the webview can only navigate to the domains listed in the\n`WKAppBoundDomains` array of `src-tauri/Info.ios.plist`. Add `localhost` and every\n[registrable domain](https://developer.mozilla.org/en-US/docs/Glossary/Registrable_domain)\nthis webview loads to that array:\n\n```xml\n<plist>\n<dict>\n <key>WKAppBoundDomains</key>\n <array>\n <string>localhost</string>\n <string>aregistrabledomain.example</string>\n </array>\n</dict>\n</plist>\n```\n\n`localhost` must be listed if any webview with this option enabled opens a local webpage,\nmakes any localhost call, or uses the isolation pattern, because Tauri serves the\napplication webpage, the IPC protocol and the isolation pattern iframe from the\n`localhost` domain.\n\nRequests served through custom URI schemes are allowed as long as they use a registrable\ndomain listed in the `WKAppBoundDomains` array, including requests to the `localhost`\ndomain.\n\nAn entire URI scheme can be listed by adding the protocol name followed by a colon, for\nexample `stream:` for a custom `stream` scheme (see the\n[streaming example](https://github.com/tauri-apps/tauri/blob/dev/examples/streaming/main.rs)).\nThis is not covered by Apple's\n[App-Bound Domains announcement](https://webkit.org/blog/10882/app-bound-domains/),\nso it may not be accepted during App Store review.\n\nSee <https://webkit.org/blog/10882/app-bound-domains/> and\n<https://developer.apple.com/documentation/webkit/wkwebviewconfiguration/limitsnavigationstoappbounddomains>\nfor the official documentation on App-Bound Domains.\n\n## Platform-specific\n\n- **iOS**: Supported since version 14.0+.\n- **Linux / Windows / Android / macOS:** Unsupported.",
623
634
  "type": "boolean",
624
635
  "default": false
625
636
  },
@@ -645,7 +656,7 @@
645
656
  ]
646
657
  },
647
658
  "generalAutofillEnabled": {
648
- "description": "Controls the WebView's browser-level general autofill behavior.\n\n**This option does not disable password or credit card autofill.**\n\nWhen set to `false`, the WebView will not automatically populate\ngeneral form fields using previously stored data such as addresses\nor contact information.\n\nIf not specified, this is `true` by default.\n\n## Platform-specific\n\n- **Windows**: Supported. WebView2's autofill feature (called\n \"Suggestions\") may not honor `autocomplete=\"off\"` on input\n elements in some cases.\n- **Linux / Android / iOS / macOS**: Unsupported and performs no\n operation.",
659
+ "description": "Controls the WebView's browser-level general autofill behavior.\n\n**This option does not disable password or credit card autofill.**\n\nWhen set to `false`, the WebView will not automatically populate\ngeneral form fields using previously stored data such as addresses\nor contact information.\n\nIf not specified, this is `true` by default.\n\n## Platform-specific\n\n- **Windows**: Supported. WebView2's autofill feature (called\n \"Suggestions\") may not honor `autocomplete=\"off\"` on input\n elements in some cases.\n- **Linux / Android / iOS / macOS**: Unsupported and performs no\n operation.\n- **CEF runtime**: Autofill is already off on this runtime (it disables `autofill.profile_enabled` on every profile), so `false` is the state you get; turn it on with `Cef::profile_preference(\"autofill.profile_enabled\", true)`.",
649
660
  "type": "boolean",
650
661
  "default": true
651
662
  }
@@ -772,14 +783,14 @@
772
783
  "type": "object",
773
784
  "properties": {
774
785
  "effects": {
775
- "description": "List of Window effects to apply to the Window.\nConflicting effects will apply the first one and ignore the rest.",
786
+ "description": "List of Window effects to apply to the Window.\n\nGenerally, conflicting effects will apply the first one and ignore the rest but\non macOS you can specify one Liquid Glass style and one Visual Effect material at the same time\nto make Tauri fallback to the latter on macOS 15 and below.",
776
787
  "type": "array",
777
788
  "items": {
778
789
  "$ref": "#/definitions/WindowEffect"
779
790
  }
780
791
  },
781
792
  "state": {
782
- "description": "Window effect state **macOS Only**",
793
+ "description": "Window effect state **macOS Only**. Ignored for Liquid Glass Effects.",
783
794
  "anyOf": [
784
795
  {
785
796
  "$ref": "#/definitions/WindowEffectState"
@@ -798,7 +809,7 @@
798
809
  "format": "double"
799
810
  },
800
811
  "color": {
801
- "description": "Window effect color. Affects [`WindowEffect::Blur`] and [`WindowEffect::Acrylic`] only\non Windows 10 v1903+. Doesn't have any effect on Windows 7 or Windows 11.",
812
+ "description": "Window effect color.\n\n## Platform-specific\n\n- **Windows**: Affects [`WindowEffect::Blur`] and [`WindowEffect::Acrylic`] only\non Windows 10 v1903+. Doesn't have any effect on Windows 7 or Windows 11.\n- **macOS**: Only affects Liquid Glass effects.",
802
813
  "anyOf": [
803
814
  {
804
815
  "$ref": "#/definitions/Color"
@@ -807,6 +818,11 @@
807
818
  "type": "null"
808
819
  }
809
820
  ]
821
+ },
822
+ "interactive": {
823
+ "description": "Enables interactive glass behavior, which adds a visual response to user interactions.\n\n**macOS 27.0+**. Only affects Liquid Glass effects.",
824
+ "type": "boolean",
825
+ "default": false
810
826
  }
811
827
  },
812
828
  "additionalProperties": false,
@@ -917,6 +933,16 @@
917
933
  "type": "string",
918
934
  "const": "underPageBackground"
919
935
  },
936
+ {
937
+ "description": "**macOS 26.0+**",
938
+ "type": "string",
939
+ "const": "liquidGlassRegular"
940
+ },
941
+ {
942
+ "description": "**macOS 26.0+**",
943
+ "type": "string",
944
+ "const": "liquidGlassClear"
945
+ },
920
946
  {
921
947
  "description": "Mica effect that matches the system dark preference **Windows 11 Only**",
922
948
  "type": "string",
@@ -1107,7 +1133,7 @@
1107
1133
  "description": "The scrollbar style to use in the webview.\n\n## Platform-specific\n\n- **Windows**: This option must be given the same value for all webviews that target the same data directory.",
1108
1134
  "oneOf": [
1109
1135
  {
1110
- "description": "The scrollbar style to use in the webview.",
1136
+ "description": "The platform's native scrollbar, as rendered by the webview by default.\n\nThis is the only supported value outside of Windows.",
1111
1137
  "type": "string",
1112
1138
  "const": "default"
1113
1139
  },
@@ -1123,7 +1149,7 @@
1123
1149
  "type": "object",
1124
1150
  "properties": {
1125
1151
  "csp": {
1126
- "description": "The Content Security Policy that will be injected on all HTML files on the built application.\nIf [`dev_csp`](#SecurityConfig.devCsp) is not specified, this value is also injected on dev.\n\nThis is a really important part of the configuration since it helps you ensure your WebView is secured.\nSee <https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP>.",
1152
+ "description": "The Content Security Policy that will be injected on all HTML files on the built application.\nIf `devCsp` is not specified, this value is also injected on dev.\n\nThis is a really important part of the configuration since it helps you ensure your WebView is secured.\nSee <https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP>.",
1127
1153
  "anyOf": [
1128
1154
  {
1129
1155
  "$ref": "#/definitions/Csp"
@@ -1145,7 +1171,7 @@
1145
1171
  ]
1146
1172
  },
1147
1173
  "freezePrototype": {
1148
- "description": "Freeze the `Object.prototype` when using the custom protocol.",
1174
+ "description": "Whether `Object.freeze(Object.prototype)` is run as an initialization script on every webview.\n\nThis hardens the frontend against prototype pollution: once the prototype is frozen,\na script cannot add or replace properties on `Object.prototype` and thus cannot tamper\nwith objects it does not own, including the ones used by the Tauri API.\n\nThe script runs before any of your frontend code, on every webview, regardless of whether\nthe content is served by the custom protocol or by a development server.\n\nDefaults to `false`. Note that frontend libraries that extend built-in prototypes\n(polyfills, some older frameworks) stop working when this is enabled, so test your\napplication with it on before shipping.",
1149
1175
  "type": "boolean",
1150
1176
  "default": false
1151
1177
  },
@@ -1171,7 +1197,7 @@
1171
1197
  ]
1172
1198
  },
1173
1199
  "pattern": {
1174
- "description": "The pattern to use.",
1200
+ "description": "The application pattern, which defines how the frontend communicates with the Rust core.\n\n- `brownfield` (default): the frontend talks to the core directly. Use it unless you need\n the extra isolation layer.\n- `isolation`: every IPC message is routed through a secure JavaScript application you own,\n hosted in a sandboxed `<iframe>`, so it can validate or reject messages before they reach\n the Rust core. This protects the core from an untrusted or compromised frontend\n (for example one that loads third-party scripts), at the cost of an extra build step:\n the `dir` value must point at a directory containing the isolation application's `index.html`.\n\nSee <https://tauri.app/concept/inter-process-communication/isolation/>.",
1175
1201
  "default": {
1176
1202
  "use": "brownfield"
1177
1203
  },
@@ -1182,7 +1208,7 @@
1182
1208
  ]
1183
1209
  },
1184
1210
  "capabilities": {
1185
- "description": "List of capabilities that are enabled on the application.\n\nBy default (not set or empty list), all capability files from `./capabilities/` are included,\nby setting values in this entry, you have fine grained control over which capabilities are included\n\nYou can either reference a capability file defined in `./capabilities/` with its identifier or inline a [`Capability`]\n\n### Example\n\n```json\n{\n \"app\": {\n \"capabilities\": [\n \"main-window\",\n {\n \"identifier\": \"drag-window\",\n \"permissions\": [\"core:window:allow-start-dragging\"]\n }\n ]\n }\n}\n```",
1211
+ "description": "List of capabilities that are enabled on the application.\n\nBy default (not set or empty list), all capability files from `./capabilities/` are included,\nby setting values in this entry, you have fine grained control over which capabilities are included\n\nYou can either reference a capability file defined in `./capabilities/` with its identifier or inline a [`Capability`]\n\n### Example\n\n```json\n{\n \"app\": {\n \"security\": {\n \"capabilities\": [\n \"main-window\",\n {\n \"identifier\": \"drag-window\",\n \"permissions\": [\"core:window:allow-start-dragging\"]\n }\n ]\n }\n }\n}\n```",
1186
1212
  "type": "array",
1187
1213
  "items": {
1188
1214
  "$ref": "#/definitions/CapabilityEntry"
@@ -1818,6 +1844,65 @@
1818
1844
  "iconPath"
1819
1845
  ]
1820
1846
  },
1847
+ "AppDirectoriesOverride": {
1848
+ "description": "Overrides the directories returned by the `app_*_dir` path APIs.\n\nSee the `app > appDirectoriesOverride` config for how each path is resolved.",
1849
+ "anyOf": [
1850
+ {
1851
+ "description": "A single directory that holds all app directories.\n\nThe config, data and local data directories resolve to this path,\nthe cache directory resolves to `<path>/caches` and the log directory to `<path>/logs`.",
1852
+ "type": "string"
1853
+ },
1854
+ {
1855
+ "description": "Overrides for individual app directories.\n\nDirectories that are not listed keep their default location.",
1856
+ "allOf": [
1857
+ {
1858
+ "$ref": "#/definitions/AppDirectoryOverrides"
1859
+ }
1860
+ ]
1861
+ }
1862
+ ]
1863
+ },
1864
+ "AppDirectoryOverrides": {
1865
+ "description": "Overrides for individual app directories.",
1866
+ "type": "object",
1867
+ "properties": {
1868
+ "config": {
1869
+ "description": "Overrides the app config directory (`app_config_dir`, `$APPCONFIG`).",
1870
+ "type": [
1871
+ "string",
1872
+ "null"
1873
+ ]
1874
+ },
1875
+ "data": {
1876
+ "description": "Overrides the app data directory (`app_data_dir`, `$APPDATA`).",
1877
+ "type": [
1878
+ "string",
1879
+ "null"
1880
+ ]
1881
+ },
1882
+ "localData": {
1883
+ "description": "Overrides the app local data directory (`app_local_data_dir`, `$APPLOCALDATA`).\n\nOn Windows and Linux this is also the default data directory of the webviews.",
1884
+ "type": [
1885
+ "string",
1886
+ "null"
1887
+ ]
1888
+ },
1889
+ "cache": {
1890
+ "description": "Overrides the app cache directory (`app_cache_dir`, `$APPCACHE`).",
1891
+ "type": [
1892
+ "string",
1893
+ "null"
1894
+ ]
1895
+ },
1896
+ "log": {
1897
+ "description": "Overrides the app log directory (`app_log_dir`, `$APPLOG`).",
1898
+ "type": [
1899
+ "string",
1900
+ "null"
1901
+ ]
1902
+ }
1903
+ },
1904
+ "additionalProperties": false
1905
+ },
1821
1906
  "BuildConfig": {
1822
1907
  "description": "The Build configuration object.\n\nSee more: <https://v2.tauri.app/reference/config/#buildconfig>",
1823
1908
  "type": "object",
@@ -1853,7 +1938,7 @@
1853
1938
  ]
1854
1939
  },
1855
1940
  "beforeDevCommand": {
1856
- "description": "A shell command to run before `tauri dev` kicks in.\n\nThe TAURI_ENV_PLATFORM, TAURI_ENV_ARCH, TAURI_ENV_FAMILY, TAURI_ENV_PLATFORM_VERSION, TAURI_ENV_PLATFORM_TYPE and TAURI_ENV_DEBUG environment variables are set if you perform conditional compilation.",
1941
+ "description": "A shell command to run before `tauri dev` kicks in.\n\nThe `TAURI_ENV_PLATFORM`, `TAURI_ENV_ARCH`, `TAURI_ENV_FAMILY`, `TAURI_ENV_PLATFORM_VERSION`\nand `TAURI_ENV_TARGET_TRIPLE` environment variables are set for the command, so it can\nadapt its output to the target that is being built.\n`TAURI_ENV_DEBUG` is set to `true` for debug builds and is not set otherwise.",
1857
1942
  "anyOf": [
1858
1943
  {
1859
1944
  "$ref": "#/definitions/BeforeDevCommand"
@@ -1864,7 +1949,7 @@
1864
1949
  ]
1865
1950
  },
1866
1951
  "beforeBuildCommand": {
1867
- "description": "A shell command to run before `tauri build` kicks in.\n\nThe TAURI_ENV_PLATFORM, TAURI_ENV_ARCH, TAURI_ENV_FAMILY, TAURI_ENV_PLATFORM_VERSION, TAURI_ENV_PLATFORM_TYPE and TAURI_ENV_DEBUG environment variables are set if you perform conditional compilation.",
1952
+ "description": "A shell command to run before `tauri build` kicks in.\n\nThe `TAURI_ENV_PLATFORM`, `TAURI_ENV_ARCH`, `TAURI_ENV_FAMILY`, `TAURI_ENV_PLATFORM_VERSION`\nand `TAURI_ENV_TARGET_TRIPLE` environment variables are set for the command, so it can\nadapt its output to the target that is being built.\n`TAURI_ENV_DEBUG` is set to `true` for debug builds and is not set otherwise.",
1868
1953
  "anyOf": [
1869
1954
  {
1870
1955
  "$ref": "#/definitions/HookCommand"
@@ -1875,7 +1960,7 @@
1875
1960
  ]
1876
1961
  },
1877
1962
  "beforeBundleCommand": {
1878
- "description": "A shell command to run before the bundling phase in `tauri build` kicks in.\n\nThe TAURI_ENV_PLATFORM, TAURI_ENV_ARCH, TAURI_ENV_FAMILY, TAURI_ENV_PLATFORM_VERSION, TAURI_ENV_PLATFORM_TYPE and TAURI_ENV_DEBUG environment variables are set if you perform conditional compilation.",
1963
+ "description": "A shell command to run before the bundling phase in `tauri build` kicks in.\n\nThe `TAURI_ENV_PLATFORM`, `TAURI_ENV_ARCH`, `TAURI_ENV_FAMILY`, `TAURI_ENV_PLATFORM_VERSION`\nand `TAURI_ENV_TARGET_TRIPLE` environment variables are set for the command, so it can\nadapt its output to the target that is being built.\n`TAURI_ENV_DEBUG` is set to `true` for debug builds and is not set otherwise.",
1879
1964
  "anyOf": [
1880
1965
  {
1881
1966
  "$ref": "#/definitions/HookCommand"
package/index.js CHANGED
@@ -81,8 +81,8 @@ function requireNative() {
81
81
  try {
82
82
  const binding = require('@tauri-apps/cli-android-arm64')
83
83
  const bindingPackageVersion = require('@tauri-apps/cli-android-arm64/package.json').version
84
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
85
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
84
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
85
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
86
86
  }
87
87
  return binding
88
88
  } catch (e) {
@@ -97,8 +97,8 @@ function requireNative() {
97
97
  try {
98
98
  const binding = require('@tauri-apps/cli-android-arm-eabi')
99
99
  const bindingPackageVersion = require('@tauri-apps/cli-android-arm-eabi/package.json').version
100
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
101
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
100
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
101
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
102
102
  }
103
103
  return binding
104
104
  } catch (e) {
@@ -118,8 +118,8 @@ function requireNative() {
118
118
  try {
119
119
  const binding = require('@tauri-apps/cli-win32-x64-gnu')
120
120
  const bindingPackageVersion = require('@tauri-apps/cli-win32-x64-gnu/package.json').version
121
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
122
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
121
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
122
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
123
123
  }
124
124
  return binding
125
125
  } catch (e) {
@@ -134,8 +134,8 @@ function requireNative() {
134
134
  try {
135
135
  const binding = require('@tauri-apps/cli-win32-x64-msvc')
136
136
  const bindingPackageVersion = require('@tauri-apps/cli-win32-x64-msvc/package.json').version
137
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
138
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
137
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
138
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
139
139
  }
140
140
  return binding
141
141
  } catch (e) {
@@ -151,8 +151,8 @@ function requireNative() {
151
151
  try {
152
152
  const binding = require('@tauri-apps/cli-win32-ia32-msvc')
153
153
  const bindingPackageVersion = require('@tauri-apps/cli-win32-ia32-msvc/package.json').version
154
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
155
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
154
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
155
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
156
156
  }
157
157
  return binding
158
158
  } catch (e) {
@@ -167,8 +167,8 @@ function requireNative() {
167
167
  try {
168
168
  const binding = require('@tauri-apps/cli-win32-arm64-msvc')
169
169
  const bindingPackageVersion = require('@tauri-apps/cli-win32-arm64-msvc/package.json').version
170
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
171
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
170
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
171
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
172
172
  }
173
173
  return binding
174
174
  } catch (e) {
@@ -186,8 +186,8 @@ function requireNative() {
186
186
  try {
187
187
  const binding = require('@tauri-apps/cli-darwin-universal')
188
188
  const bindingPackageVersion = require('@tauri-apps/cli-darwin-universal/package.json').version
189
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
190
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
189
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
190
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
191
191
  }
192
192
  return binding
193
193
  } catch (e) {
@@ -202,8 +202,8 @@ function requireNative() {
202
202
  try {
203
203
  const binding = require('@tauri-apps/cli-darwin-x64')
204
204
  const bindingPackageVersion = require('@tauri-apps/cli-darwin-x64/package.json').version
205
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
206
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
205
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
206
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
207
207
  }
208
208
  return binding
209
209
  } catch (e) {
@@ -218,8 +218,8 @@ function requireNative() {
218
218
  try {
219
219
  const binding = require('@tauri-apps/cli-darwin-arm64')
220
220
  const bindingPackageVersion = require('@tauri-apps/cli-darwin-arm64/package.json').version
221
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
222
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
221
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
222
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
223
223
  }
224
224
  return binding
225
225
  } catch (e) {
@@ -238,8 +238,8 @@ function requireNative() {
238
238
  try {
239
239
  const binding = require('@tauri-apps/cli-freebsd-x64')
240
240
  const bindingPackageVersion = require('@tauri-apps/cli-freebsd-x64/package.json').version
241
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
242
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
241
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
242
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
243
243
  }
244
244
  return binding
245
245
  } catch (e) {
@@ -254,8 +254,8 @@ function requireNative() {
254
254
  try {
255
255
  const binding = require('@tauri-apps/cli-freebsd-arm64')
256
256
  const bindingPackageVersion = require('@tauri-apps/cli-freebsd-arm64/package.json').version
257
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
258
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
257
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
258
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
259
259
  }
260
260
  return binding
261
261
  } catch (e) {
@@ -275,8 +275,8 @@ function requireNative() {
275
275
  try {
276
276
  const binding = require('@tauri-apps/cli-linux-x64-musl')
277
277
  const bindingPackageVersion = require('@tauri-apps/cli-linux-x64-musl/package.json').version
278
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
279
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
278
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
279
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
280
280
  }
281
281
  return binding
282
282
  } catch (e) {
@@ -291,8 +291,8 @@ function requireNative() {
291
291
  try {
292
292
  const binding = require('@tauri-apps/cli-linux-x64-gnu')
293
293
  const bindingPackageVersion = require('@tauri-apps/cli-linux-x64-gnu/package.json').version
294
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
295
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
294
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
295
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
296
296
  }
297
297
  return binding
298
298
  } catch (e) {
@@ -309,8 +309,8 @@ function requireNative() {
309
309
  try {
310
310
  const binding = require('@tauri-apps/cli-linux-arm64-musl')
311
311
  const bindingPackageVersion = require('@tauri-apps/cli-linux-arm64-musl/package.json').version
312
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
313
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
312
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
313
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
314
314
  }
315
315
  return binding
316
316
  } catch (e) {
@@ -325,8 +325,8 @@ function requireNative() {
325
325
  try {
326
326
  const binding = require('@tauri-apps/cli-linux-arm64-gnu')
327
327
  const bindingPackageVersion = require('@tauri-apps/cli-linux-arm64-gnu/package.json').version
328
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
329
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
328
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
329
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
330
330
  }
331
331
  return binding
332
332
  } catch (e) {
@@ -343,8 +343,8 @@ function requireNative() {
343
343
  try {
344
344
  const binding = require('@tauri-apps/cli-linux-arm-musleabihf')
345
345
  const bindingPackageVersion = require('@tauri-apps/cli-linux-arm-musleabihf/package.json').version
346
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
347
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
346
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
347
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
348
348
  }
349
349
  return binding
350
350
  } catch (e) {
@@ -359,8 +359,8 @@ function requireNative() {
359
359
  try {
360
360
  const binding = require('@tauri-apps/cli-linux-arm-gnueabihf')
361
361
  const bindingPackageVersion = require('@tauri-apps/cli-linux-arm-gnueabihf/package.json').version
362
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
363
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
362
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
363
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
364
364
  }
365
365
  return binding
366
366
  } catch (e) {
@@ -377,8 +377,8 @@ function requireNative() {
377
377
  try {
378
378
  const binding = require('@tauri-apps/cli-linux-loong64-musl')
379
379
  const bindingPackageVersion = require('@tauri-apps/cli-linux-loong64-musl/package.json').version
380
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
381
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
380
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
381
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
382
382
  }
383
383
  return binding
384
384
  } catch (e) {
@@ -393,8 +393,8 @@ function requireNative() {
393
393
  try {
394
394
  const binding = require('@tauri-apps/cli-linux-loong64-gnu')
395
395
  const bindingPackageVersion = require('@tauri-apps/cli-linux-loong64-gnu/package.json').version
396
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
397
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
396
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
397
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
398
398
  }
399
399
  return binding
400
400
  } catch (e) {
@@ -411,8 +411,8 @@ function requireNative() {
411
411
  try {
412
412
  const binding = require('@tauri-apps/cli-linux-riscv64-musl')
413
413
  const bindingPackageVersion = require('@tauri-apps/cli-linux-riscv64-musl/package.json').version
414
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
415
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
414
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
415
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
416
416
  }
417
417
  return binding
418
418
  } catch (e) {
@@ -427,8 +427,8 @@ function requireNative() {
427
427
  try {
428
428
  const binding = require('@tauri-apps/cli-linux-riscv64-gnu')
429
429
  const bindingPackageVersion = require('@tauri-apps/cli-linux-riscv64-gnu/package.json').version
430
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
431
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
430
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
431
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
432
432
  }
433
433
  return binding
434
434
  } catch (e) {
@@ -444,8 +444,8 @@ function requireNative() {
444
444
  try {
445
445
  const binding = require('@tauri-apps/cli-linux-ppc64-gnu')
446
446
  const bindingPackageVersion = require('@tauri-apps/cli-linux-ppc64-gnu/package.json').version
447
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
448
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
447
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
448
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
449
449
  }
450
450
  return binding
451
451
  } catch (e) {
@@ -460,8 +460,8 @@ function requireNative() {
460
460
  try {
461
461
  const binding = require('@tauri-apps/cli-linux-s390x-gnu')
462
462
  const bindingPackageVersion = require('@tauri-apps/cli-linux-s390x-gnu/package.json').version
463
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
464
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
463
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
464
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
465
465
  }
466
466
  return binding
467
467
  } catch (e) {
@@ -480,8 +480,8 @@ function requireNative() {
480
480
  try {
481
481
  const binding = require('@tauri-apps/cli-openharmony-arm64')
482
482
  const bindingPackageVersion = require('@tauri-apps/cli-openharmony-arm64/package.json').version
483
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
484
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
483
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
484
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
485
485
  }
486
486
  return binding
487
487
  } catch (e) {
@@ -496,8 +496,8 @@ function requireNative() {
496
496
  try {
497
497
  const binding = require('@tauri-apps/cli-openharmony-x64')
498
498
  const bindingPackageVersion = require('@tauri-apps/cli-openharmony-x64/package.json').version
499
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
500
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
499
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
500
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
501
501
  }
502
502
  return binding
503
503
  } catch (e) {
@@ -512,8 +512,8 @@ function requireNative() {
512
512
  try {
513
513
  const binding = require('@tauri-apps/cli-openharmony-arm')
514
514
  const bindingPackageVersion = require('@tauri-apps/cli-openharmony-arm/package.json').version
515
- if (bindingPackageVersion !== '2.11.4' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
516
- throw new Error(`Native binding package version mismatch, expected 2.11.4 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
515
+ if (bindingPackageVersion !== '3.0.0-alpha.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
516
+ throw new Error(`Native binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
517
517
  }
518
518
  return binding
519
519
  } catch (e) {
@@ -527,47 +527,163 @@ function requireNative() {
527
527
  }
528
528
  }
529
529
 
530
- nativeBinding = requireNative()
530
+ function createLoadErrorChain(errors) {
531
+ return errors.reduce((previous, current) => {
532
+ let message
533
+ try {
534
+ message =
535
+ current && typeof current.message === 'string'
536
+ ? current.message
537
+ : String(current)
538
+ } catch {
539
+ message = 'Unknown error'
540
+ }
541
+ const error = new Error(message)
542
+ error.cause = previous
543
+ return error
544
+ }, null)
545
+ }
531
546
 
532
547
  // NAPI_RS_FORCE_WASI is a tri-state flag:
533
548
  // unset / any other value → native binding preferred, WASI is only a fallback
534
- // 'true' → force WASI fallback even if native loaded
535
- // 'error' → force WASI and throw if no WASI binding is found
549
+ // 'true' → prefer WASI, but retain native as a lazy fallback
550
+ // 'error' → require WASI without initializing a native fallback
536
551
  // Treating any non-empty string as truthy (the historical behavior) meant
537
552
  // NAPI_RS_FORCE_WASI=false, NAPI_RS_FORCE_WASI=0, etc. inadvertently triggered
538
553
  // the WASI path, causing ENOENT for packages shipped without a .wasi.cjs file.
554
+ //
555
+ // NAPI_RS_WASI_FLAVOR selects one exact generated flavor and implies strict
556
+ // WASI loading. It never crosses into another flavor or falls back to native.
557
+ const __napiWasiFlavors = ["wasm32-wasi"]
558
+ const __napiWasiFlavor = process.env.NAPI_RS_WASI_FLAVOR
559
+ const __napiWasiFlavorRequested =
560
+ typeof __napiWasiFlavor === 'string' && __napiWasiFlavor.length > 0
561
+ if (
562
+ __napiWasiFlavorRequested &&
563
+ __napiWasiFlavors.indexOf(__napiWasiFlavor) === -1
564
+ ) {
565
+ throw new Error(
566
+ 'Unsupported WASI flavor "' +
567
+ __napiWasiFlavor +
568
+ '". Available flavors: ' +
569
+ __napiWasiFlavors.join(', '),
570
+ )
571
+ }
572
+ const forceWasiError = process.env.NAPI_RS_FORCE_WASI === 'error'
539
573
  const forceWasi =
540
- process.env.NAPI_RS_FORCE_WASI === 'true' || process.env.NAPI_RS_FORCE_WASI === 'error'
574
+ process.env.NAPI_RS_FORCE_WASI === 'true' ||
575
+ forceWasiError ||
576
+ __napiWasiFlavorRequested
577
+
578
+ if (!forceWasi) {
579
+ nativeBinding = requireNative()
580
+ }
541
581
 
542
582
  if (!nativeBinding || forceWasi) {
543
583
  let wasiBinding = null
544
- let wasiBindingError = null
545
- try {
546
- wasiBinding = require('./cli.wasi.cjs')
547
- nativeBinding = wasiBinding
548
- } catch (err) {
549
- if (forceWasi) {
550
- wasiBindingError = err
584
+ let wasiBindingLoaded = false
585
+ const wasiBindingErrors = []
586
+ const __napiWasiResolveCandidate = (specifier, isPackage, localArtifacts) => {
587
+ try {
588
+ require.resolve(specifier)
589
+ } catch (resolveError) {
590
+ if (!resolveError || resolveError.code !== 'MODULE_NOT_FOUND') {
591
+ throw resolveError
592
+ }
593
+ if (isPackage) {
594
+ try {
595
+ require.resolve(specifier + '/package.json')
596
+ } catch (packageError) {
597
+ if (packageError && packageError.code === 'MODULE_NOT_FOUND') {
598
+ return resolveError
599
+ }
600
+ // An exports restriction proves the package exists even when its
601
+ // package.json is not public. Preserve the root resolution failure.
602
+ throw resolveError
603
+ }
604
+ // The package exists but its main/export target is broken.
605
+ throw resolveError
606
+ }
607
+ return resolveError
608
+ }
609
+ if (localArtifacts) {
610
+ let artifactError = null
611
+ for (let i = 0; i < localArtifacts.length; i++) {
612
+ try {
613
+ require.resolve(localArtifacts[i])
614
+ return null
615
+ } catch (resolveError) {
616
+ if (!resolveError || resolveError.code !== 'MODULE_NOT_FOUND') {
617
+ throw resolveError
618
+ }
619
+ artifactError = resolveError
620
+ }
621
+ }
622
+ return artifactError
551
623
  }
624
+ return null
552
625
  }
553
- if (!nativeBinding || forceWasi) {
626
+ if (!wasiBindingLoaded && (!__napiWasiFlavorRequested || __napiWasiFlavor === "wasm32-wasi")) {
627
+ let candidateError = null
628
+ let candidateFailed = false
554
629
  try {
555
- wasiBinding = require('@tauri-apps/cli-wasm32-wasi')
556
- nativeBinding = wasiBinding
630
+ candidateError = __napiWasiResolveCandidate('./cli.wasi.cjs', false, ["./cli.wasm32-wasi.debug.wasm","./cli.wasm32-wasi.wasm"])
631
+ candidateFailed = candidateError !== null
632
+ if (!candidateFailed) {
633
+ wasiBinding = require('./cli.wasi.cjs')
634
+ nativeBinding = wasiBinding
635
+ wasiBindingLoaded = true
636
+ }
557
637
  } catch (err) {
558
- if (forceWasi) {
559
- if (!wasiBindingError) {
560
- wasiBindingError = err
561
- } else {
562
- wasiBindingError.cause = err
638
+ candidateError = err
639
+ candidateFailed = true
640
+ }
641
+ if (candidateFailed) {
642
+ wasiBindingErrors.push(candidateError)
643
+ loadErrors.push(candidateError)
644
+ }
645
+ }
646
+ if (!wasiBindingLoaded && (!__napiWasiFlavorRequested || __napiWasiFlavor === "wasm32-wasi")) {
647
+ let candidateError = null
648
+ let candidateFailed = false
649
+ try {
650
+ candidateError = __napiWasiResolveCandidate('@tauri-apps/cli-wasm32-wasi', true, undefined)
651
+ candidateFailed = candidateError !== null
652
+ if (!candidateFailed) {
653
+ if (process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
654
+ const bindingPackageVersion = require('@tauri-apps/cli-wasm32-wasi/package.json').version
655
+ if (bindingPackageVersion !== '3.0.0-alpha.1') {
656
+ throw new Error(`WASI binding package version mismatch, expected 3.0.0-alpha.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
657
+ }
563
658
  }
564
- loadErrors.push(err)
659
+ wasiBinding = require('@tauri-apps/cli-wasm32-wasi')
660
+ nativeBinding = wasiBinding
661
+ wasiBindingLoaded = true
565
662
  }
663
+ } catch (err) {
664
+ candidateError = err
665
+ candidateFailed = true
666
+ }
667
+ if (candidateFailed) {
668
+ wasiBindingErrors.push(candidateError)
669
+ loadErrors.push(candidateError)
566
670
  }
567
671
  }
568
- if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
569
- const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
570
- error.cause = wasiBindingError
672
+ if (
673
+ !wasiBindingLoaded &&
674
+ forceWasi &&
675
+ !forceWasiError &&
676
+ !__napiWasiFlavorRequested
677
+ ) {
678
+ nativeBinding = requireNative()
679
+ }
680
+ if ((forceWasiError || __napiWasiFlavorRequested) && !wasiBindingLoaded) {
681
+ const error = new Error(
682
+ __napiWasiFlavorRequested
683
+ ? 'WASI binding for flavor "' + __napiWasiFlavor + '" not found'
684
+ : 'WASI binding not found and NAPI_RS_FORCE_WASI is set to error',
685
+ )
686
+ error.cause = createLoadErrorChain(wasiBindingErrors)
571
687
  throw error
572
688
  }
573
689
  }
@@ -581,10 +697,7 @@ if (!nativeBinding) {
581
697
  )
582
698
  // assign instead of the `new Error(message, { cause })` options form,
583
699
  // which Node < 16.9 silently ignores
584
- error.cause = loadErrors.reduce((err, cur) => {
585
- cur.cause = err
586
- return cur
587
- })
700
+ error.cause = createLoadErrorChain(loadErrors)
588
701
  throw error
589
702
  }
590
703
  throw new Error(`Failed to load native binding`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tauri-apps/cli",
3
- "version": "3.0.0-alpha.1",
3
+ "version": "3.0.0-alpha.3",
4
4
  "description": "Command line interface for building Tauri apps",
5
5
  "type": "commonjs",
6
6
  "funding": {
@@ -66,16 +66,16 @@
66
66
  "tauri": "node ./tauri.js"
67
67
  },
68
68
  "optionalDependencies": {
69
- "@tauri-apps/cli-linux-x64-gnu": "3.0.0-alpha.1",
70
- "@tauri-apps/cli-win32-x64-msvc": "3.0.0-alpha.1",
71
- "@tauri-apps/cli-darwin-x64": "3.0.0-alpha.1",
72
- "@tauri-apps/cli-darwin-arm64": "3.0.0-alpha.1",
73
- "@tauri-apps/cli-linux-arm64-gnu": "3.0.0-alpha.1",
74
- "@tauri-apps/cli-linux-arm64-musl": "3.0.0-alpha.1",
75
- "@tauri-apps/cli-linux-arm-gnueabihf": "3.0.0-alpha.1",
76
- "@tauri-apps/cli-linux-x64-musl": "3.0.0-alpha.1",
77
- "@tauri-apps/cli-linux-riscv64-gnu": "3.0.0-alpha.1",
78
- "@tauri-apps/cli-win32-ia32-msvc": "3.0.0-alpha.1",
79
- "@tauri-apps/cli-win32-arm64-msvc": "3.0.0-alpha.1"
69
+ "@tauri-apps/cli-linux-x64-gnu": "3.0.0-alpha.3",
70
+ "@tauri-apps/cli-win32-x64-msvc": "3.0.0-alpha.3",
71
+ "@tauri-apps/cli-darwin-x64": "3.0.0-alpha.3",
72
+ "@tauri-apps/cli-darwin-arm64": "3.0.0-alpha.3",
73
+ "@tauri-apps/cli-linux-arm64-gnu": "3.0.0-alpha.3",
74
+ "@tauri-apps/cli-linux-arm64-musl": "3.0.0-alpha.3",
75
+ "@tauri-apps/cli-linux-arm-gnueabihf": "3.0.0-alpha.3",
76
+ "@tauri-apps/cli-linux-x64-musl": "3.0.0-alpha.3",
77
+ "@tauri-apps/cli-linux-riscv64-gnu": "3.0.0-alpha.3",
78
+ "@tauri-apps/cli-win32-ia32-msvc": "3.0.0-alpha.3",
79
+ "@tauri-apps/cli-win32-arm64-msvc": "3.0.0-alpha.3"
80
80
  }
81
81
  }