From 0ac23e92dd66e849641e4eda8e07ff5104084364 Mon Sep 17 00:00:00 2001 From: Erwan Leboucher Date: Mon, 20 Jul 2026 09:42:49 +0200 Subject: [PATCH] feat: optional tauri auto-updater behind cargo feature Add cargo feature (on by default) so downstream builders can disable the Tauri auto-updater with --no-default-features --features wry. - tauri-plugin-updater becomes an optional dependency - plugin registration gated by #[cfg(all(desktop, feature = updater))] - updater:default permission moved to its own capabilities/updater/updater.json - build.rs selects the capability glob based on the feature, since tauri-build fails on permissions from missing plugins --- src-tauri/Cargo.toml | 6 ++++-- src-tauri/build.rs | 11 ++++++++++- src-tauri/capabilities/desktop.json | 1 - src-tauri/capabilities/updater/updater.json | 7 +++++++ src-tauri/src/lib.rs | 4 +++- src/app/generated/tauri/commands.ts | 2 +- src/app/generated/tauri/index.ts | 2 +- src/app/generated/tauri/types.ts | 2 +- 8 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 src-tauri/capabilities/updater/updater.json diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 48aa95609..aae07b376 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -70,7 +70,7 @@ tauri-plugin-notifications = { git = "https://github.com/SableClient/tauri-plugi tauri-plugin-notifications = { git = "https://github.com/SableClient/tauri-plugin-notifications.git", rev = "df09f08e64b840e4d51cde2720030836eed40f4c", default-features = false } [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] -tauri-plugin-updater = "2" +tauri-plugin-updater = { version = "2", optional = true } tauri-plugin-process = "2" tauri-plugin-dialog = "2" tauri-plugin-window-state = "2.4.1" @@ -101,9 +101,11 @@ tauri-plugin-android-fs = { version = "=28.4.0", features = ["legacy-storage-per jni = "0.21" [features] -default = ["wry"] +default = ["wry", "updater"] custom-protocol = ["tauri/custom-protocol"] wry = ["tauri/wry"] +# Tauri auto-updater. Disable with --no-default-features --features wry,cef. +updater = ["dep:tauri-plugin-updater"] # CEF (Chromium) runtime. Build with --no-default-features --features cef. cef = ["dep:tauri-runtime-cef", "dep:cef"] [patch.crates-io] diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 5bf985ab8..704ebff1b 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -16,5 +16,14 @@ fn main() { tauri_typegen::BuildSystem::generate_at_build_time() .expect("Failed to generate TypeScript bindings"); - tauri_build::build() + // tauri-build fails on permissions from missing plugins, so only glob the + // updater capability file when the `updater` feature is on. + #[cfg(feature = "updater")] + let tauri_attrs = + tauri_build::Attributes::new().capabilities_path_pattern("./capabilities/**/*.json"); + #[cfg(not(feature = "updater"))] + let tauri_attrs = + tauri_build::Attributes::new().capabilities_path_pattern("./capabilities/*.json"); + + tauri_build::try_build(tauri_attrs).expect("tauri-build failed"); } diff --git a/src-tauri/capabilities/desktop.json b/src-tauri/capabilities/desktop.json index 8f6696cd1..f42f6888e 100644 --- a/src-tauri/capabilities/desktop.json +++ b/src-tauri/capabilities/desktop.json @@ -8,7 +8,6 @@ "window-state:default", "store:default", "notifications:default", - "updater:default", "process:default", "dialog:default" ] diff --git a/src-tauri/capabilities/updater/updater.json b/src-tauri/capabilities/updater/updater.json new file mode 100644 index 000000000..9a92dd18c --- /dev/null +++ b/src-tauri/capabilities/updater/updater.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../gen/schemas/desktop-schema.json", + "identifier": "updater-capability", + "platforms": ["macOS", "windows", "linux"], + "windows": ["main"], + "permissions": ["updater:default"] +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 088b4ce3f..24207fc97 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -242,9 +242,11 @@ pub fn run() { #[cfg(any(mobile, desktop))] let builder = builder.plugin(tauri_plugin_notifications::init()); + #[cfg(all(desktop, feature = "updater"))] + let builder = builder.plugin(tauri_plugin_updater::Builder::new().build()); + #[cfg(desktop)] let builder = builder - .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_dialog::init()); diff --git a/src/app/generated/tauri/commands.ts b/src/app/generated/tauri/commands.ts index 58feb867d..5dbe7aa78 100644 --- a/src/app/generated/tauri/commands.ts +++ b/src/app/generated/tauri/commands.ts @@ -1,7 +1,7 @@ /** * Auto-generated TypeScript bindings for Tauri commands * Generated by tauri-typegen v0.5.0 - * Generated at: 2026-07-20T05:55:07.154868857+00:00 + * Generated at: 2026-07-20T16:38:06.342501881+00:00 * Generator: none * * Do not edit manually - regenerate using: cargo tauri-typegen generate diff --git a/src/app/generated/tauri/index.ts b/src/app/generated/tauri/index.ts index 5fed3c34d..8b14e93b1 100644 --- a/src/app/generated/tauri/index.ts +++ b/src/app/generated/tauri/index.ts @@ -1,7 +1,7 @@ /** * Auto-generated TypeScript bindings for Tauri commands * Generated by tauri-typegen v0.5.0 - * Generated at: 2026-07-20T05:55:07.155133577+00:00 + * Generated at: 2026-07-20T16:38:06.342846421+00:00 * Generator: none * * Do not edit manually - regenerate using: cargo tauri-typegen generate diff --git a/src/app/generated/tauri/types.ts b/src/app/generated/tauri/types.ts index c6a8ffdb2..0ad332e0c 100644 --- a/src/app/generated/tauri/types.ts +++ b/src/app/generated/tauri/types.ts @@ -1,7 +1,7 @@ /** * Auto-generated TypeScript bindings for Tauri commands * Generated by tauri-typegen v0.5.0 - * Generated at: 2026-07-20T05:55:07.154428637+00:00 + * Generated at: 2026-07-20T16:38:06.341992373+00:00 * Generator: none * * Do not edit manually - regenerate using: cargo tauri-typegen generate