@tauri-apps/cli 3.0.0-alpha.2 → 3.0.0-alpha.4

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,37 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.0.0-alpha.4]
4
+
5
+ ### New Features
6
+
7
+ - [`49dc7cc39`](https://www.github.com/tauri-apps/tauri/commit/49dc7cc39017f63b81adb09303d9b82d5b71207a) `tauri migrate` now migrates Tauri v2 apps to v3 (v1 and v2 beta apps continue to v3 after their existing migration):
8
+
9
+ - The Tauri crates and official plugins are updated to v3 in `Cargo.toml` and `package.json`, and the app depends on `tauri-runtime-wry`, which receives the `devtools`, `unstable`, `tracing`, `x11`, `dbus` and `macos-proxy` features (including the ones enabled through the app's own `[features]`). The removed `wry`, `macos-private-api` and `objc-exception` features are dropped.
10
+ - The `app > macOSPrivateApi` option is removed and the NSIS `install-icon` key is renamed to `installer-icon` in the main and platform-specific configuration files, keeping their formatting and comments.
11
+ - The Rust sources select the runtime with `.runtime(tauri_runtime_wry::Wry::default())` on `tauri::Builder::default()`, use `tauri::DynRuntime` instead of `tauri::Wry`, and pick up the renamed `with_inner_blocking`, `initialization_script`, `run_invoke_handler`, `tauri_runtime_wry::{tao, wry, android_binding, webview_version}` APIs.
12
+
13
+ ### Dependencies
14
+
15
+ - Upgraded to `tauri-cli@3.0.0-alpha.4`
16
+
17
+ ### Breaking Changes
18
+
19
+ - [`b9a77ebb8`](https://www.github.com/tauri-apps/tauri/commit/b9a77ebb8ab57480a354ec47aa45c6898ec9bfda) Removed the `macos-private-api` Cargo feature and the `app > macOSPrivateApi` configuration option. Window transparency and the `fullScreenEnabled` preference no longer rely on macOS private APIs, so they are always available.
20
+
21
+ ## [3.0.0-alpha.3]
22
+
23
+ ### Bug Fixes
24
+
25
+ - [`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.
26
+
27
+ ### What's Changed
28
+
29
+ - [`d29d9054e`](https://www.github.com/tauri-apps/tauri/commit/d29d9054e09416bc1c05a39d71b53c3de67a1d40) Pull changes from Tauri 2.12 release.
30
+
31
+ ### Dependencies
32
+
33
+ - Upgraded to `tauri-cli@3.0.0-alpha.3`
34
+
3
35
  ## [3.0.0-alpha.2]
4
36
 
5
37
  ### Bug Fixes
@@ -48,6 +80,126 @@
48
80
  - Nothing runtime-specific is done for other runtimes.
49
81
  - The app and plugin templates add the `tauri-runtime-wry` dependency and select it with `tauri::Builder::default().runtime(tauri_runtime_wry::Wry::default())`.
50
82
 
83
+ ## [2.12.1]
84
+
85
+ ### Enhancements
86
+
87
+ - [`64bfdd909`](https://www.github.com/tauri-apps/tauri/commit/64bfdd909c5c3f0828371e4995b69ad5ed685126) ([#16165](https://www.github.com/tauri-apps/tauri/pull/16165) by [@Legend-Master](https://www.github.com/tauri-apps/tauri/../../Legend-Master)) Ignore `src-tauri` in `tauri plugin init` example template
88
+
89
+ ### Dependencies
90
+
91
+ - Upgraded to `tauri-cli@2.12.1`
92
+
93
+ ## [2.12.0]
94
+
95
+ ### New Features
96
+
97
+ - [`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`.
98
+ - [`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).
99
+ - [`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.
100
+ - [`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.
101
+ - [`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.
102
+ - [`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.
103
+
104
+ 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.
105
+
106
+ `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.
107
+
108
+ ### Enhancements
109
+
110
+ - [`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
111
+ - [`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.
112
+
113
+ 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.
114
+ - [`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.
115
+ - [`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`
116
+ - [`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`
117
+ - [`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.
118
+ - [`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.
119
+ - [`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.
120
+ - [`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.
121
+
122
+ ### Bug Fixes
123
+
124
+ - [`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.
125
+ - [`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.
126
+ - [`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.
127
+ - [`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.
128
+ - [`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.
129
+ - [`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}".
130
+ - [`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.
131
+ - [`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`.
132
+ - [`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.
133
+ - [`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.
134
+ - [`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.
135
+ - [`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.
136
+ - [`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.
137
+ - [`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.
138
+ - [`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.
139
+ - [`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.
140
+ - [`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.
141
+ - [`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.
142
+ - [`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`.
143
+ - [`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.
144
+ - [`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.
145
+ - [`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.
146
+ - [`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`.
147
+ - [`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`.
148
+ - [`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.
149
+ - [`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.
150
+ - [`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.
151
+ - [`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.
152
+ - [`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.
153
+ - [`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.
154
+ - [`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.
155
+ - [`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.
156
+ - [`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.
157
+ - [`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
158
+ - [`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.
159
+ - [`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.
160
+ - [`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''".
161
+ - [`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.
162
+ - [`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`.
163
+
164
+ ### What's Changed
165
+
166
+ - [`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
167
+ - [`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.
168
+
169
+ ### Security fixes
170
+
171
+ - [`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.
172
+ - [`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.
173
+ - [`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.
174
+ - [`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.
175
+ - [`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.
176
+ - [`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.
177
+
178
+ ### Dependencies
179
+
180
+ - Upgraded to `tauri-cli@2.12.0`
181
+ - [`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.
182
+
183
+ **IMPORTANT**: For plugin authors, update your `build.gradle.kts` file to remove the
184
+
185
+ ```kotlin
186
+ buildTypes {
187
+ release {
188
+ isMinifyEnabled = false
189
+ proguardFiles(
190
+ getDefaultProguardFile("proguard-android-optimize.txt"),
191
+ "proguard-rules.pro"
192
+ )
193
+ }
194
+ }
195
+ ```
196
+
197
+ section and rename your `proguard-rules.pro` to `consumer-rules.pro` to match the `consumerProguardFiles("consumer-rules.pro")` in the template.
198
+ - [`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.
199
+ - [`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`.
200
+ - [`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`
201
+ - [`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.
202
+
51
203
  ## \[2.11.4]
52
204
 
53
205
  ### Bug Fixes
@@ -1,5 +1,5 @@
1
1
  {
2
- "$id": "https://schema.tauri.app/config/3.0.0-alpha.2",
2
+ "$id": "https://schema.tauri.app/config/3.0.0-alpha.4",
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```",
@@ -54,7 +54,6 @@
54
54
  },
55
55
  "capabilities": []
56
56
  },
57
- "macOSPrivateApi": false,
58
57
  "withGlobalTauri": false,
59
58
  "enableGTKAppId": false
60
59
  },
@@ -211,20 +210,26 @@
211
210
  }
212
211
  ]
213
212
  },
214
- "macOSPrivateApi": {
215
- "description": "MacOS private API configuration. Enables the transparent background API and sets the `fullScreenEnabled` preference to `true`.",
216
- "type": "boolean",
217
- "default": false
218
- },
219
213
  "withGlobalTauri": {
220
214
  "description": "Whether we should inject the Tauri API on `window.__TAURI__` or not.",
221
215
  "type": "boolean",
222
216
  "default": false
223
217
  },
224
218
  "enableGTKAppId": {
225
- "description": "If set to true \"identifier\" will be set as GTK app ID (on systems that use GTK).",
219
+ "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
220
  "type": "boolean",
227
221
  "default": false
222
+ },
223
+ "appDirectoriesOverride": {
224
+ "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.",
225
+ "anyOf": [
226
+ {
227
+ "$ref": "#/definitions/AppDirectoriesOverride"
228
+ },
229
+ {
230
+ "type": "null"
231
+ }
232
+ ]
228
233
  }
229
234
  },
230
235
  "additionalProperties": false
@@ -381,7 +386,7 @@
381
386
  "default": true
382
387
  },
383
388
  "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.\n\n## Platform-specific\n\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.",
389
+ "description": "Whether the window is transparent or not.\n\n## Platform-specific\n\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
390
  "type": "boolean",
386
391
  "default": false
387
392
  },
@@ -588,14 +593,14 @@
588
593
  "default": false
589
594
  },
590
595
  "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.",
596
+ "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
597
  "type": [
593
598
  "string",
594
599
  "null"
595
600
  ]
596
601
  },
597
602
  "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.\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.",
603
+ "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
604
  "type": [
600
605
  "array",
601
606
  "null"
@@ -619,7 +624,7 @@
619
624
  ]
620
625
  },
621
626
  "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.",
627
+ "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
628
  "type": "boolean",
624
629
  "default": false
625
630
  },
@@ -772,14 +777,14 @@
772
777
  "type": "object",
773
778
  "properties": {
774
779
  "effects": {
775
- "description": "List of Window effects to apply to the Window.\nConflicting effects will apply the first one and ignore the rest.",
780
+ "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
781
  "type": "array",
777
782
  "items": {
778
783
  "$ref": "#/definitions/WindowEffect"
779
784
  }
780
785
  },
781
786
  "state": {
782
- "description": "Window effect state **macOS Only**",
787
+ "description": "Window effect state **macOS Only**. Ignored for Liquid Glass Effects.",
783
788
  "anyOf": [
784
789
  {
785
790
  "$ref": "#/definitions/WindowEffectState"
@@ -798,7 +803,7 @@
798
803
  "format": "double"
799
804
  },
800
805
  "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.",
806
+ "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
807
  "anyOf": [
803
808
  {
804
809
  "$ref": "#/definitions/Color"
@@ -807,6 +812,11 @@
807
812
  "type": "null"
808
813
  }
809
814
  ]
815
+ },
816
+ "interactive": {
817
+ "description": "Enables interactive glass behavior, which adds a visual response to user interactions.\n\n**macOS 27.0+**. Only affects Liquid Glass effects.",
818
+ "type": "boolean",
819
+ "default": false
810
820
  }
811
821
  },
812
822
  "additionalProperties": false,
@@ -917,6 +927,16 @@
917
927
  "type": "string",
918
928
  "const": "underPageBackground"
919
929
  },
930
+ {
931
+ "description": "**macOS 26.0+**",
932
+ "type": "string",
933
+ "const": "liquidGlassRegular"
934
+ },
935
+ {
936
+ "description": "**macOS 26.0+**",
937
+ "type": "string",
938
+ "const": "liquidGlassClear"
939
+ },
920
940
  {
921
941
  "description": "Mica effect that matches the system dark preference **Windows 11 Only**",
922
942
  "type": "string",
@@ -1107,7 +1127,7 @@
1107
1127
  "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
1128
  "oneOf": [
1109
1129
  {
1110
- "description": "The scrollbar style to use in the webview.",
1130
+ "description": "The platform's native scrollbar, as rendered by the webview by default.\n\nThis is the only supported value outside of Windows.",
1111
1131
  "type": "string",
1112
1132
  "const": "default"
1113
1133
  },
@@ -1123,7 +1143,7 @@
1123
1143
  "type": "object",
1124
1144
  "properties": {
1125
1145
  "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>.",
1146
+ "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
1147
  "anyOf": [
1128
1148
  {
1129
1149
  "$ref": "#/definitions/Csp"
@@ -1145,7 +1165,7 @@
1145
1165
  ]
1146
1166
  },
1147
1167
  "freezePrototype": {
1148
- "description": "Freeze the `Object.prototype` when using the custom protocol.",
1168
+ "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
1169
  "type": "boolean",
1150
1170
  "default": false
1151
1171
  },
@@ -1171,7 +1191,7 @@
1171
1191
  ]
1172
1192
  },
1173
1193
  "pattern": {
1174
- "description": "The pattern to use.",
1194
+ "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
1195
  "default": {
1176
1196
  "use": "brownfield"
1177
1197
  },
@@ -1182,7 +1202,7 @@
1182
1202
  ]
1183
1203
  },
1184
1204
  "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```",
1205
+ "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
1206
  "type": "array",
1187
1207
  "items": {
1188
1208
  "$ref": "#/definitions/CapabilityEntry"
@@ -1818,6 +1838,65 @@
1818
1838
  "iconPath"
1819
1839
  ]
1820
1840
  },
1841
+ "AppDirectoriesOverride": {
1842
+ "description": "Overrides the directories returned by the `app_*_dir` path APIs.\n\nSee the `app > appDirectoriesOverride` config for how each path is resolved.",
1843
+ "anyOf": [
1844
+ {
1845
+ "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`.",
1846
+ "type": "string"
1847
+ },
1848
+ {
1849
+ "description": "Overrides for individual app directories.\n\nDirectories that are not listed keep their default location.",
1850
+ "allOf": [
1851
+ {
1852
+ "$ref": "#/definitions/AppDirectoryOverrides"
1853
+ }
1854
+ ]
1855
+ }
1856
+ ]
1857
+ },
1858
+ "AppDirectoryOverrides": {
1859
+ "description": "Overrides for individual app directories.",
1860
+ "type": "object",
1861
+ "properties": {
1862
+ "config": {
1863
+ "description": "Overrides the app config directory (`app_config_dir`, `$APPCONFIG`).",
1864
+ "type": [
1865
+ "string",
1866
+ "null"
1867
+ ]
1868
+ },
1869
+ "data": {
1870
+ "description": "Overrides the app data directory (`app_data_dir`, `$APPDATA`).",
1871
+ "type": [
1872
+ "string",
1873
+ "null"
1874
+ ]
1875
+ },
1876
+ "localData": {
1877
+ "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.",
1878
+ "type": [
1879
+ "string",
1880
+ "null"
1881
+ ]
1882
+ },
1883
+ "cache": {
1884
+ "description": "Overrides the app cache directory (`app_cache_dir`, `$APPCACHE`).",
1885
+ "type": [
1886
+ "string",
1887
+ "null"
1888
+ ]
1889
+ },
1890
+ "log": {
1891
+ "description": "Overrides the app log directory (`app_log_dir`, `$APPLOG`).",
1892
+ "type": [
1893
+ "string",
1894
+ "null"
1895
+ ]
1896
+ }
1897
+ },
1898
+ "additionalProperties": false
1899
+ },
1821
1900
  "BuildConfig": {
1822
1901
  "description": "The Build configuration object.\n\nSee more: <https://v2.tauri.app/reference/config/#buildconfig>",
1823
1902
  "type": "object",
@@ -1853,7 +1932,7 @@
1853
1932
  ]
1854
1933
  },
1855
1934
  "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.",
1935
+ "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
1936
  "anyOf": [
1858
1937
  {
1859
1938
  "$ref": "#/definitions/BeforeDevCommand"
@@ -1864,7 +1943,7 @@
1864
1943
  ]
1865
1944
  },
1866
1945
  "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.",
1946
+ "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
1947
  "anyOf": [
1869
1948
  {
1870
1949
  "$ref": "#/definitions/HookCommand"
@@ -1875,7 +1954,7 @@
1875
1954
  ]
1876
1955
  },
1877
1956
  "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.",
1957
+ "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
1958
  "anyOf": [
1880
1959
  {
1881
1960
  "$ref": "#/definitions/HookCommand"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tauri-apps/cli",
3
- "version": "3.0.0-alpha.2",
3
+ "version": "3.0.0-alpha.4",
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.2",
70
- "@tauri-apps/cli-win32-x64-msvc": "3.0.0-alpha.2",
71
- "@tauri-apps/cli-darwin-x64": "3.0.0-alpha.2",
72
- "@tauri-apps/cli-darwin-arm64": "3.0.0-alpha.2",
73
- "@tauri-apps/cli-linux-arm64-gnu": "3.0.0-alpha.2",
74
- "@tauri-apps/cli-linux-arm64-musl": "3.0.0-alpha.2",
75
- "@tauri-apps/cli-linux-arm-gnueabihf": "3.0.0-alpha.2",
76
- "@tauri-apps/cli-linux-x64-musl": "3.0.0-alpha.2",
77
- "@tauri-apps/cli-linux-riscv64-gnu": "3.0.0-alpha.2",
78
- "@tauri-apps/cli-win32-ia32-msvc": "3.0.0-alpha.2",
79
- "@tauri-apps/cli-win32-arm64-msvc": "3.0.0-alpha.2"
69
+ "@tauri-apps/cli-linux-x64-gnu": "3.0.0-alpha.4",
70
+ "@tauri-apps/cli-win32-x64-msvc": "3.0.0-alpha.4",
71
+ "@tauri-apps/cli-darwin-x64": "3.0.0-alpha.4",
72
+ "@tauri-apps/cli-darwin-arm64": "3.0.0-alpha.4",
73
+ "@tauri-apps/cli-linux-arm64-gnu": "3.0.0-alpha.4",
74
+ "@tauri-apps/cli-linux-arm64-musl": "3.0.0-alpha.4",
75
+ "@tauri-apps/cli-linux-arm-gnueabihf": "3.0.0-alpha.4",
76
+ "@tauri-apps/cli-linux-x64-musl": "3.0.0-alpha.4",
77
+ "@tauri-apps/cli-linux-riscv64-gnu": "3.0.0-alpha.4",
78
+ "@tauri-apps/cli-win32-ia32-msvc": "3.0.0-alpha.4",
79
+ "@tauri-apps/cli-win32-arm64-msvc": "3.0.0-alpha.4"
80
80
  }
81
81
  }