Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,32 @@ 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.1] - 2026-02-13

### Added

- Enhanced logging and diagnostics for connection troubleshooting
- Tracing for keychain, idle detection, link preview, and startup operations

### Changed

- Improved XMPP proxy robustness and TCP streaming error handling
- Streamlined avatar restoration logic

### 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

## [0.13.0] - 2026-02-12

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

### Added

- Native TCP connection support via WebSocket proxy (desktop)
- Clipboard image paste support (Cmd+V / Ctrl+V)
- Clear local data option on logout
- Complete EU language coverage (26 languages)
- Improved Linux packaging with native distro tools
- Enhanced logging and diagnostics for connection troubleshooting
- Tracing for keychain, idle detection, link preview, and startup operations

### Changed

- Smarter MAM strategy for better message history loading
- Dynamic locale loading for faster initial load
- Centralized notification state with viewport observer
- Windows tray behavior improvements
- Improved XMPP proxy robustness and TCP streaming error handling
- Streamlined avatar restoration logic

### Fixed

- Attachment styling consistency across themes
- Sidebar switching with Cmd+U
- Scroll-to-bottom reliability on media load
- "Copy Image" paste support (only tested with Safari)
- New message marker position on conversation switch
- Duplicate avatar fetches for unchanged hashes
- macOS layout corruption after sleep
- Markdown bold/strikethrough stripped from message previews
- Context menu positioning within viewport bounds
- 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

---
[Full Changelog](https://github.com/processone/fluux-messenger/blob/main/CHANGELOG.md)
2 changes: 1 addition & 1 deletion apps/fluux/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@xmpp/fluux",
"version": "0.13.0",
"version": "0.13.1",
"private": true,
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion apps/fluux/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "fluux"
version = "0.13.0"
version = "0.13.1"
description = "A powerful, productive messaging client that's pleasant to use."
authors = ["ProcessOne"]
license = "AGPL-3.0-or-later"
Expand Down
5 changes: 4 additions & 1 deletion apps/fluux/src-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -795,7 +795,10 @@ fn main() {

// Register xmpp: URI scheme for deep linking (RFC 5122)
// This allows the app to open when users click xmpp: links
#[cfg(desktop)]
// On macOS, URI schemes are registered via Info.plist at build time
// (configured in tauri.conf.json), so runtime registration is only
// needed on Linux and Windows.
#[cfg(any(target_os = "linux", target_os = "windows"))]
{
match app.deep_link().register("xmpp") {
Ok(_) => tracing::info!("Deep link: registered xmpp: URI scheme"),
Expand Down
4 changes: 2 additions & 2 deletions apps/fluux/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Fluux Messenger",
"version": "0.13.0",
"version": "0.13.1",
"identifier": "com.processone.fluux",
"plugins": {
"deep-link": {
Expand Down Expand Up @@ -57,7 +57,7 @@
],
"macOS": {
"minimumSystemVersion": "10.13",
"bundleVersion": "673aeec",
"bundleVersion": "6fa433a",
"entitlements": "Entitlements.plist",
"signingIdentity": null
},
Expand Down
36 changes: 36 additions & 0 deletions apps/fluux/src/data/changelog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,42 @@ export interface ChangelogEntry {
}

export const changelog: ChangelogEntry[] = [
{
version: '0.13.1',
date: '2026-02-13',
sections: [
{
type: 'added',
items: [
'Enhanced logging and diagnostics for connection troubleshooting',
'Tracing for keychain, idle detection, link preview, and startup operations',
],
},
{
type: 'changed',
items: [
'Improved XMPP proxy robustness and TCP streaming error handling',
'Streamlined avatar restoration logic',
],
},
{
type: 'fixed',
items: [
'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',
],
},
],
},
{
version: '0.13.0',
date: '2026-02-12',
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "fluux",
"private": true,
"license": "AGPL-3.0-or-later",
"version": "0.13.0",
"version": "0.13.1",
"type": "module",
"workspaces": [
"packages/*",
Expand Down
2 changes: 1 addition & 1 deletion packages/fluux-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@fluux/sdk",
"version": "0.13.0",
"version": "0.13.1",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/fluux-sdk/src/stores/roomStore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1079,15 +1079,15 @@ describe('roomStore', () => {
expect(room?.unreadCount).toBe(1) // Only incremented once
})

it('should set lastReadAt to epoch when undefined and inactive room gets first message', () => {
it('should leave lastReadAt undefined when inactive room gets first message', () => {
roomStore.getState().addRoom(createRoom('test@conference.example.com'))
// Room is inactive (activeRoomJid is not set)

const message = createMessage('msg1', 'test@conference.example.com', 'alice', 'Hello!')
roomStore.getState().addMessage('test@conference.example.com', message)

const room = roomStore.getState().rooms.get('test@conference.example.com')
expect(room?.lastReadAt).toEqual(new Date(0)) // Epoch - marker will show
expect(room?.lastReadAt).toBeUndefined() // Stays undefined; marker placed via unreadCount on activate
})

it('should preserve lastReadAt when inactive room gets new message', () => {
Expand Down
Loading