Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
205 commits
Select commit Hold shift + click to select a range
575a2d1
Refactor connection handling: separate SM resumption and fresh sessio…
mremond Feb 14, 2026
9992065
Add SM patches for XMPP: debounce <a/> stanzas and fix ackQueue desyn…
mremond Feb 14, 2026
dce49a0
Update `tauri:dev` script to enable verbose logging
mremond Feb 14, 2026
6e95283
Refactor connection handling and enhance reconnection flow
mremond Feb 14, 2026
299504e
Refactor `XmppConsole`: improve performance with `useCallback`/`React…
mremond Feb 14, 2026
8ecd719
Refactor `MAM`: Limit trafic on connect
mremond Feb 14, 2026
2f4a4ac
Refactor connection fallback: resolve proper WebSocket URL and improv…
mremond Feb 14, 2026
b4814e1
Add `useChatActive` hook to optimize active conversation handling
mremond Feb 14, 2026
30923ff
Add `useChatActive` hook to optimize active conversation handling
mremond Feb 14, 2026
aa8c2b7
Introduce a state machine for managing connection states
mremond Feb 14, 2026
c03e476
Update `RELEASE.md` with detailed branch workflows for beta process
mremond Feb 14, 2026
01bdca6
Expand connection state machine tests to cover edge cases and ensure …
mremond Feb 14, 2026
868bb67
Enhance type flexibility in components to support `ContactIdentity` a…
mremond Feb 14, 2026
a9a74a5
Remove unused `ownPresence` prop and related logic from `ChatView` co…
mremond Feb 14, 2026
4a1b364
Remove unused `ownPresence` prop and related logic from `ChatView` co…
mremond Feb 14, 2026
995c446
Add guards to skip unnecessary MAM operations during SM resumption an…
mremond Feb 14, 2026
8e696b2
chore: bump version to 0.13.2-beta.1
mremond Feb 14, 2026
0bc58d5
fix: handle prerelease versions in Linux package builds
mremond Feb 14, 2026
7ea96b0
fix: patch tauri.conf.json version for MSI/bundle compatibility on pr…
mremond Feb 14, 2026
0587dc3
chore: update Cargo.lock and bundleVersion for 0.13.2-beta.1
mremond Feb 14, 2026
3e3d8a5
fix: patch Cargo.toml version for Tauri v2 and use safer sed delimite…
mremond Feb 14, 2026
5915437
Fix pre-release process
mremond Feb 14, 2026
6f49c4d
fix: always run version patching step, remove conditional gate
mremond Feb 14, 2026
f3176bd
fix: strip prerelease suffix to base semver for Tauri v2 compatibility
mremond Feb 14, 2026
9ab6978
fix: use sed instead of bash substitution for deb version tilde
mremond Feb 14, 2026
418c1a6
feat: enhance connection reliability with keepalive improvements and …
mremond Feb 15, 2026
9457f63
Fix render loops in RoomView and Sidebar by using focused store selec…
mremond Feb 15, 2026
5fda421
Add render stability tests, memoize store selectors, and fix test setup
mremond Feb 15, 2026
bb4ee9e
Fix SRV priority sorting and TLS SNI domain handling, extract dns.rs …
mremond Feb 15, 2026
636c231
Add --dangerous-insecure-tls CLI flag to disable TLS certificate veri…
mremond Feb 15, 2026
94650f2
Fix room avatar loss when occupant goes offline
mremond Feb 15, 2026
d7ae935
Include JS logs in Rust log as default in Verbose mode
mremond Feb 15, 2026
818801d
Add commit id in Rust verbose logs
mremond Feb 15, 2026
44f2543
Add least during development phase, always generate a log file in the…
mremond Feb 15, 2026
53db9f8
Add a shortcut to access the logs
mremond Feb 15, 2026
4802e39
Add diagnostic logging to SDK for user troubleshooting
mremond Feb 15, 2026
053cdec
Fix UI freeze on reconnect after sleep/network change
mremond Feb 15, 2026
7a93a18
Refactor `sendIQ` to centralize error handling and improve dead socke…
mremond Feb 15, 2026
443f063
Improve MAM error handling for disconnected states
mremond Feb 15, 2026
3327b0f
Consolidate wake/sleep/idle hooks into single usePlatformState hook
mremond Feb 15, 2026
7a61265
Adding missing `console.info` forwarding to Rust log for consistent d…
mremond Feb 15, 2026
7a7e780
Fix MAM query direction after reconnect by loading cache before direc…
mremond Feb 15, 2026
3036d35
Limit freeze after wake from sleep by handling disconnect during XMPP…
mremond Feb 16, 2026
31a8faf
Add `supportsMAM` field to Room entity and fix MAM history completene…
mremond Feb 16, 2026
22e7392
Fix place for MAM query logging
mremond Feb 16, 2026
d41e284
Tweak MUC room checking
mremond Feb 16, 2026
746586a
Extract 4 focused modules from Connection.ts
mremond Feb 16, 2026
72d8e1a
Fix log message
mremond Feb 16, 2026
047bb78
Capture resources load error in Rust logs
mremond Feb 16, 2026
9d76742
Simplify proxy, as we are going to remove it in favor of IPC at some …
mremond Feb 16, 2026
df4c5a9
Do force MAM catch-up everytime we active a room
mremond Feb 16, 2026
fa2f353
Fix avatar blob URL memory leak by adding deduplication pool
mremond Feb 16, 2026
cc04650
Fix failing test
mremond Feb 16, 2026
c916325
Fix UI freeze after server restart (system-shutdown stream error)
mremond Feb 16, 2026
77261f5
Document `NO_COLOR` environment variable to disable console color out…
mremond Feb 16, 2026
03b4e8c
Use system DNS as default with fallback to Tokio default DNS resolver
mremond Feb 16, 2026
7f0536a
Fix duplicate messages from IRC bridges in MAM queries
mremond Feb 16, 2026
4eaf042
Add Russian, Belarusian, and Ukrainian translations
mremond Feb 16, 2026
3024800
Add Simplified Chinese translation
mremond Feb 16, 2026
144f8e5
Hide the verifying connection status if the verification is quick
mremond Feb 16, 2026
85d3b07
Update number of languages
mremond Feb 16, 2026
ece67ba
Update changelog for version 0.13.2 with new features, fixes, and tra…
mremond Feb 16, 2026
fd6ad7b
Fix reconnection freeze by replacing graceful stop() with forceful cl…
mremond Feb 16, 2026
ffbdfb1
Switch to `room:joined` SDK event for MAM fetch, remove `isFreshSessi…
mremond Feb 16, 2026
96946e6
Optimize desktop notification hooks to check permission only once per…
mremond Feb 16, 2026
a6a8800
Emit `avatarMetadataUpdate` if avatar hash changes or avatar blob is …
mremond Feb 16, 2026
ba97551
Improve keychain error handling and logging, optimize logout and cred…
mremond Feb 16, 2026
1fa781b
Fix lost reactions, corrections, and retractions during MAM restoration
mremond Feb 16, 2026
503396b
Fix frozen login screen after disconnect on macOS
mremond Feb 16, 2026
f3f882f
Fix participants count in logs
mremond Feb 16, 2026
90f4bd9
Refactor connection handling: separate SM resumption and fresh sessio…
mremond Feb 14, 2026
f6116c6
Add SM patches for XMPP: debounce <a/> stanzas and fix ackQueue desyn…
mremond Feb 14, 2026
e1f6303
Update `tauri:dev` script to enable verbose logging
mremond Feb 14, 2026
97c177d
Refactor connection handling and enhance reconnection flow
mremond Feb 14, 2026
c7a15e7
Refactor `XmppConsole`: improve performance with `useCallback`/`React…
mremond Feb 14, 2026
ce88b7d
Refactor `MAM`: Limit trafic on connect
mremond Feb 14, 2026
6ba675b
Refactor connection fallback: resolve proper WebSocket URL and improv…
mremond Feb 14, 2026
ee46dc1
Add `useChatActive` hook to optimize active conversation handling
mremond Feb 14, 2026
82a6baf
Add `useChatActive` hook to optimize active conversation handling
mremond Feb 14, 2026
bcba564
Introduce a state machine for managing connection states
mremond Feb 14, 2026
cb96b16
Update `RELEASE.md` with detailed branch workflows for beta process
mremond Feb 14, 2026
dd38e8c
Expand connection state machine tests to cover edge cases and ensure …
mremond Feb 14, 2026
ea3a716
Enhance type flexibility in components to support `ContactIdentity` a…
mremond Feb 14, 2026
c8d99af
Remove unused `ownPresence` prop and related logic from `ChatView` co…
mremond Feb 14, 2026
62bfbc0
Remove unused `ownPresence` prop and related logic from `ChatView` co…
mremond Feb 14, 2026
989ae5d
Add guards to skip unnecessary MAM operations during SM resumption an…
mremond Feb 14, 2026
11c7a05
chore: bump version to 0.13.2-beta.1
mremond Feb 14, 2026
06ef09b
fix: handle prerelease versions in Linux package builds
mremond Feb 14, 2026
1fe2b76
fix: patch tauri.conf.json version for MSI/bundle compatibility on pr…
mremond Feb 14, 2026
42424f3
chore: update Cargo.lock and bundleVersion for 0.13.2-beta.1
mremond Feb 14, 2026
9f6bf77
fix: patch Cargo.toml version for Tauri v2 and use safer sed delimite…
mremond Feb 14, 2026
a366545
Fix pre-release process
mremond Feb 14, 2026
a4f05ae
fix: always run version patching step, remove conditional gate
mremond Feb 14, 2026
6d22bd0
fix: strip prerelease suffix to base semver for Tauri v2 compatibility
mremond Feb 14, 2026
5a3f5ef
fix: use sed instead of bash substitution for deb version tilde
mremond Feb 14, 2026
083cb5e
feat: enhance connection reliability with keepalive improvements and …
mremond Feb 15, 2026
5536ed4
Fix render loops in RoomView and Sidebar by using focused store selec…
mremond Feb 15, 2026
da3bf7b
Add render stability tests, memoize store selectors, and fix test setup
mremond Feb 15, 2026
8e624f5
Fix SRV priority sorting and TLS SNI domain handling, extract dns.rs …
mremond Feb 15, 2026
57e5311
Add --dangerous-insecure-tls CLI flag to disable TLS certificate veri…
mremond Feb 15, 2026
1fa5d24
Fix room avatar loss when occupant goes offline
mremond Feb 15, 2026
e364546
Include JS logs in Rust log as default in Verbose mode
mremond Feb 15, 2026
a75e768
Add commit id in Rust verbose logs
mremond Feb 15, 2026
0db001c
Add least during development phase, always generate a log file in the…
mremond Feb 15, 2026
850fab3
Add a shortcut to access the logs
mremond Feb 15, 2026
4f51337
Add diagnostic logging to SDK for user troubleshooting
mremond Feb 15, 2026
6eb880f
Fix UI freeze on reconnect after sleep/network change
mremond Feb 15, 2026
12e96c5
Refactor `sendIQ` to centralize error handling and improve dead socke…
mremond Feb 15, 2026
9d90255
Improve MAM error handling for disconnected states
mremond Feb 15, 2026
e0c5c84
Consolidate wake/sleep/idle hooks into single usePlatformState hook
mremond Feb 15, 2026
4d62cc1
Adding missing `console.info` forwarding to Rust log for consistent d…
mremond Feb 15, 2026
ade576c
Fix MAM query direction after reconnect by loading cache before direc…
mremond Feb 15, 2026
6de41e3
Limit freeze after wake from sleep by handling disconnect during XMPP…
mremond Feb 16, 2026
a8fb62c
Add `supportsMAM` field to Room entity and fix MAM history completene…
mremond Feb 16, 2026
a394666
Fix place for MAM query logging
mremond Feb 16, 2026
7edbeaf
Tweak MUC room checking
mremond Feb 16, 2026
7f045af
Extract 4 focused modules from Connection.ts
mremond Feb 16, 2026
9115aec
Fix log message
mremond Feb 16, 2026
48185f9
Capture resources load error in Rust logs
mremond Feb 16, 2026
2fdc691
Simplify proxy, as we are going to remove it in favor of IPC at some …
mremond Feb 16, 2026
1213e86
Do force MAM catch-up everytime we active a room
mremond Feb 16, 2026
b78b27d
Fix avatar blob URL memory leak by adding deduplication pool
mremond Feb 16, 2026
567c7aa
Fix failing test
mremond Feb 16, 2026
f0dfe4a
Fix UI freeze after server restart (system-shutdown stream error)
mremond Feb 16, 2026
467eef3
Document `NO_COLOR` environment variable to disable console color out…
mremond Feb 16, 2026
33dd837
Use system DNS as default with fallback to Tokio default DNS resolver
mremond Feb 16, 2026
4262e3e
Fix duplicate messages from IRC bridges in MAM queries
mremond Feb 16, 2026
64860fd
Add Russian, Belarusian, and Ukrainian translations
mremond Feb 16, 2026
3579a12
Add Simplified Chinese translation
mremond Feb 16, 2026
ab9332b
Hide the verifying connection status if the verification is quick
mremond Feb 16, 2026
24c4060
Update number of languages
mremond Feb 16, 2026
72c3878
Update changelog for version 0.13.2 with new features, fixes, and tra…
mremond Feb 16, 2026
4d7933a
Fix reconnection freeze by replacing graceful stop() with forceful cl…
mremond Feb 16, 2026
51a487d
Switch to `room:joined` SDK event for MAM fetch, remove `isFreshSessi…
mremond Feb 16, 2026
8912c70
Optimize desktop notification hooks to check permission only once per…
mremond Feb 16, 2026
669f7bb
Emit `avatarMetadataUpdate` if avatar hash changes or avatar blob is …
mremond Feb 16, 2026
964a7c5
Improve keychain error handling and logging, optimize logout and cred…
mremond Feb 16, 2026
060be4e
Fix lost reactions, corrections, and retractions during MAM restoration
mremond Feb 16, 2026
fa854d0
Fix frozen login screen after disconnect on macOS
mremond Feb 16, 2026
d62091b
Fix participants count in logs
mremond Feb 16, 2026
75d9dd8
chore: bump version to 0.13.2-beta.2
mremond Feb 16, 2026
aa47a75
Merge remote-tracking branch 'origin/release/0.13.2' into release/0.13.2
mremond Feb 16, 2026
2ee77d8
Refactor macOS dock click handler and unify graceful shutdown logic a…
mremond Feb 16, 2026
d7ad573
Fix unused OpenerExt import warning on Linux
mremond Feb 16, 2026
8f36aa5
Add troubleshooting doc
mremond Feb 16, 2026
32c51df
fix(logout,proxy): harden shutdown/cleanup flow and add DNS timing logs
mremond Feb 17, 2026
6068fc8
chore: bump version to 0.13.2-beta.3 and update release notes
mremond Feb 17, 2026
41a6b79
refactor(sdk): move reconnect scheduling into connection state machin…
mremond Feb 17, 2026
496c95d
fix(window-state): restrict save window state logic to macOS and Wind…
mremond Feb 17, 2026
7c53246
feat(idle-detection): add Linux support with X11-based idle time dete…
mremond Feb 17, 2026
9e37dbc
fix(linux): prevent UI lock after bridge watchdog disconnect
mremond Feb 17, 2026
5ae4104
fix(linux): prevent UI lock after bridge watchdog disconnect
mremond Feb 17, 2026
d9c6cb7
Merge remote-tracking branch 'origin/release/0.13.2' into release/0.13.2
mremond Feb 17, 2026
6e0075e
feat(linux): enhance X11 dependency with xlib and xss features for im…
mremond Feb 17, 2026
96602cf
chore: add libxss-dev dependency to build script and documentation
mremond Feb 17, 2026
f700bc7
fix(proxy): prevent reconnect churn on unstable links by refining pro…
mremond Feb 17, 2026
0459d78
fix(connection): force reconnect recovery on stale disconnect while m…
mremond Feb 17, 2026
f17b28e
feat(proxy): add forced proxy restart for improved recovery on local …
mremond Feb 17, 2026
4f9ca13
feat(proxy): add lifecycle management with timeouts and concurrency c…
mremond Feb 17, 2026
6291010
feat(proxy): add timeouts to start/stop operations for improved resil…
mremond Feb 17, 2026
805f598
feat(proxy): improve logging and state tracking for lifecycle and rec…
mremond Feb 17, 2026
3388fe5
feat(connection): improve dead-socket handling and logging with recov…
mremond Feb 17, 2026
d3a54f2
feat(connection): enhance state machine event handling with detailed …
mremond Feb 17, 2026
f38e28f
feat(connection): enhance state machine event handling with detailed …
mremond Feb 17, 2026
8ce0ff5
Merge remote-tracking branch 'origin/release/0.13.2' into release/0.13.2
mremond Feb 17, 2026
748367f
fix(linux): prevent logout lockups on proxy disconnect; add cleanup t…
mremond Feb 17, 2026
a2c0f3a
fix(sdk): keep reconnecting on non-fatal errors with capped backoff +…
mremond Feb 17, 2026
c14e417
test(connection): add tests for graceful disconnect and stale event h…
mremond Feb 17, 2026
da99b4f
fix(connection): harden disconnect/reconnect races, centralize timeou…
mremond Feb 17, 2026
8e118bc
linux: add system tray support with close-to-tray functionality
mremond Feb 17, 2026
2eec67e
Enable Linux hardware acceleration by default; add FLUUX_DISABLE_GPU …
mremond Feb 17, 2026
9d84b13
fix(sdk): treat auth as connection-state gated traffic and narrow fat…
mremond Feb 18, 2026
fad534e
fix(sdk): allow status message updates while staying online
mremond Feb 18, 2026
9a0a53b
connection: prefer XEP-0156 WebSocket first, fallback to SRV/proxy, a…
mremond Feb 18, 2026
260afaa
test: silence vitest stdout and fix auth-gated connection test races
mremond Feb 18, 2026
53167e4
fix(connection): preserve MUC nick on reconnect short-circuit
mremond Feb 18, 2026
10945e5
feat(presence): use blue-gray for app-offline indicators while keepin…
mremond Feb 18, 2026
0981991
fix(desktop): fix Linux tray show/quit flow and prevent graceful-shut…
mremond Feb 18, 2026
71d1dea
fix(linux): clarify tray click behavior and update restore instructions
mremond Feb 18, 2026
3a48074
improv(connection): speed up Tauri login fallback (XEP-0156-only chec…
mremond Feb 18, 2026
be8188a
fix(desktop): fix Linux tray restore/quit flow and add Mod+Q full qui…
mremond Feb 18, 2026
6ecb23b
Restore tray window geometry
mremond Feb 18, 2026
2aad89d
fix(tray): make Show Fluux idempotent and restore Linux window placem…
mremond Feb 18, 2026
1608040
Fix tray show focus handling
mremond Feb 18, 2026
e62a345
Add proxy skipDiscovery test
mremond Feb 18, 2026
d8a40c6
fix(linux-tray): avoid focus-steal toast and stabilize post-restore w…
mremond Feb 18, 2026
166314e
update(changelog): add Linux tray support, Mod+Q shortcut, and key bu…
mremond Feb 18, 2026
98d2337
fix(linux-tray): restore webview input focus after hide/show cycle
mremond Feb 18, 2026
5c22e11
fix(presence): wait for roster IQ response before sending initial pre…
mremond Feb 18, 2026
4390076
fix(linux): sync native title bar theme with app dark/light mode
mremond Feb 18, 2026
16624de
fix(linux): sync native title bar theme with app dark/light mode
mremond Feb 18, 2026
20b50db
fix(linux-tray): restore window focus and button interactivity after …
mremond Feb 18, 2026
b654873
fix(linux): Try restoring window in better position
mremond Feb 18, 2026
9d409c9
fix: prevent stale fresh-session flow after system sleep during conne…
mremond Feb 18, 2026
c8b566e
add(icons): include 64x64 and 256x256 icons in packaging and deployments
mremond Feb 18, 2026
c876ea3
Prepare release of v0.13.2-beta.4
mremond Feb 18, 2026
fc6e793
fix(xmpp-proxy): echo Sec-WebSocket-Protocol header during handshake …
mremond Feb 18, 2026
ca55846
fix(xmpp-proxy): try all SRV record endpoints on connection failure i…
mremond Feb 18, 2026
a581dbb
fix(macos): improve reconnect reliability during sleep and focus events
mremond Feb 19, 2026
60a829d
fix(xmpp): add polyfills for SCRAM-SHA-1 support in browser environments
mremond Feb 19, 2026
b7fa214
feat(scram): add support for SCRAM mechanism with polyfills in browse…
mremond Feb 19, 2026
8727073
feat(scram): add support for SCRAM mechanism with polyfills in browse…
mremond Feb 19, 2026
bd67eba
feature(windows): Enable drag and drop support
mremond Feb 19, 2026
1c7c0af
feat(flatpak): add shared-modules submodule and update build for syst…
mremond Feb 19, 2026
76386ae
Release v0.13.2: promote from beta with new features, bug fixes, and …
mremond Feb 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 94 additions & 13 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,21 @@ jobs:
echo "$NOTES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Patch version for Tauri semver compatibility
run: |
# Tauri v2 requires strict semver (X.Y.Z) — prerelease suffixes are rejected
# Strip prerelease suffix: 0.13.2-beta.1 → 0.13.2
# For stable versions (no hyphen), this is a no-op
VERSION="${RELEASE_TAG#v}"
if [[ "$VERSION" == *-* ]]; then
BASE_VERSION="${VERSION%%-*}"
echo "Patching version for Tauri build: $VERSION → $BASE_VERSION"
sed -i '' "s|\"version\": \".*\"|\"version\": \"$BASE_VERSION\"|" apps/fluux/src-tauri/tauri.conf.json
sed -i '' "s|^version = \".*\"|version = \"$BASE_VERSION\"|" apps/fluux/src-tauri/Cargo.toml
else
echo "Stable version $VERSION — no patching needed"
fi

- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
Expand Down Expand Up @@ -176,6 +191,22 @@ jobs:
echo "$NOTES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Patch version for Tauri semver compatibility
shell: bash
run: |
# Tauri v2 requires strict semver (X.Y.Z) — prerelease suffixes are rejected
# Strip prerelease suffix: 0.13.2-beta.1 → 0.13.2
# For stable versions (no hyphen), this is a no-op
VERSION="${RELEASE_TAG#v}"
if [[ "$VERSION" == *-* ]]; then
BASE_VERSION="${VERSION%%-*}"
echo "Patching version for Tauri build: $VERSION → $BASE_VERSION"
sed -i "s|\"version\": \".*\"|\"version\": \"$BASE_VERSION\"|" apps/fluux/src-tauri/tauri.conf.json
sed -i "s|^version = \".*\"|version = \"$BASE_VERSION\"|" apps/fluux/src-tauri/Cargo.toml
else
echo "Stable version $VERSION — no patching needed"
fi

- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
Expand Down Expand Up @@ -255,6 +286,7 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ env.RELEASE_TAG }}
submodules: true

- name: Install Linux dependencies
run: |
Expand Down Expand Up @@ -303,6 +335,21 @@ jobs:
echo "$NOTES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Patch version for Tauri semver compatibility
run: |
# Tauri v2 requires strict semver (X.Y.Z) — prerelease suffixes are rejected
# Strip prerelease suffix: 0.13.2-beta.1 → 0.13.2
# For stable versions (no hyphen), this is a no-op
VERSION="${RELEASE_TAG#v}"
if [[ "$VERSION" == *-* ]]; then
BASE_VERSION="${VERSION%%-*}"
echo "Patching version for Tauri build: $VERSION → $BASE_VERSION"
sed -i "s|\"version\": \".*\"|\"version\": \"$BASE_VERSION\"|" apps/fluux/src-tauri/tauri.conf.json
sed -i "s|^version = \".*\"|version = \"$BASE_VERSION\"|" apps/fluux/src-tauri/Cargo.toml
else
echo "Stable version $VERSION — no patching needed"
fi

- name: Build Tauri binary
run: |
cd apps/fluux
Expand All @@ -326,7 +373,7 @@ jobs:
# Copy desktop file and icons
cp packaging/debian/fluux-messenger.desktop tarball-staging/fluux-messenger/
cp apps/fluux/src-tauri/icons/128x128.png tarball-staging/fluux-messenger/fluux-messenger.png
cp apps/fluux/src-tauri/icons/icon.png tarball-staging/fluux-messenger/fluux-messenger-256.png
cp apps/fluux/src-tauri/icons/256x256.png tarball-staging/fluux-messenger/fluux-messenger-256.png

# Create tarball
mkdir -p dist
Expand All @@ -350,8 +397,12 @@ jobs:
export FLUUX_BINARY="apps/fluux/src-tauri/target/release/fluux"

# Update debian/changelog version from release tag
# Convert pre-release for Debian (~ sorts before release, so 0.13.2~beta.1 < 0.13.2)
# Note: cannot use ${VERSION//-/~} because bash 5+ applies tilde expansion
# to the replacement string, turning ~ into $HOME
VERSION="${RELEASE_TAG#v}"
sed -i "1s/([^)]*)/($VERSION-1)/" debian/changelog
DEB_VERSION=$(echo "$VERSION" | sed 's/-/~/g')
sed -i "1s#([^)]*)#($DEB_VERSION-1)#" debian/changelog

# Build the .deb package (-d skips build dependency check since we use pre-built binary)
dpkg-buildpackage -d -uc -us -b
Expand Down Expand Up @@ -383,9 +434,10 @@ jobs:
cp apps/fluux/src-tauri/target/release/fluux flatpak-build/fluux-messenger
cp packaging/debian/fluux-messenger.desktop flatpak-build/
cp apps/fluux/src-tauri/icons/128x128.png flatpak-build/fluux-messenger.png
cp apps/fluux/src-tauri/icons/icon.png flatpak-build/fluux-messenger-256.png
cp apps/fluux/src-tauri/icons/256x256.png flatpak-build/fluux-messenger-256.png
cp packaging/flatpak/com.processone.fluux.metainfo.xml flatpak-build/
cp packaging/flatpak/com.processone.fluux.yaml flatpak-build/
cp -r packaging/flatpak/shared-modules flatpak-build/

# Build Flatpak
cd flatpak-build
Expand Down Expand Up @@ -465,6 +517,21 @@ jobs:
- name: Build SDK
run: npm run build:sdk

- name: Patch version for Tauri semver compatibility
run: |
# Tauri v2 requires strict semver (X.Y.Z) — prerelease suffixes are rejected
# Strip prerelease suffix: 0.13.2-beta.1 → 0.13.2
# For stable versions (no hyphen), this is a no-op
VERSION="${RELEASE_TAG#v}"
if [[ "$VERSION" == *-* ]]; then
BASE_VERSION="${VERSION%%-*}"
echo "Patching version for Tauri build: $VERSION → $BASE_VERSION"
sed -i "s|\"version\": \".*\"|\"version\": \"$BASE_VERSION\"|" apps/fluux/src-tauri/tauri.conf.json
sed -i "s|^version = \".*\"|version = \"$BASE_VERSION\"|" apps/fluux/src-tauri/Cargo.toml
else
echo "Stable version $VERSION — no patching needed"
fi

- name: Build Tauri binary
run: |
cd apps/fluux
Expand All @@ -477,23 +544,37 @@ jobs:
run: |
VERSION="${RELEASE_TAG#v}"

# Convert pre-release version for RPM (hyphens not allowed in Version field)
# 0.13.2-beta.1 → RPM_VERSION=0.13.2, RPM_RELEASE=0.1.beta.1
# 0.13.2 → RPM_VERSION=0.13.2, RPM_RELEASE=1
if [[ "$VERSION" == *-* ]]; then
RPM_VERSION="${VERSION%%-*}"
RPM_PRERELEASE="${VERSION#*-}"
RPM_RELEASE="0.1.${RPM_PRERELEASE//-/.}"
else
RPM_VERSION="$VERSION"
RPM_RELEASE="1"
fi

# Setup RPM build directories
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

# Create source tarball for rpmbuild
mkdir -p "fluux-messenger-${VERSION}"
cp apps/fluux/src-tauri/target/release/fluux "fluux-messenger-${VERSION}/fluux-messenger"
cp packaging/debian/fluux-messenger.desktop "fluux-messenger-${VERSION}/"
mkdir -p "fluux-messenger-${VERSION}/icons"
cp apps/fluux/src-tauri/icons/32x32.png "fluux-messenger-${VERSION}/icons/"
cp apps/fluux/src-tauri/icons/128x128.png "fluux-messenger-${VERSION}/icons/"
cp apps/fluux/src-tauri/icons/icon.png "fluux-messenger-${VERSION}/icons/256x256.png"
# Create source tarball for rpmbuild (directory name must match %{version} in spec)
mkdir -p "fluux-messenger-${RPM_VERSION}"
cp apps/fluux/src-tauri/target/release/fluux "fluux-messenger-${RPM_VERSION}/fluux-messenger"
cp packaging/debian/fluux-messenger.desktop "fluux-messenger-${RPM_VERSION}/"
mkdir -p "fluux-messenger-${RPM_VERSION}/icons"
cp apps/fluux/src-tauri/icons/32x32.png "fluux-messenger-${RPM_VERSION}/icons/"
cp apps/fluux/src-tauri/icons/64x64.png "fluux-messenger-${RPM_VERSION}/icons/"
cp apps/fluux/src-tauri/icons/128x128.png "fluux-messenger-${RPM_VERSION}/icons/"
cp apps/fluux/src-tauri/icons/256x256.png "fluux-messenger-${RPM_VERSION}/icons/"

tar czvf ~/rpmbuild/SOURCES/fluux-messenger-${VERSION}.tar.gz "fluux-messenger-${VERSION}"
tar czvf ~/rpmbuild/SOURCES/fluux-messenger-${RPM_VERSION}.tar.gz "fluux-messenger-${RPM_VERSION}"

# Copy and update spec file
cp packaging/rpm/fluux-messenger.spec ~/rpmbuild/SPECS/
sed -i "s/^Version:.*/Version: ${VERSION}/" ~/rpmbuild/SPECS/fluux-messenger.spec
sed -i "s/^Version:.*/Version: ${RPM_VERSION}/" ~/rpmbuild/SPECS/fluux-messenger.spec
sed -i "s/^Release:.*/Release: ${RPM_RELEASE}%{?dist}/" ~/rpmbuild/SPECS/fluux-messenger.spec

# Build RPM
rpmbuild -bb ~/rpmbuild/SPECS/fluux-messenger.spec --target ${{ matrix.rpm_arch }}
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "packaging/flatpak/shared-modules"]
path = packaging/flatpak/shared-modules
url = https://github.com/flathub/shared-modules.git
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,51 @@ All notable changes to Fluux Messenger are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.13.2] - 2026-02-19

### Added

- SDK: Connection state machine for more predictable connection lifecycle
- `--dangerous-insecure-tls` CLI flag to disable TLS certificate verification
- SDK diagnostic logging for user troubleshooting, with shortcut to access log file
- Russian, Belarusian, Ukrainian, and Simplified Chinese translations (31 languages total)
- Linux system tray support with close-to-tray functionality
- Mod+Q full quit shortcut on Windows/Linux
- SCRAM authentication mechanism support with browser polyfills and UI display
- Windows drag and drop support

### Changed

- Beta release process for pre-release testing
- Separated SM resumption and fresh session initialization paths
- Optimized active conversation rendering with `useChatActive` hook
- MAM guards to skip unnecessary operations during SM resumption
- Improved connection fallback: proper WebSocket URL resolution and proxy restart
- XMPP Console performance with `useCallback`/`React.memo`
- Reduced MAM traffic on connect
- Use system DNS as default with fallback to Tokio resolver

### Fixed

- Connection error handling with firewall hint for proxy mode failures
- harden shutdown/cleanup flow and add DNS timing logs
- Proxy memory handling with buffer size limits and better stanza extraction
- Reconnection logic and login display optimizations
- Connection error message formatting
- Multiple freeze conditions on reconnect after sleep/network change or server restart
- SRV priority sorting and TLS SNI domain handling
- Room avatar loss when occupant goes offline
- Duplicate messages from IRC bridges in MAM queries
- Avatar blob URL memory leak with deduplication pool
- Status message updates while staying online
- MUC nick preserved on reconnect short-circuit
- Linux logout lockups on proxy disconnect
- Non-fatal errors now keep reconnecting with capped backoff
- WebSocket protocol header compliance (RFC 7395) preventing browser rejection on Windows
- Try all SRV record endpoints on connection failure instead of only the first
- macOS reconnect reliability during sleep and focus events
- Flatpak build updated for system tray support

## [0.13.1] - 2026-02-13

### Added
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
| Language Settings | Login Screen | Theme System |
|-------------------|---|-------------|
| <a href="assets/readme/languages.png"><img src="assets/readme/languages.png" width="250" style="border-radius: 8px;" alt="Language Settings"/></a> | <a href="assets/readme/login.png"><img src="assets/readme/login.png" width="250" style="border-radius: 8px;" alt="Login Screen"/></a> | <a href="assets/readme/split.png"><img src="assets/readme/split.png" width="250" style="border-radius: 8px;" alt="Theme System"/></a> |
| *27 languages including all EU official languages* | *Simple Login Interface* | *Light and dark themes, more to come* |
| *31 languages including all EU official languages* | *Simple Login Interface* | *Light and dark themes, more to come* |

| Admin Server Commands | Chat Rooms Management | Users Management |
|----------------------|-----------------------|------------------|
Expand All @@ -63,7 +63,7 @@
- **Real-time Messaging** - Typing indicators, message corrections, and delivery features
- **Offline Support** - IndexedDB storage with automatic sync on reconnect
- **Theme System** - Light/dark themes synchronized across devices
- **Internationalization** - 26 languages including complete EU coverage (Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Icelandic, Irish, Italian, Latvian, Lithuanian, Maltese, Norwegian, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish)
- **Internationalization** - 31 languages including complete EU coverage (Belarusian, Bulgarian, Catalan, Chinese (Simplified), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Icelandic, Irish, Italian, Latvian, Lithuanian, Maltese, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Ukrainian)
- **Self-hostable** - Connect to any XMPP server, no vendor lock-in
- **Open Source** - AGPL-3.0 licensed

Expand Down
51 changes: 35 additions & 16 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,47 @@
## What's New in v0.13.1
## What's New in v0.13.2

### Added

- Enhanced logging and diagnostics for connection troubleshooting
- Tracing for keychain, idle detection, link preview, and startup operations
- SDK: Connection state machine for more predictable connection lifecycle
- `--dangerous-insecure-tls` CLI flag to disable TLS certificate verification
- SDK diagnostic logging for user troubleshooting, with shortcut to access log file
- Russian, Belarusian, Ukrainian, and Simplified Chinese translations (31 languages total)
- Linux system tray support with close-to-tray functionality
- Mod+Q full quit shortcut on Windows/Linux
- SCRAM authentication mechanism support with browser polyfills and UI display
- Windows drag and drop support

### Changed

- Improved XMPP proxy robustness and TCP streaming error handling
- Streamlined avatar restoration logic
- Beta release process for pre-release testing
- Separated SM resumption and fresh session initialization paths
- Optimized active conversation rendering with `useChatActive` hook
- MAM guards to skip unnecessary operations during SM resumption
- Improved connection fallback: proper WebSocket URL resolution and proxy restart
- XMPP Console performance with `useCallback`/`React.memo`
- Reduced MAM traffic on connect
- Use system DNS as default with fallback to Tokio resolver

### Fixed

- Memory and CPU leaks on connection loss
- SRV flip and double-connect on reconnect after sleep
- Background MAM catchup after reconnection
- New message marker rewinding to earlier position
- Room sorting after connection
- Occupant avatar negative cache handling
- Stuck tooltips on rapid hover
- Room members sidebar state lost across view switches
- HTTP upload discovery on server domain
- Pointer cursor missing on interactive buttons
- Windows code signing
- Connection error handling with firewall hint for proxy mode failures
- harden shutdown/cleanup flow and add DNS timing logs
- Proxy memory handling with buffer size limits and better stanza extraction
- Reconnection logic and login display optimizations
- Connection error message formatting
- Multiple freeze conditions on reconnect after sleep/network change or server restart
- SRV priority sorting and TLS SNI domain handling
- Room avatar loss when occupant goes offline
- Duplicate messages from IRC bridges in MAM queries
- Avatar blob URL memory leak with deduplication pool
- Status message updates while staying online
- MUC nick preserved on reconnect short-circuit
- Linux logout lockups on proxy disconnect
- Non-fatal errors now keep reconnecting with capped backoff
- WebSocket protocol header compliance (RFC 7395) preventing browser rejection on Windows
- Try all SRV record endpoints on connection failure instead of only the first
- macOS reconnect reliability during sleep and focus events
- Flatpak build updated for system tray support

---
[Full Changelog](https://github.com/processone/fluux-messenger/blob/main/CHANGELOG.md)
2 changes: 2 additions & 0 deletions apps/fluux/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
</head>
<body>
<!-- process.nextTick shim for browserify-era SCRAM-SHA-1 crypto deps -->
<script>globalThis.process=globalThis.process||{};process.nextTick=process.nextTick||(function(cb){var a=Array.prototype.slice.call(arguments,1);queueMicrotask(function(){cb.apply(null,a)})});</script>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
Expand Down
4 changes: 2 additions & 2 deletions apps/fluux/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@xmpp/fluux",
"version": "0.13.1",
"version": "0.13.2",
"private": true,
"type": "module",
"scripts": {
Expand All @@ -16,7 +16,7 @@
"clean": "rm -rf dist",
"clean:all": "rm -rf dist node_modules src-tauri/target",
"tauri": "tauri",
"tauri:dev": "tauri dev",
"tauri:dev": "tauri dev -- -- --verbose",
"tauri:build": "./scripts/tauri-build.sh"
},
"dependencies": {
Expand Down
Loading
Loading