Skip to content

Single-instance plugin D-Bus naming violates Flatpak/D-Bus conventions - causing Flathub rejections #3184

@chrox

Description

@chrox

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:

  1. The D-Bus service name doesn't match the app's reverse-DNS Flatpak ID
  2. It violates D-Bus naming conventions which require owned names to be under the application's namespace
  3. 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.readest and dev.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

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions