-
Notifications
You must be signed in to change notification settings - Fork 469
Description
Describe the bug
Summary
The Tauri single-instance plugin's D-Bus service naming pattern is incompatible with Flatpak/Flathub requirements and violates D-Bus naming conventions, causing Tauri apps to be rejected from Flathub.
Issue Details
Current Behavior
The single-instance plugin uses D-Bus service names in the format: org.{appId}.SingleInstance
For example, an app with:
- Flatpak ID:
me.amankhanna.opendeck - Tauri app ID:
opendeck
Creates D-Bus service: org.opendeck.SingleInstance
Problem
Flathub's flatpak-builder-lint tool rejects this pattern because:
- The D-Bus service name doesn't match the app's reverse-DNS Flatpak ID
- It violates D-Bus naming conventions which require owned names to be under the application's namespace
- It creates potential naming conflicts between different apps
Impact
- Flatpak maintainers have rejected exception requests for this pattern
- Two existing Tauri apps with exceptions (
com.bilingify.readestanddev.mrquantumoff.mcmodpackmanager) will have their exceptions removed - Flathub maintainers have stated they will block all Tauri apps if this isn't fixed
- Affects all Tauri apps using the single-instance plugin on Flatpak/Snap
References
- Original PR discussion: exceptions: allow finish-args-own-name-org.opendeck.SingleInstance for me.amankhanna.opendeck flathub-infra/flatpak-builder-lint#819
- Tauri single-instance docs: https://v2.tauri.app/plugin/single-instance/#usage-in-snap-and-flatpak
- D-Bus naming conventions: https://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-names
Additional Context
Quote from Flathub maintainer (bbhtt):
"It needs to follow the appid not use a random dbus name that starts with
org.. That's literally how everything else works including it is how things should be done per the dbus spec. [...] We will block all Tauri apps if we have to."
This is a critical issue for the Tauri ecosystem's Flatpak/Linux distribution story.
Reproduction
No response
Expected behavior
No response
Full tauri info output
[✔] Environment
- OS: Mac OS 15.6.1 arm64 (X64)
✔ Xcode Command Line Tools: installed
✔ Xcode: 26.2
✔ rustc: 1.92.0 (ded5c06cf 2025-12-08)
✔ cargo: 1.92.0 (344c4567c 2025-10-21)
✔ rustup: 1.28.2 (e4f3ad6f8 2025-04-28)
✔ Rust toolchain: stable-aarch64-apple-darwin (default)
- node: 22.9.0
- pnpm: 10.25.0
- yarn: 1.22.22
- npm: 10.9.1
[-] Packages
- tauri 🦀: 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.6
[-] Plugins
- tauri-plugin-persisted-scope 🦀: 2.3.4
- @tauri-apps/plugin-persisted-scope ⱼₛ: not installed!
- tauri-plugin-fs 🦀: 2.4.4
- @tauri-apps/plugin-fs ⱼₛ: 2.4.4
- tauri-plugin-cli 🦀: 2.4.1
- @tauri-apps/plugin-cli ⱼₛ: 2.4.1
- tauri-plugin-dialog 🦀: 2.4.2
- @tauri-apps/plugin-dialog ⱼₛ: 2.4.2
- tauri-plugin-log 🦀: 2.7.1
- @tauri-apps/plugin-log ⱼₛ: 2.7.1
- tauri-plugin-updater 🦀: 2.9.0
- @tauri-apps/plugin-updater ⱼₛ: 2.9.0
- tauri-plugin-window-state 🦀: 2.4.1
- @tauri-apps/plugin-window-state ⱼₛ: not installed!
- tauri-plugin-haptics 🦀: 2.3.2
- @tauri-apps/plugin-haptics ⱼₛ: 2.3.2
- tauri-plugin-websocket 🦀: 2.4.1
- @tauri-apps/plugin-websocket ⱼₛ: 2.4.1
- tauri-plugin-process 🦀: 2.3.1
- @tauri-apps/plugin-process ⱼₛ: 2.3.1
- tauri-plugin-http 🦀: 2.5.4
- @tauri-apps/plugin-http ⱼₛ: 2.5.4
- tauri-plugin-os 🦀: 2.3.2
- @tauri-apps/plugin-os ⱼₛ: 2.3.2
- tauri-plugin-shell 🦀: 2.3.3
- @tauri-apps/plugin-shell ⱼₛ: 2.3.3
- tauri-plugin-opener 🦀: 2.5.2
- @tauri-apps/plugin-opener ⱼₛ: 2.5.2
- tauri-plugin-deep-link 🦀: 2.4.5
- @tauri-apps/plugin-deep-link ⱼₛ: 2.4.5
- tauri-plugin-single-instance 🦀: 2.3.6
- @tauri-apps/plugin-single-instance ⱼₛ: not installed!
[-] App
- build-type: bundle
- CSP: frame-src 'self' blob: asset: http://asset.localhost https://*.stripe.com; font-src 'self' blob: data: asset: http://asset.localhost tauri: https://db.onlinewebfonts.com https://cdn.jsdelivr.net https://fonts.gstatic.com https://chinese-fonts-cdn.netlify.app https://cdnjs.cloudflare.com; default-src 'self' 'unsafe-inline' blob: data: customprotocol: asset: http://asset.localhost ipc: http://ipc.localhost; connect-src 'self' blob: data: asset: http://asset.localhost ipc: http://ipc.localhost http://*:* https://*:* https://*.sentry.io https://*.posthog.com https://*.deepl.com https://*.wikipedia.org https://*.wiktionary.org https://*.supabase.co https://*.readest.com wss://speech.platform.bing.com https://*.cloudflarestorage.com https://translate.googleapis.com https://translate.toil.cc https://*.microsofttranslator.com https://edge.microsoft.com https://*.googleusercontent.com; img-src 'self' blob: data: asset: http://asset.localhost https://* https://*:* http://* http://*:*; style-src 'self' 'unsafe-inline' blob: asset: http://asset.localhost https://cdn.jsdelivr.net https://fonts.googleapis.com https://chinese-fonts-cdn.netlify.app https://cdnjs.cloudflare.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: asset: http://asset.localhost https://*.sentry.io https://*.posthog.com https://*.stripe.com
- frontendDist: ../out
- devUrl: http://localhost:3000/
- framework: React (Next.js)
- bundler: Webpack
Stack trace
Additional context
No response