---
title: "How I built Fluxer"
description: "The story behind Fluxer, a free and open source Discord alternative you can host yourself, from a high school project to more than 500,000 accounts."
url: "https://fluxer.com/blog/how-i-built-fluxer"
language: "en"
last_updated: "2026-11-01"
author: "Hampus Kraft"
published: "2026-01-24"
category: "Behind the scenes"
---

> Index of Fluxer's official pages for AI agents: https://fluxer.com/llms.txt
> Links to Fluxer pages go to their Markdown versions when they have one. For other Fluxer help, policy or blog links, remove any #section part and add .md to the end.

# How I built Fluxer

The story behind Fluxer, a free and open source Discord alternative you can host yourself, from a high school project to more than 500,000 accounts.

I'm [Hampus Kraft](https://www.linkedin.com/in/hampuskraft/), a 23-year-old software developer from Sweden, and I'm close to finishing my BSc in Computer Engineering at the KTH Royal Institute of Technology. In Sweden, the records of residents and companies are [public](https://www.allabolag.se/foretag/fluxer-platform-ab/stockholm/datacenters/2KJCA7DI5YDLG).

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

Five years of that fascination turned into Fluxer, a chat app for your friends and your communities. Fluxer is free and open source (AGPLv3), and anyone can run, study, change and share the code. If you change it and offer it to others over a network, you have to share your source code under the same license. Running your own copy of Fluxer on a server is called self-hosting, and each copy is called an instance.

## Fluxer in 60 seconds

flux

/flŭks/

noun

- A continuing movement, especially in large numbers of things.
- Constant or frequent change, fluctuation.

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

If Discord does what you need, and you're fine relying on a closed, investor-backed app that was [reported in January](https://techcrunch.com/2026/01/07/discords-ipo-could-happen-in-march/) to have filed for an IPO, you may not need Fluxer.

The Fluxer software is free and open source, and anyone can self-host it without a license key. fluxer.com is the service my company, Fluxer Platform AB, runs on that software. It's free to use, and its optional purchases help fund the open source work. Fluxer Platform AB is an independent company in Sweden.

Leaving Discord shouldn't mean giving up the features you rely on every day. Fluxer has text chat, voice and video calls, screen sharing and bots, and it runs on Windows, macOS, Linux and the web. The Android app is in beta on Google Play, and threads and forums are in early beta. The iOS beta on TestFlight [is on hold for now](https://fluxer.com/help/ios-testflight.md), and we expect the iOS app on the [App Store](https://fluxer.com/help/fluxer-app-store.md) in early November 2026.

If you're moving a community to Fluxer, you can set up its channels from a Discord server template, as [our guide to moving from Discord](https://fluxer.com/help/move-from-discord.md) explains.

Discord's network effect is hard to beat head-on, and I'm starting with people who already have good reason to switch, like 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, because anyone can sign up on fluxer.com and use it for free without setting up a server of their own.

I want the public code to be useful to every Fluxer instance, not only fluxer.com, because no community should have to depend on a single company.

Fluxer is funded in three ways.

- fluxer.com is free to use, and Plutonium is an optional paid subscription on fluxer.com that gives you higher limits and helps fund hosting, support and open source development. Early supporters could also buy Visionary, a one-time lifetime plan, and all 1,000 copies of Visionary sold out in February 2026.
- The [Operator Pass](https://fluxer.com/pass) is an optional one-time purchase for anyone who wants to support Fluxer, whether you self-host, build bots or just use it. You can buy it on [the Operator Pass page](https://fluxer.com/pass), which also lists what comes with it and what it costs.
- Anyone can [donate](https://fluxer.com/donate), including people and organizations who run their own Fluxer instance. Donations help fund hosting and development.

The Fluxer software that anyone can self-host will stay free of feature paywalls, license key checks, limits you have to pay us to raise and [SSO tax](https://sso.tax/). Plutonium is our optional subscription on fluxer.com and only applies there. On your own instance, every account gets the Plutonium features unless you change that, and if you want to sell a premium plan there, you can do that through your own Stripe account.

## 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 on my profile.

### 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 was about what I'd learned from Discord's engineering blog posts and architecture, and how I applied those ideas in my prototype. When I graduated in summer 2022, the school gave me a small $200 scholarship along with the title "Web Guru of the Year".

### 2022 to 2023

I've studied at [KTH Royal Institute of Technology](https://www.kth.se/en) since autumn 2022. By summer 2023, I was putting more time into Fluxer, but only in bursts around my studies.

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

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

### 2023 to 2024

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

After lots of trial and error, and because I really wanted to understand how these systems work, I ended up using proven technologies. Erlang/OTP powers WhatsApp and Discord, and Cassandra is a database Discord relied on for years. Every time I tried something simpler, I rebuilt what these tools already do well.

KTH also cares a lot about applying what you learn, and in a spring 2024 project course, my team built an internal tool for Giesecke+Devrient, a security tech company.

### 2025

In January 2025, I grew wary of how Discord handled my personal data and where the app was heading. I built [Discorch](https://discorch.org/), 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.

In spring 2025, I reported a security vulnerability to Discord and was awarded $2,000. Later that summer, I registered [Fluxer Platform AB](https://www.allabolag.se/foretag/fluxer-platform-ab/stockholm/datacenters/2KJCA7DI5YDLG), a Swedish private limited company. To register the company, I had to deposit at least $2,000 in share capital.

[Video](https://fluxer.com/static/img/blog-assets-tenor-freebie.88a8f2f6b7662a40.mp4)

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](https://urn.kb.se/resolve?urn=urn%3Anbn%3Ase%3Akth%3Adiva-371447).

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

On October 25, 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 while I finished the features.

### 2026

On January 2, 2026, I opened fluxer.com to everyone. Visionary sales picked up, which kept me going, and I started preparing Fluxer for self-hosting.

There was almost no marketing, but on February 9, 2026 Discord announced age verification and people started arriving. More than 100,000 accounts were created on fluxer.com in the 16 days from that day, while it still ran on a single server.

By October 19, 2026, fluxer.com had more than 500,000 accounts. I still write almost all of the code for the backend, web app and desktop app, and the rest comes from community pull requests. Getting here meant dealing with spam waves, DDoS attacks and a long list of other interesting problems that I got to solve.

The next goals are getting the mobile apps into the App Store and Google Play and shipping the new voice and video system. I'm also starting work on optional federation and on end-to-end encryption for personal notes, DMs and group DMs.

> All 1,000 Visionary copies sold out, at a standard price of US$299 or €299. Visionaries have a numbered badge in the app that shows how early on they supported Fluxer.

> [GitHub - fluxerapp/fluxer: A free and open source instant messaging and VoIP chat app built for friends, groups, and communities.](https://github.com/fluxerapp/fluxer)
>
> A free and open source instant messaging and VoIP chat app built for friends, groups, and communities. - fluxerapp/fluxer
>
> Source: GitHub / fluxerapp

## Fluxer's backend

Discord's work on scaling its backend is unusually well documented, and these engineering posts of theirs have been a big reference point for me.

- [How Discord Scaled Elixir to 5,000,000 Concurrent Users](https://discord.com/blog/how-discord-scaled-elixir-to-5-000-000-concurrent-users)
- [Using Rust to Scale Elixir for 11 Million Concurrent Users](https://discord.com/blog/using-rust-to-scale-elixir-for-11-million-concurrent-users)
- [How Discord Stores Trillions of Messages](https://discord.com/blog/how-discord-stores-trillions-of-messages)
- [How Discord Reduced WebSocket Traffic by 40%](https://discord.com/blog/how-discord-reduced-websocket-traffic-by-40-percent)

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 directly with Discord engineers on a few occasions.

### What the backend looks like now

fluxer.com runs as a set of small services, each with its own job. The API and its background worker use TypeScript on Node with [Hono](https://hono.dev/). I use TypeScript for the parts that change most often, because it's productive and the language I know best.

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 one does one job. There's a media proxy for uploads, thumbnails and media conversion. There are also services for users, messages, push notification delivery, link previews, GIF search and Snowflake IDs, which are unique IDs that also record when something was created.

Because Rust has no garbage collector, these services use memory predictably and don't pause to clean it up. That helps most for CPU-heavy media conversion and for the users and messages services, which handle every account and message.

fluxer.com 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. I'm [replacing LiveKit](https://fluxer.com/blog/roadmap-2026.md) with a new voice and video system of my own.

### 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 lets you change the code of a system while it's running, without having to restart it.

Erlang was created at Ericsson, a Swedish telecom company, in 1986 by Joe Armstrong, Robert Virding and Mike Williams, and it started as proprietary software. Joe Armstrong wrote his PhD thesis at my university, KTH, [in the year I was born](https://erlang.org/download/armstrong_thesis_2003.pdf). Erlang was released as open source in 1998, and the OTP unit at Ericsson still maintains it.

WhatsApp and Discord are two well-known apps that use it at a large scale. 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](https://rvirding.blogspot.com/2008/01/virdings-first-rule-of-programming.html), co-creator of Erlang

### Why choose Cassandra?

Discord moved from Cassandra to ScyllaDB, which was my database of choice for a long time. I ruled it out when it [stopped being open source](https://news.ycombinator.com/item?id=42457680) in December 2024.

Cassandra handles sharding and replication for you by splitting data across machines and keeping copies of it. If you want more redundancy or need to handle more reads and writes, you add more machines, which Cassandra calls 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. Working with it feels a lot like working with a relational database. But Cassandra is built to spread large amounts of data across many machines, and to do that, it gives up multi-row transactions and locks.

Because Cassandra is optimized for fast writes, Fluxer is designed to query it as little as possible. Sending a message needs very little database work, because the server usually checks your session from a cache and then writes the message.

Permission checks skip the database and go to the Erlang gateway, which keeps what it needs to work out each community's permissions in memory. Internally, a community is called a "guild". The apps mostly need the database when they start a session and load their initial state, and after that, gateway events keep them in sync.

## Frequently asked questions

### Is Fluxer a Discord alternative?

Yes. Fluxer has text chat, voice and video calls, screen sharing and bots, and threads and forums are in early beta for everyone. You can move a community over to Fluxer by setting up its channels from a Discord server template.

Fluxer is free and open source under the AGPLv3 license. You can use it on fluxer.com or host it yourself, and the desktop and mobile apps connect to either one.

End-to-end encrypted calls are planned for 2026 with the new voice system. Optional federation and end-to-end encryption for notes, DMs and group DMs are on [the roadmap](https://fluxer.com/blog/roadmap-2026.md), with an experimental draft of each in 2026 and stable releases in 2027.

### Is Fluxer vibe-coded?

No. Under [our stance on AI and vibe coding](https://fluxer.com/ai-stance.md), a person who understands the code is responsible for every code change and checks it before it ships. Most lines that change in the repository are translations, and that's why its line counts look so large.

### What about the open web?

A lot of useful knowledge that used to be on the public web is now in chat apps. On the [message boards](https://en.wikipedia.org/wiki/Internet_forum) of the phpBB and vBulletin days, you could read a thread as a guest and still find it on Google years later. Answers in most chat apps can't be found by search engines or read by anyone who isn't signed in to that app.

In 2025, Discord SVP Peter Sellis [told The Verge](https://www.theverge.com/apps/673208/discord-ai-forums-anniversary-gamechat) that a long conversation is "a really poorly structured shareable object," and that LLMs could help turn it into something that could be shared on the web. I agree with the first part, but I still don't think LLMs are a good way to make long, meandering conversations useful, because a summary is written in words that nobody in the conversation chose.

On October 27, 2026, Discord [announced](https://discord.com/blog/making-content-from-discoverable-servers-easier-to-discover) that from November 16, every Discoverable Server will have a public web page with automated summaries of its public channels. From mid-December, members' messages in those channels can also show on the page and in web search, without names or avatars next to them.

Server admins choose which channels take part, and members can turn it off. In the EU, the UK, Canada, Brazil, Australia and South Korea, it's off until a member turns it on. Teens are left out, as are messages sent before mid-December.

Publishing forum posts makes a lot of sense to me. Publishing single messages from a busy chat channel doesn't, because several conversations run there at once and the reply that corrects an answer can come many messages later.

I don't think summaries and single messages can make a chat channel as useful on the web as a forum thread, where every reply stays under its title.

A forum channel in Fluxer works much like a board on an old forum, and each post in it is a thread with a title and its own replies. In October 2026, forum channels came out in [early beta for everyone](https://fluxer.com/blog/patch-notes-2026-10-16.md) on web, desktop, iOS and Android.

Forum channels in Fluxer will also get an [optional public web mode](https://fluxer.com/blog/roadmap-2026.md), and you'll be able to try an experimental draft of it before the end of 2026. Anyone will be able to read the posts in a public forum without having an account, find them in search engines, save them in archives and follow them with RSS or Atom feeds.

A community will decide whether a forum channel is public when it creates the channel, and a private forum channel won't be able to become public later. Everyone who posts in a public forum will be able to see that it's public before they write anything.

Announcement channels will also be able to get a public page with RSS and Atom feeds, but only if the community turns that on for that specific channel. Messages in regular chat channels, DMs and group DMs will never be published on the web.

A public forum page will show only the posts people wrote themselves. Fluxer runs no generative AI or LLM over your messages, files or calls, whether they're on a public forum or anywhere else. [Section 5 of our privacy policy](https://fluxer.com/privacy.md) lists the automated safety checks we do run, such as an image classifier for explicit content preferences.

### Will self-hosting cost money?

No. [Self-hosting Fluxer](https://docs.fluxer.com/operator/) needs no license key, paid tier or special enterprise unlock. You're responsible for updates, server administration, uptime, moderation and safety, and you're the [data controller for your instance](https://fluxer.com/privacy.md) with your own legal duties.

> [Self-hosting and the Operator Pass](https://fluxer.com/blog/self-hosting-and-the-operator-pass.md)
>
> How to run Fluxer as a self-hosted Discord alternative, how the desktop and mobile apps connect to your instance, and what the Operator Pass is.
>
> Source: Fluxer blog / Hampus Kraft

### Can I take my data with me?

Yes. On fluxer.com, you can [request an export](https://fluxer.com/help/data-export.md) of your account data in "User settings" > "Privacy" > "Data export". It has every message you've sent and download links for attachments that haven't expired. You can check on it and download it there, and we also email you when it's ready if your account has an email address. If you run your own instance, your community's data is stored on servers you choose.

### What about federation?

[Federation](https://fluxer.com/blog/roadmap-2026.md) lets separate Fluxer instances, run by different people, connect to each other so their users can talk across instances. It will always be optional, and every instance can keep running on its own. I've decided to base Fluxer's federation on [polyproto-core](https://polyproto.org/), with Fluxer's own extensions for its features, and [not on Matrix](https://fluxer.com/blog/roadmap-2026.md). The plan is an experimental draft in 2026, followed by a stable release in 2027.

The desktop and mobile apps can already sign in to several Fluxer instances at the same time, and that's a separate feature from federation.

### Does Fluxer have end-to-end encryption?

Not yet, and nothing on Fluxer is end-to-end encrypted today. Your data on fluxer.com is [encrypted in transit and at rest](https://fluxer.com/privacy.md), which protects it on the way to our servers and on their disks and backups, but our own systems can decrypt it while they handle it. End-to-end encryption is coming. Calls come first, and every call on the voice and video system planned for 2026 will use DAVE, with no unencrypted fallback.

Fluxer will add [end-to-end encryption with MLS](https://fluxer.com/blog/roadmap-2026.md) (Messaging Layer Security), an IETF standard, to personal notes, DMs and group DMs, with no setting to turn it off. The plan is an experimental draft in 2026 and a stable release in 2027.

### How do I report a bug or suggest a feature?

Post it on [Fluxer Feedback](https://feedback.fluxer.com). Anyone can read the posts there, and you sign in with your fluxer.com account to post, comment and vote. When a change in our [patch notes](https://fluxer.com/blog/patch-notes-2026-10-24.md) started as a post there, the person who posted it is credited next to it.

### Where's the roadmap?

> [Roadmap 2026](https://fluxer.com/blog/roadmap-2026.md)
>
> What we're building for Fluxer in 2026 and 2027, including end-to-end encryption for calls, DMs and group DMs, optional federation and public forums.
>
> Source: Fluxer blog / Hampus Kraft

## Closing thoughts

The best ways to help are using Fluxer, buying Plutonium if you use fluxer.com and like it, getting an [Operator Pass](https://fluxer.com/pass), reporting bugs or requesting features on [Fluxer Feedback](https://feedback.fluxer.com) and [donating](https://fluxer.com/donate) to help fund our hosting and development.

To keep Fluxer independent and self-funded, fluxer.com funds building the open source app, and every feature in it is free for anyone who self-hosts.

See you in the Fluxerverse!

[Video](https://fluxer.com/static/img/blog-assets-tenor-delorean.da4d7758292a5583.mp4)

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

---

Canonical page: https://fluxer.com/blog/how-i-built-fluxer

Last updated on November 1, 2026
