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.

Discord will require a face scan or ID for full access next month
Age verification for all.

I'm Hampus Kraft, a 23-year-old software developer from Sweden, nearing completion of my BSc in Computer Engineering at KTH Royal Institute of Technology. You can find my LinkedIn page here. In Sweden, our resident and company registration databases are public records.

Ever since the pandemic hit in 2020, while I was still in senior high school, I've been fascinated by the engineering behind Discord, the instant messaging and VoIP chat app that became the default home for so many online communities.

Five years of that fascination turned into Fluxer, a community chat app that is familiar, free and open source (AGPLv3), and built so people can run their own instance.

Fluxer in 60 seconds

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-driven app that has reportedly filed confidential IPO paperwork, then you may not need Fluxer. Fluxer is for people who want an open, self-hostable alternative.

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 a different model: free, open source, self-hostable software, with an optional hosted instance run by an independent European company that helps fund the open source work. 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, but the software is open and you can host it yourself.

Fluxer can succeed without Discord getting worse. Discord's network effect is hard to beat head-on, so I'm starting where switching already makes sense: technical users and communities that value control and openness, and want software they can run on their own terms. You don't need to be technical for Fluxer to be yours: many people prefer a European-owned instance that has clearer reasons to treat users well.

Fluxer is free, open source, and self-hostable. The public code should be useful to people who run their own instance, not only to Fluxer.app, and no community should have to depend on one company surviving. The hosted instance should fund hosting and development work that also helps the open source project:

  • Fluxer.app is the hosted instance. It's free to use, and Plutonium gives hosted users higher limits while helping pay for hosting, support, and open source development. There was also a limited-time lifetime Visionary plan for early supporters. It sold out at around 1,000 copies before I stopped it.
  • Donations are open for people and organizations who self-host Fluxer, or who want the open source project to keep improving.
  • The Operator Pass will be a one-time $199 or €199 purchase for people who want to be closer to the work. It will pay towards infrastructure and developer costs, and it will come with the #operators channel in Fluxer Labs, a direct line to the team for help and feedback, the Operator role there, and the first look at unreleased branches and feature flags.
  • Managed hosting comes later. Right now, the priority is making self-hosting reliable first.

Fluxer will keep the software free of feature paywalls, license key checks, upgrade-for-quota gates, and SSO tax.

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, their crowdsourced bug reporting program, and by April 2019 I'd earned enough XP to unlock the Bug Hunter badge.

2020 to 2022

During my senior high school years, I worked on early prototypes of what is now Fluxer. My final graduation project consisted of that prototype and a technical report on what I'd learned from studying Discord's technical blog posts and architecture and how I applied those ideas in practice. When I graduated in summer 2022, I received a small $200 scholarship from the school, and the title "Web Guru of the Year."

2022 to 2023

I've been a student at KTH Royal Institute of Technology since autumn 2022. By summer 2023, I decided to focus more actively on 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 for a permission bypass vulnerability and submitted it to Discord's security team. The report earned my co-author and me a shared 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 the web systems, working on API design, security, billing, and reliability.

2023 to 2024

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

Plenty of trial and error, and a real wish to understand how these systems work, led me to well-tested technologies like Erlang/OTP, which powers WhatsApp and Discord, and Cassandra, which 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 headed. I built Discorch, a tool that guides you through Discord's undocumented privacy request process to bulk delete messages. It produces a CSV plus instructions for contacting Discord's privacy team to request deletion.

As more people used it, Discord kept changing the process and eventually restricted it, including blocking deletion of your own DM messages through this route because you can still delete those manually.

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 limited liability company, which required 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 and spent the 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 make Fluxer ready for public release. Getting the architecture, feature set, and web client ready for real users by myself was the hardest work I'd 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, and a handful bought Visionary at $299 each while I worked towards feature completion.

2026

On 2 January 2026, I opened Fluxer up to everyone. A few more people bought Visionary, enough to keep me going, and I started polishing things towards a self-hosting release.

There was effectively no marketing. Then a Bluesky post after Discord's IPO plans leaked traveled further than expected, and Discord's age verification announcement on 9 February 2026 changed the scale of the project overnight.

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

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 milestones are getting the mobile apps into the app stores and making voice, video, and screen sharing work reliably on every platform.

After Discord's age verification announcement, Visionary sold out quickly: around 1,000 copies at $299 each before sales were paused. Visionaries are recognized in-app with a numbered badge 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 backend scaling work is unusually well documented, and their engineering posts have been a big reference point for me. Start here:

I've put in years of work to understand Discord's architecture in depth: Hacker News and Reddit threads, postmortems and blog posts, relevant courses at KTH, and professional experience along the way. I've also been active in Discord's meta communities for years, 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

Today Fluxer.app runs as a set of focused services. The API and its background worker are TypeScript on Node with Hono. TypeScript is a productive language to work in and the one I'm most fluent in, so the parts of Fluxer that change the most live there.

The Gateway is Erlang/OTP and handles WebSocket connections, sessions, presence, event fanout, and push delivery.

Rust covers the CPU-heavy and latency-sensitive work, with a media proxy for uploads, thumbnails, and transforms, and services for users, messages, link unfurls, GIF search, and Snowflake IDs.

Cassandra stores data on the hosted instance and Postgres is the self-hosted option, with Valkey for caching, NATS for internal messaging, Elasticsearch or Meilisearch for search, and LiveKit for voice and video.

Why choose Erlang/OTP?

The Erlang runtime system is designed for distributed, fault-tolerant, soft real-time, highly available, non-stop applications, with hot swapping to change code without stopping the system.

It was originally developed as proprietary software at Ericsson, a Swedish telecom company, by Joe Armstrong (who wrote his PhD thesis at my university, KTH, in the year I was born), Robert Virding, and Mike Williams in 1986. It was released as open source in 1998 and is maintained by the OTP unit at Ericsson.

Notable large-scale users include WhatsApp, plus Discord via Elixir (which compiles to bytecode for the same BEAM virtual machine that Erlang runs on). WhatsApp is far larger than Discord: more than 3 billion MAU, largely built on Erlang, with a famously 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, and Discord also migrated to it after running Cassandra. As of December 2024, though, ScyllaDB is no longer open source software, which is a deal-breaker for me.

Cassandra handles sharding and replication for you, so you don't have to build your own clustering system. To add redundancy or increase read and write capacity, you add more nodes. It's a NoSQL database, but it uses a key-key-value model with a typed schema and a SQL-like query language (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, and 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 takes very little database work: the server checks your session, usually from cache, and writes the message row. Permission checks skip the database entirely. They go over RPC to the Erlang gateway, which keeps everything needed to calculate permissions for each community (called a "guild" internally) in memory. Clients mostly read from the database when they start a new session and load their initial state. After that, the event dispatch system keeps 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, then made it invisible to search engines, archives, and people who aren't logged 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.

This feature uses the web itself: public pages with stable URLs, server-rendered posts, clear titles, search indexing, archivable pages, RSS and Atom feeds, and links people can share anywhere. People's posts remain their posts.

Publishing stays opt-in, for communities that benefit from putting parts of their forum-style spaces on the open web: open source projects, developer communities, modding groups, creator communities, research groups, support forums, and any other space where public answers are meant to be searchable and useful later. Private chat stays private.

Will self-hosting cost money?

No. Running your own Fluxer instance requires no license key, paid tier, or special enterprise unlock. You're responsible for hosting, uptime, moderation, safety, and legal duties, but the software itself is free to run.

The Operator Pass will be a one-time $199 or €199 purchase that buys no part of the software. The docs stay public and self-hosting stays free.

  • The #operators channel in Fluxer Labs, and a direct line to the team for help and feedback.
  • The Operator role in Fluxer Labs, listed separately in the member list with its own color and icon.
  • The first look at unreleased branches and feature flags, and the first say on them.
  • Your Fluxer avatar and name on this website, if you want them there.

It will pay towards Fluxer's infrastructure and developer costs. One payment will cover you for life, and if you want to do more than that, you'll be able to set up a recurring donation at the same time.

Federation?

Federation is coming, but exactly how it will work is still up for debate. Federation is notoriously tricky to get right, so we're working through it together in the Fluxer Labs community, and you're welcome to join us!

In the meantime, we're making it as seamless as possible to connect to multiple self-hosted instances at once from the mobile and desktop clients. For most people, that may mean server-side federation isn't needed right away. Client-side federation is one possible path forward. For those who want it, we'd blur the line between instances and bring everything together in a single workspace.

We're still working out what full server-side federation would look like and how Fluxer could best get there. Until then, we're keeping things simple and focusing on getting you 90% of the way there. Keep your eyes peeled!

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 the hosted instance works for you, donating to support the open source work directly, reporting bugs well, and giving feedback in the community.

Fluxer should stay independent and bootstrapped, with the hosted instance funding the systems and people needed to keep the open source app moving. Self-hosters should benefit from that work too.

See you in the Fluxerverse!

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