Introducing Fluux Messenger: A Modern XMPP Client Born from a Holiday Coding Session

Open source is about scratching your own itch.

Mickaël Rémond
· 3 min read
Send by email

It was mid-December 2025, just before the Christmas break. My favorite XMPP client had broken on the main branch I was using. Frustrated, rather than waiting for a fix, I decided I wanted to give another try at working on a client. This time, I would be using the opportunity to explore a new set of tools I was curious about: TypeScript, React, and Tauri.

What started as a weekend experiment quickly turned into something more. Using AI tools to accelerate the initial setup, I found myself totally absorbed in the work. Days blurred together as features took shape. By early January, what had been a personal scratch project had become a surprisingly capable desktop client.

When I demonstrated it to my coworkers at ProcessOne, their reaction was unanimous: this was worth pursuing seriously. We decided to put the entire company behind the effort. Today, we're sharing the first public release of Fluux Messenger.

More Than Just Another Chat Client

At ProcessOne, we've spent over two decades building messaging infrastructure. Our XMPP server, ejabberd, has powered some of the world's largest messaging deployments. But we've always approached messaging from the server side. Fluux Messenger represents something new for us, bringing that same engineering philosophy to the client.

The key innovation isn't in the UI (though we're proud of it). It's in what lies beneath: the Fluux SDK.

The Fluux SDK: Bridging Two Worlds

Anyone who has built an XMPP client knows the challenge. XMPP is event-driven, signal-based, asynchronous. Modern UI frameworks expect reactive state, typed data, and predictable updates. There's an impedance mismatch between these two worlds.

The Fluux SDK is our answer. It provides a high-level TypeScript API that handles all XMPP complexity internally. Developers work with clean types and reactive state, not XML stanzas. The SDK maintains local cache, manages reconnection, and handles synchronization intelligently. It's not a passive pipe between server and UI; it's an active participant that makes the client easier to develop and more resilient.

As an example, the client is not telling the SDK which presence it wants to publish when stepping away from the computer, but it will signal to the SDK that it is inactive. The SDK is responsible for doing the right thing.

This three-tiered architecture, Server -> Headless client (SDK) -> UI, lets us apply the same design principles that made ejabberd scalable to the client side. Distributed logic, local-first responsiveness, server-side efficiency.

What Fluux Messenger Offers Today

The current release (v0.11.1) already includes substantial functionality:

  • Reliable connection and message management
  • Cross-platform desktop app for Windows, macOS, and Linux, built on Tauri for a lightweight native experience
  • Web version: It works great on the Web as well.
  • 40+ XMPP extensions (XEPs) implemented, including message archive management, multi-user chat, HTTP file upload, message carbons, and reactions
  • MUC support with @mentions notification and bookmarks
  • Local message cache storage using IndexedDB with automatic sync on reconnect
  • Built-in XMPP console for developers and power users who want to see what's happening under the hood
  • Preliminary admin capabilities letting you manage your ejabberd server directly from the client (But this is still mostly a work in progress).
  • 8 languages supported out of the box
  • Light and dark modes with theme system to come

What I envision for Fluux Messenger is to follow the steps of major projects like Obsidian or VSCode. In my wildest dreams, I expect Fluux Messenger to become as configurable and versatile as those tools.

The Road Ahead

This is an ambitious project. The roadmap stretches far into the future, and we're just getting started. Our plans include mobile support through PWA and eventually native apps, expansion to other frameworks (Vue, Svelte), and Kotlin Multiplatform for Android and iOS.

But ambitious doesn't mean closed. Fluux Messenger is open source under AGPL-3.0. We believe that modern, privacy-respecting messaging shouldn't require vendor lock-in. Connect to any XMPP server. Host it yourself.

I used AI to bootstrap this project and accelerate my learning phase. Many developers do now. But we are crafters at ProcessOne, and we want to own the responsibility for great code. Those who know me will tell you I'll be relentless until I master React and TypeScript, and they know I will. Fast.

A Continuation of ejabberd's Vision

Fluux Messenger represents the client-side continuation of what we started with ejabberd over twenty years ago. The same principles, scalability, reliability, clean architecture, now flow from server to client. If you've trusted ejabberd to power your messaging infrastructure, we hope you'll trust Fluux Messenger to be the interface your users deserve.

This is the beginning of an exciting journey. We hope you'll join us.


Get started

If you share our vision for clean, reactive messaging APIs, we'd love to collaborate. Reach out and let's grow the Fluux community together.