-
Notifications
You must be signed in to change notification settings - Fork 469
Description
Describe the bug
When using the Tauri autostart functionality in Flatpak-distributed apps, the generated autostart entry is incorrect and causes the app to fail on login.
Tauri currently assumes a native desktop binary, but Flatpak apps must be launched via flatpak run <APP_ID>. As a result, the autostart entry generated by Tauri does not work for Flatpak builds.
This issue affects any Tauri app distributed via Flathub that enables autostart.
Actual Behavior
Tauri generates an autostart entry similar to:
Exec=/app/bin/my-app --trayThis command cannot be executed outside the Flatpak sandbox, so the app does not start on login.
Why This Happens
Flatpak apps are containerized and must be launched via Flatpak itself.
Unlike native binaries, the app binary inside /app/bin is not directly executable by the host session manager at login.
Workaround
I implemented a manual Flatpak-specific autostart handler to bypass Tauri’s autostart module when the flatpak feature is enabled.
Example workaround code:
#[cfg(feature = "flatpak")]
pub fn manage_flatpak_autostart(enable: bool) -> Result<(), String> {
use std::fs;
use std::path::PathBuf;
let home = std::env::var("HOME")
.map_err(|_| "Could not find HOME environment variable")?;
let autostart_dir = PathBuf::from(home).join(".config/autostart");
let desktop_file_path =
autostart_dir.join("io.github.zarestia_dev.rclone-manager.desktop");
if enable {
fs::create_dir_all(&autostart_dir)
.map_err(|e| format!("Failed to create autostart directory: {e}"))?;
let content = r#"[Desktop Entry]
Type=Application
Name=RClone Manager
Comment=RClone Manager flatpak autostart entry (Not handled by tauri)
Exec=/usr/bin/flatpak run io.github.zarestia_dev.rclone-manager --tray
X-Flatpak=io.github.zarestia_dev.rclone-manager
Terminal=false
"#;
fs::write(&desktop_file_path, content)
.map_err(|e| format!("Failed to write autostart file: {e}"))?;
} else if desktop_file_path.exists() {
fs::remove_file(&desktop_file_path)
.map_err(|e| format!("Failed to remove autostart file: {e}"))?;
}
Ok(())
}While this works, it feels like something the Tauri autostart plugin (or docs) should handle or at least document.
Documentation Gap
There is currently no mention in the Tauri docs that:
- Autostart behaves differently for Flatpak
- The default autostart plugin is not compatible with Flatpak packaging
Additional Suggested Solution: Flatpak App ID Override
Allow developers to provide a static Flatpak App ID at build time, which Tauri can use when generating autostart entries for Flatpak bundles.
For example, Tauri could read an environment variable such as:
TAURI_FLATPAK_ID
When this variable is set, the autostart plugin would generate:
Exec=/usr/bin/flatpak run <TAURI_FLATPAK_ID>instead of pointing to a native binary path.
This approach works well with Flathub’s build system, where environment variables are commonly defined in the manifest:
- name: rclone-manager
buildsystem: simple
build-options:
append-path: /usr/lib/sdk/node20/bin:/usr/lib/sdk/rust-stable/bin
env:
CARGO_HOME: /run/build/rclone-manager/cargo
NPM_CONFIG_LOGLEVEL: info
npm_config_cache: /run/build/rclone-manager/flatpak-node/npm-cache
npm_config_nodedir: /usr/lib/sdk/node20
npm_config_offline: 'true'
TAURI_FLATPAK_ID: "io.github.zarestia_dev.rclone-manager"
sources:
- type: git
url: https://github.com/Zarestia-Dev/rclone-manager.git
tag: v0.1.8
- npm-sources.json
- cargo-sources.jsonReproduction
Reproduction Steps (Flatpak + Autostart)
Steps
-
Install the Flatpak application from Flathub:
flatpak install io.github.zarestia_dev.rclone-manager
Not gonna work after v0.1.9
-
Launch the application.
-
Inside the app open preferences, enable Autostart using the built-in Tauri autostart feature.
-
Inspect the generated autostart entry:
cat ~/.config/autostart/*.desktop
-
Observe the generated
.desktopfile for the app (for example):Exec=/app/bin/rclone-manager --tray -
Reboot the system or log out and log back in.
Expected Result
The application should start automatically on login using Flatpak:
Exec=/usr/bin/flatpak run io.github.zarestia_dev.rclone-manager --trayActual Result
The autostart entry points to a non-existent native binary path:
Exec=/app/bin/rclone-manager --trayAs a result:
- The app does not start on login
- Autostart silently fails
- Users must manually fix or recreate the autostart entry
Expected behavior
For Flatpak builds, the autostart entry should be compatible with Flatpak, e.g.:
Exec=/usr/bin/flatpak run io.github.example.app --trayFull tauri info output
[✔] Environment
- OS: Arch Linux Rolling Release x86_64 (X64) (gnome on wayland)
✔ webkit2gtk-4.1: 2.50.3
✔ rsvg2: 2.61.3
✔ rustc: 1.91.1 (ed61e7d7e 2025-11-07)
✔ cargo: 1.91.1 (ea2d97820 2025-10-10)
✔ rustup: 1.28.2 (2025-07-07)
✔ Rust toolchain: stable-x86_64-unknown-linux-gnu (default)
- node: 25.2.1
- npm: 11.6.4
[-] Packages
- tauri 🦀: 2.9.4, (outdated, latest: 2.9.5)
- tauri-build 🦀: 2.5.3
- wry 🦀: 0.53.5
- tao 🦀: 0.34.5
- @tauri-apps/api ⱼₛ: 2.9.1
- @tauri-apps/cli ⱼₛ: 2.9.5 (outdated, latest: 2.9.6)
[-] Plugins
- tauri-plugin-notification 🦀: 2.3.3
- @tauri-apps/plugin-notification ⱼₛ: 2.3.3
- tauri-plugin-store 🦀: 2.4.1
- @tauri-apps/plugin-store ⱼₛ: 2.4.1
- tauri-plugin-os 🦀: 2.3.2
- @tauri-apps/plugin-os ⱼₛ: 2.3.2
- tauri-plugin-updater 🦀: 2.9.0
- @tauri-apps/plugin-updater ⱼₛ: 2.9.0
- tauri-plugin-fs 🦀: 2.4.4
- @tauri-apps/plugin-fs ⱼₛ: not installed!
- tauri-plugin-shell 🦀: 2.3.3
- @tauri-apps/plugin-shell ⱼₛ: 2.3.3
- tauri-plugin-global-shortcut 🦀: 2.3.1
- @tauri-apps/plugin-global-shortcut ⱼₛ: not installed!
- tauri-plugin-dialog 🦀: 2.4.2
- @tauri-apps/plugin-dialog ⱼₛ: 2.4.2
- tauri-plugin-autostart 🦀: 2.5.1
- @tauri-apps/plugin-autostart ⱼₛ: 2.5.1
- tauri-plugin-http 🦀: 2.5.4
- @tauri-apps/plugin-http ⱼₛ: 2.5.4
- tauri-plugin-single-instance 🦀: 2.3.6
- @tauri-apps/plugin-single-instance ⱼₛ: not installed!
- tauri-plugin-opener 🦀: 2.5.2
- @tauri-apps/plugin-opener ⱼₛ: 2.5.2
[-] App
- build-type: bundle
- CSP: unset
- frontendDist: ../dist/rclone-manager/browser
- devUrl: http://localhost:1420/
- framework: Angular
- bundler: Webpack
Stack trace
Additional context
No response