How I built Fluxer

How I built Fluxer

The story behind Fluxer, from a high school project to an open source chat app used by hundreds of thousands of people.

Found a bug or have an idea? Tell us on Fluxer Feedback. To join the discussion with the team and other users, come to Fluxer Labs.

I'm Hampus Kraft, a 23-year-old software developer from Sweden. I'm close to finishing my BSc in Computer Engineering at KTH Royal Institute of Technology. You can find my LinkedIn page here. In Sweden, records of residents and companies are public.

Since the pandemic hit in 2020, when I was in senior high school, I've been fascinated by the engineering behind Discord, the chat and voice app that became the default home for so many online communities.

Five years of that fascination turned into Fluxer, a community chat app that feels familiar. Fluxer is free and open source (AGPLv3), which means anyone can run, study, change and share the code. If you change it and offer it to others over a network, you share your source code under the same license. Running Fluxer on your own server is called self-hosting.

Fluxer in 60 seconds

flux /flŭks/
noun
  1. A continuing movement, especially in large numbers of things.
  2. Constant or frequent change, fluctuation.

"Flux capacitor ... fluxing!" (Back to the Future)

Why use Fluxer when Discord is free and works well?

If Discord does what you need, and you're fine relying on a closed, investor-backed app that has reportedly filed confidential IPO paperwork, you may not need Fluxer.

Discord's IPO could happen in March | TechCrunch
Discord reportedly filed confidential IPO paperwork and has pinned its hopes on a debut in March.

Fluxer is for people who want something different. It has two parts.

  • The Fluxer software is free and open source. Anyone can run it on their own server.
  • Fluxer.app is the service my company, Fluxer Platform AB, runs on that software. It's free to use, and it helps fund the open source work. Fluxer Platform AB is an independent company based in Sweden.

Leaving Discord shouldn't mean giving up the features you rely on. Fluxer works the way you'd expect a modern community chat app to work.

Fluxer doesn't need Discord to get worse to succeed. Discord's network effect is hard to beat head-on, so I'm starting where switching already makes sense. That means technical users and communities who value control and openness and want software they can run on their own terms. You don't need to be technical to use Fluxer, though. You can sign up on Fluxer.app, and many people prefer a service run by an independent European company, which has clearer reasons to treat users well.

No community should have to depend on one company surviving. The public code should be useful to anyone who runs their own Fluxer instance, not only to Fluxer.app.

This is how the work is funded.

  • Fluxer.app is free to use. Plutonium is an optional paid subscription on Fluxer.app that gives higher limits. It helps pay for hosting, support and open source development. Early supporters could also buy Visionary, a one-time lifetime plan. Visionary sold out at 1,000 copies in February 2026.
  • Donations are open to anyone who wants the open source project to keep improving, including people and organizations who self-host Fluxer.
  • The Operator Pass is an optional one-time purchase for people who run their own Fluxer instance. It unlocks nothing in the software, and it funds work on self-hosting.

The Fluxer software will stay free of feature paywalls, license key checks, paid upgrades for higher quotas and SSO tax. Plutonium only applies to Fluxer.app. It doesn't limit anything in the software you run yourself.

Now, my backstory

2017 to 2020

I started using Discord in 2017, and my interest only grew. By January 2019, I'd joined Discord Testers, Discord's crowdsourced bug reporting program. By April 2019, I'd earned enough XP there to unlock the Bug Hunter badge.

2020 to 2022

In senior high school, I built early prototypes of what is now Fluxer. My graduation project was one of those prototypes plus a technical report. The report covered what I'd learned from Discord's engineering blog posts and architecture, and how I applied those ideas. When I graduated in summer 2022, the school gave me a small $200 scholarship and the title "Web Guru of the Year".

2022 to 2023

I've studied at KTH Royal Institute of Technology since autumn 2022. By summer 2023, I'd decided to put more time into Fluxer, but my studies still took up much of my time, so progress came in bursts.

In October 2022, I co-authored a medium-severity bug bounty report to Discord's security team about a permission bypass vulnerability. My co-author and I shared an award of $1,500.

While studying, I also led web development for a popular Minecraft: Bedrock Edition server with nearly 6 million registered players. I built and ran its web systems, including API design, security, billing and reliability.

2023 to 2024

In July 2023, I released the first private alpha of Fluxer to a few dozen testers. Over the next few years, alongside my studies at KTH, I rewrote the tech stack many times before settling on what runs today.

Lots of trial and error, and a real wish to understand how these systems work, led me to proven technologies. Erlang/OTP powers WhatsApp and Discord. Cassandra is a database Discord relied on for years. Every time I tried something simpler, I ended up rebuilding what these tools already do well.

KTH also puts a lot of weight on applying what you learn. In spring 2024, I took a project course where my team built an internal tool for Giesecke+Devrient, an international security technology company.

2025

In January 2025, I grew wary of how Discord handled my personal data and where the app was heading. I built Discorch, a tool that guides you through Discord's undocumented privacy request process to bulk delete your messages. It produces a CSV file and instructions for asking Discord's privacy team to delete them.

As more people used it, Discord kept changing the process and eventually restricted it. One change blocked deleting your own messages in DMs this way, because you can still delete those by hand.

In spring 2025, I reported a security vulnerability to Discord and was awarded $2,000. Later that summer, I registered Fluxer Platform AB, a Swedish private limited company. Registering it needed a minimum deposit of $2,000.

Maeby from Arrested Development: "Well, that was a freebie."

By summer 2025, I'd finished most of my university courses. I spent that summer writing my bachelor's thesis with a fellow student for the supportive and welcoming Intelligent Heart Technology Lab at KTH. The thesis was published in September 2025.

Between September and December 2025, I worked day and night to get Fluxer ready for a public release. Getting the architecture, the features and the web app ready for real users on my own was the hardest work I'd ever done.

On 25 October 2025, I opened the first private beta because I needed funding to keep going. It was a small group of around 30 testers who could invite people they knew. A handful of them bought Visionary at $299 each while I worked toward feature completion.

2026

On 2 January 2026, I opened Fluxer.app to everyone. A few more people bought Visionary, which was enough to keep me going, and I started preparing Fluxer for self-hosting.

There was effectively no marketing. Then, after Discord's IPO plans leaked, a Bluesky post traveled much further than expected and changed the scale of the project overnight.

Today, Fluxer.app has nearly half a million registered users (as of 15 September 2026), and the backend has held up under real load. I'm still the only developer on the backend, the web app and the desktop app for Windows, Linux and macOS. The team now also has a mobile app developer.

Getting here hasn't been easy. There have been spam waves, DDoS attacks and Reddit trolls, along with a long list of interesting problems to solve. Fluxer made it through all of them. The next goals are releasing the mobile apps on the App Store and Google Play, shipping the new voice and video system, and starting on federation and end-to-end encryption.

All 1,000 Visionary copies sold out at $299 each. Visionaries have a numbered badge in the app that shows how early they supported Fluxer.

GitHub - fluxerapp/fluxer: A free and open source instant messaging and VoIP chat app built for friends, groups, and communities.
A free and open source instant messaging and VoIP chat app built for friends, groups, and communities. - fluxerapp/fluxer

Fluxer's backend

Discord's work on scaling its backend is unusually well documented, and its engineering posts have been a big reference point for me. These are good places to start.

I've spent years learning Discord's architecture in depth. I've read Hacker News and Reddit threads, postmortems and blog posts, taken relevant courses at KTH, and picked things up through work. I've also been active for years in communities that discuss Discord itself, alongside fellow enthusiasts, security researchers and bug hunters, and I've spoken with Discord engineers directly a few times.

What the backend looks like now

Fluxer.app runs as a set of small services, each with its own job. The API and its background worker are written in TypeScript on Node, using Hono. TypeScript is productive and the language I know best, so the parts of Fluxer that change most often are written in it.

The gateway is written in Erlang/OTP. It keeps a live WebSocket connection open to each app and handles sessions, online status (presence), sending events to everyone who needs them, and deciding who should get a push notification.

Most of the other services are written in Rust, and each does one job. There's a media proxy for uploads, thumbnails and media conversion, and services for users, messages, push notification delivery, link previews, GIF search and Snowflake IDs (unique IDs that also record when something was created). Rust has no garbage collector, so these services use memory predictably and don't pause to clean it up. That helps most for media conversion, which is CPU-heavy, and for the users and messages services, which handle reading and writing accounts and messages.

Fluxer.app stores its data in Cassandra, and people who self-host can use Postgres instead. Valkey handles caching, NATS handles messages between services, Elasticsearch or Meilisearch handles search, and LiveKit handles voice and video. LiveKit is being replaced by my own voice and video system, which the roadmap describes.

Why choose Erlang/OTP?

The Erlang runtime is designed for distributed, fault-tolerant, soft real-time systems that have to stay up without stopping. It supports hot swapping, which means changing code while the system keeps running.

Erlang was created at Ericsson, a Swedish telecom company, in 1986 by Joe Armstrong, Robert Virding and Mike Williams. It started as proprietary software. Joe Armstrong wrote his PhD thesis at my university, KTH, in the year I was born. Erlang was released as open source in 1998, and the OTP unit at Ericsson maintains it.

Notable large-scale users include WhatsApp and Discord. Discord uses Elixir, a language that runs on the same BEAM virtual machine as Erlang. WhatsApp is far larger than Discord, with more than 3 billion monthly active users. It's largely built on Erlang and famously run by a small engineering team.

"Any sufficiently complicated concurrent program in another language contains an ad hoc informally-specified bug-ridden slow implementation of half of Erlang."

Robert Virding, co-creator of Erlang

Why choose Cassandra?

For a long time, ScyllaDB was my database of choice. Discord also moved to it from Cassandra. Since December 2024, though, ScyllaDB is no longer open source software, which rules it out for me.

Cassandra handles sharding and replication for you. It splits data across machines and keeps copies of it, so you don't have to build that yourself. To add redundancy or handle more reads and writes, you add more machines, called nodes. It's a NoSQL database, but it uses a key-key-value model with a typed schema and a SQL-like query language called CQL, so working with it feels much like working with a relational database. The difference is that Cassandra is built to spread large amounts of data across many machines. To do that, it doesn't support multi-row transactions or locks.

Cassandra is optimized for fast writes, so Fluxer is designed to read from it as little as possible. Sending a message needs very little database work. The server checks your session, usually from a cache, and writes the message. Permission checks skip the database entirely. They go to the Erlang gateway, which keeps everything needed to work out permissions for each community in memory. Internally, a community is called a "guild". The apps mostly read from the database when they start a new session and load their initial state. After that, events from the gateway keep them in sync.

Frequently asked questions

What about the open web?

Chat apps have swallowed useful knowledge that used to live on the public web. That knowledge is now invisible to search engines, archives and anyone who isn't signed in.

Discord seeks to solve a problem that it created | TechCrunch
Conversations on Discord can be hard to follow. Discord SVP Peter Sellis proposes making forum-like features, or using AI summaries.

With LLMs, Sellis said, Discord could take a long, meandering conversation and turn it into "something that could be more sharable and syndicated across the web." However, he said that he and his team hadn't "seen a solution that we feel great about yet."

Fluxer disagrees with Discord's starting point here. LLMs shouldn't turn people's "meandering conversations" into web content. If something becomes public, it should be because a person or community chose to publish it.

Fluxer's planned forum channels will have an optional public web mode that works the way the web already does. Posts get public pages with stable links and clear titles that anyone can read without an account. Search engines can index them, archives can save them, RSS and Atom feeds can follow them, and people can share the links anywhere. People's posts stay their posts.

Publishing is opt-in. It's for communities that benefit from putting parts of their forums on the open web, such as open source projects, developer communities, modding groups, creators, research groups, support forums and any other space where public answers should be searchable and useful later. Private chat stays private.

Will self-hosting cost money?

No. Running Fluxer on your own server needs no license key, paid tier or special enterprise unlock. You're responsible for updates, server administration, uptime, moderation and safety, and as the data controller for your instance you have your own legal duties, as section 1 of our privacy policy notes. The software itself is free to run. The self-hosting docs are public.

The Operator Pass is an optional one-time purchase for people who self-host. It unlocks nothing in the software, and buying it directly funds work that makes self-hosting Fluxer better for everyone. Sales start in early November 2026 at $199 or €199. The price goes up on 1 January 2027.

What about federation?

Federation lets separate Fluxer instances, run by different people, connect to each other so their users can talk across instances. I've decided to base Fluxer's federation on polyproto-core, with Fluxer's own extensions for its features. An experimental draft that you can try arrives in 2026, and the stable release follows in 2027. The desktop and mobile apps can already sign in to several Fluxer instances at once. The roadmap has the details.

What about end-to-end encryption?

Personal notes, DMs and group DMs will get required end-to-end encryption, built on MLS (Messaging Layer Security). Voice and video calls will get it too, using DAVE, the protocol Discord built for encrypted calls. Calls come first in 2026 with the new voice system. For messages, an experimental draft arrives in 2026 and the stable release follows in 2027. The roadmap explains how it works.

Where's the roadmap?

Roadmap 2026
Where Fluxer is headed in 2026 and what we're working on next.

Closing thoughts

The best ways to help are using Fluxer, buying Plutonium if you use Fluxer.app and like it, donating to support the open source work, reporting bugs and requesting features on Fluxer Feedback.

Fluxer should stay independent and self-funded. Fluxer.app should pay for the systems and people that keep the open source app moving, and people who self-host should benefit from that work too.

See you in the Fluxerverse!

A DeLorean time machine lifts off, heading for new adventures.

Found a bug or have an idea? Tell us on Fluxer Feedback. To join the discussion with the team and other users, come to Fluxer Labs.