Add native self-hosted instance connection to fluxer_desktop

Trimmed monorepo checkout (fluxer_desktop + packages/voice_engine_v2 +
tools/ci) with a "Connect to a Different Server" menu item and popout
that lets the desktop app switch to any self-hosted Fluxer instance,
plus fixes for well-known discovery on single-domain self-hosted
deployments and a false-positive ERR_ABORTED on same-origin client
redirects during the switch. Defaults to chat.fluxr.chat and uses an
isolated userData directory from the official build.
This commit is contained in:
2026-07-01 18:22:43 -04:00
commit 682afacd30
1763 changed files with 613720 additions and 0 deletions
@@ -0,0 +1,26 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
[Desktop Entry]
Name=Fluxer
GenericName=Instant Messenger
Comment=Instant messaging and VoIP
Exec=app.fluxer.Fluxer %U
TryExec=app.fluxer.Fluxer
Icon=app.fluxer.Fluxer
Type=Application
Categories=Network;InstantMessaging;Chat;
Keywords=chat;im;messaging;messenger;voip;voice;video;call;
StartupWMClass=app.fluxer.Fluxer
SingleMainWindow=true
StartupNotify=true
MimeType=x-scheme-handler/fluxer;
Terminal=false
X-GNOME-UsesNotifications=true
Actions=open-settings;new-dm;
[Desktop Action open-settings]
Name=Open Settings
Exec=app.fluxer.Fluxer --fluxer-task=open-settings %U
[Desktop Action new-dm]
Name=New Direct Message
Exec=app.fluxer.Fluxer --fluxer-task=new-dm %U
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<component type="desktop-application">
<id>app.fluxer.Fluxer</id>
<launchable type="desktop-id">app.fluxer.Fluxer.desktop</launchable>
<name>Fluxer</name>
<developer id="app.fluxer">
<name>Fluxer</name>
</developer>
<summary>Instant messaging and VoIP</summary>
<metadata_license>CC0-1.0</metadata_license>
<project_license>AGPL-3.0-or-later</project_license>
<icon type="stock">app.fluxer.Fluxer</icon>
<description>
<p>Fluxer is a free and open-source instant messaging and voice-over-IP application. It provides text chat, voice calls, video calls, and screen sharing in a modern interface.</p>
<p>Features include:</p>
<ul>
<li>Text messaging with rich formatting and media support</li>
<li>Voice and video calls</li>
<li>Screen sharing</li>
<li>Communities with channels</li>
<li>Direct messages and group chats</li>
<li>Custom emoji and reactions</li>
</ul>
</description>
<categories>
<category>Network</category>
<category>InstantMessaging</category>
<category>Chat</category>
</categories>
<keywords>
<keyword>chat</keyword>
<keyword>im</keyword>
<keyword>messaging</keyword>
<keyword>messenger</keyword>
<keyword>voip</keyword>
<keyword>voice</keyword>
<keyword>video</keyword>
<keyword>call</keyword>
</keywords>
<branding>
<color type="primary">#4641D9</color>
</branding>
<screenshots>
<screenshot type="default">
<caption>The main Fluxer window.</caption>
<image type="source" width="1920" height="1080">https://fluxerstatic.com/marketing/screenshots/desktop-1920w.avif</image>
</screenshot>
</screenshots>
<releases>
<release version="0.0.8" date="2026-02-16"/>
</releases>
<url type="bugtracker">https://github.com/fluxerapp/fluxer/issues</url>
<url type="homepage">https://fluxer.app</url>
<url type="donation">https://fluxer.app/donate</url>
<url type="vcs-browser">https://github.com/fluxerapp/fluxer.git</url>
<update_contact>fen@unix.dog</update_contact>
<provides>
<binary>app.fluxer.Fluxer</binary>
</provides>
<content_rating type="oars-1.1">
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-info">intense</content_attribute>
<content_attribute id="social-audio">intense</content_attribute>
<content_attribute id="social-contacts">intense</content_attribute>
<content_attribute id="money-purchasing">intense</content_attribute>
</content_rating>
<requires>
<internet>always</internet>
</requires>
<supports>
<control>keyboard</control>
<control>pointing</control>
</supports>
</component>
@@ -0,0 +1,2 @@
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33.87 33.87"><g transform="translate(-32.28 -138.64)"><circle cx="49.21" cy="155.57" r="15.74" fill="none" stroke="currentColor" stroke-width=".26" opacity=".2" style="marker:none"/><path fill="#4641D9" d="M65.09 155.57a15.87 15.87 0 1 0-31.75 0 15.87 15.87 0 0 0 31.75 0z"/><path fill="#fff" d="M40.84 154.16c-.83 0-1.53-.68-1.42-1.5.1-.9.34-1.66.69-2.29a5 5 0 0 1 2.1-2.08 6.07 6.07 0 0 1 2.74-.65c.97 0 1.84.21 2.63.65a17 17 0 0 1 2.76 1.96c.7.6 1.26 1.02 1.66 1.28.41.24.88.36 1.4.36.82 0 1.47-.29 1.94-.88.23-.28.4-.62.52-1.03a1.9 1.9 0 0 1 1.73-1.57c.83 0 1.53.66 1.43 1.5a7.5 7.5 0 0 1-.69 2.3 5 5 0 0 1-2.12 2.08c-.87.43-1.79.65-2.75.65-.98 0-1.86-.21-2.65-.62a17.3 17.3 0 0 1-2.75-2c-.69-.6-1.24-1.02-1.67-1.27a2.71 2.71 0 0 0-1.4-.38c-.77 0-1.4.27-1.9.8-.26.27-.45.65-.57 1.12a1.86 1.86 0 0 1-1.68 1.57Zm0 8.64c-.83 0-1.53-.68-1.42-1.5.1-.9.34-1.67.69-2.3a5 5 0 0 1 2.1-2.08 6.07 6.07 0 0 1 2.74-.65c.97 0 1.84.22 2.63.65a17 17 0 0 1 2.76 1.96c.7.6 1.26 1.03 1.66 1.28.41.25.88.37 1.4.37.82 0 1.47-.3 1.94-.89.23-.28.4-.62.52-1.03a1.9 1.9 0 0 1 1.73-1.57c.83 0 1.53.67 1.43 1.5a7.5 7.5 0 0 1-.69 2.3 5 5 0 0 1-2.12 2.08c-.87.44-1.79.66-2.75.66-.98 0-1.86-.21-2.65-.62a17.3 17.3 0 0 1-2.75-2c-.69-.6-1.24-1.03-1.67-1.27a2.71 2.71 0 0 0-1.4-.39c-.77 0-1.4.27-1.9.8-.26.28-.45.65-.57 1.12a1.86 1.86 0 0 1-1.68 1.57z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,26 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
[Desktop Entry]
Name=Fluxer Canary
GenericName=Instant Messenger
Comment=Canary build of Fluxer
Exec=app.fluxer.FluxerCanary %U
TryExec=app.fluxer.FluxerCanary
Icon=app.fluxer.FluxerCanary
Type=Application
Categories=Network;InstantMessaging;Chat;
Keywords=chat;im;messaging;messenger;voip;voice;video;call;
StartupWMClass=app.fluxer.FluxerCanary
SingleMainWindow=true
StartupNotify=true
MimeType=x-scheme-handler/fluxer;
Terminal=false
X-GNOME-UsesNotifications=true
Actions=open-settings;new-dm;
[Desktop Action open-settings]
Name=Open Settings
Exec=app.fluxer.FluxerCanary --fluxer-task=open-settings %U
[Desktop Action new-dm]
Name=New Direct Message
Exec=app.fluxer.FluxerCanary --fluxer-task=new-dm %U
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<component type="desktop-application">
<id>app.fluxer.FluxerCanary</id>
<launchable type="desktop-id">app.fluxer.FluxerCanary.desktop</launchable>
<name>Fluxer Canary</name>
<developer id="app.fluxer">
<name>Fluxer</name>
</developer>
<summary>Canary build of Fluxer</summary>
<metadata_license>CC0-1.0</metadata_license>
<project_license>AGPL-3.0-or-later</project_license>
<icon type="stock">app.fluxer.FluxerCanary</icon>
<description>
<p>Fluxer Canary is the pre-release desktop build of Fluxer, a free and open-source instant messaging and voice-over-IP application.</p>
<p>Features include:</p>
<ul>
<li>Text messaging with rich formatting and media support</li>
<li>Voice and video calls</li>
<li>Screen sharing</li>
<li>Communities with channels</li>
<li>Direct messages and group chats</li>
<li>Custom emoji and reactions</li>
</ul>
</description>
<categories>
<category>Network</category>
<category>InstantMessaging</category>
<category>Chat</category>
</categories>
<keywords>
<keyword>chat</keyword>
<keyword>im</keyword>
<keyword>messaging</keyword>
<keyword>messenger</keyword>
<keyword>voip</keyword>
<keyword>voice</keyword>
<keyword>video</keyword>
<keyword>call</keyword>
</keywords>
<branding>
<color type="primary">#FFA600</color>
</branding>
<screenshots>
<screenshot type="default">
<caption>The main Fluxer window.</caption>
<image type="source" width="1920" height="1080">https://fluxerstatic.com/marketing/screenshots/desktop-1920w.avif</image>
</screenshot>
</screenshots>
<url type="bugtracker">https://github.com/fluxerapp/fluxer/issues</url>
<url type="homepage">https://canary.fluxer.app</url>
<url type="donation">https://fluxer.app/donate</url>
<url type="vcs-browser">https://github.com/fluxerapp/fluxer.git</url>
<update_contact>fen@unix.dog</update_contact>
<provides>
<binary>app.fluxer.FluxerCanary</binary>
</provides>
<content_rating type="oars-1.1">
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-info">intense</content_attribute>
<content_attribute id="social-audio">intense</content_attribute>
<content_attribute id="social-contacts">intense</content_attribute>
<content_attribute id="money-purchasing">intense</content_attribute>
</content_rating>
<requires>
<internet>always</internet>
</requires>
<supports>
<control>keyboard</control>
<control>pointing</control>
</supports>
</component>
@@ -0,0 +1,2 @@
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33.87 33.87"><g transform="translate(-32.28 -138.64)"><circle cx="49.21" cy="155.57" r="15.74" fill="none" stroke="currentColor" stroke-width=".26" opacity=".2" style="marker:none"/><path fill="#FFA600" d="M65.09 155.57a15.87 15.87 0 1 0-31.75 0 15.87 15.87 0 0 0 31.75 0z"/><path fill="#fff" d="M40.84 154.16c-.83 0-1.53-.68-1.42-1.5.1-.9.34-1.66.69-2.29a5 5 0 0 1 2.1-2.08 6.07 6.07 0 0 1 2.74-.65c.97 0 1.84.21 2.63.65a17 17 0 0 1 2.76 1.96c.7.6 1.26 1.02 1.66 1.28.41.24.88.36 1.4.36.82 0 1.47-.29 1.94-.88.23-.28.4-.62.52-1.03a1.9 1.9 0 0 1 1.73-1.57c.83 0 1.53.66 1.43 1.5a7.5 7.5 0 0 1-.69 2.3 5 5 0 0 1-2.12 2.08c-.87.43-1.79.65-2.75.65-.98 0-1.86-.21-2.65-.62a17.3 17.3 0 0 1-2.75-2c-.69-.6-1.24-1.02-1.67-1.27a2.71 2.71 0 0 0-1.4-.38c-.77 0-1.4.27-1.9.8-.26.27-.45.65-.57 1.12a1.86 1.86 0 0 1-1.68 1.57Zm0 8.64c-.83 0-1.53-.68-1.42-1.5.1-.9.34-1.67.69-2.3a5 5 0 0 1 2.1-2.08 6.07 6.07 0 0 1 2.74-.65c.97 0 1.84.22 2.63.65a17 17 0 0 1 2.76 1.96c.7.6 1.26 1.03 1.66 1.28.41.25.88.37 1.4.37.82 0 1.47-.3 1.94-.89.23-.28.4-.62.52-1.03a1.9 1.9 0 0 1 1.73-1.57c.83 0 1.53.67 1.43 1.5a7.5 7.5 0 0 1-.69 2.3 5 5 0 0 1-2.12 2.08c-.87.44-1.79.66-2.75.66-.98 0-1.86-.21-2.65-.62a17.3 17.3 0 0 1-2.75-2c-.69-.6-1.24-1.03-1.67-1.27a2.71 2.71 0 0 0-1.4-.39c-.77 0-1.4.27-1.9.8-.26.28-.45.65-.57 1.12a1.86 1.86 0 0 1-1.68 1.57z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB