← Projects

The Great Moving

In progress Jun 2026 matrixinfrastructureself-hostedkeybase

The platform that disappeared under us

We were a Keybase shop. It handled encryption, team chat, and file sharing in one place, and it did it well enough that it became invisible, which is exactly what you want from a communication platform. Then Zoom acquired it in 2021, and the maintenance signal went quiet. Updates slowed. Features stalled. The writing was on the wall long before anyone said it out loud.

For a studio, losing your core communication platform is not a minor inconvenience. It is an infrastructure crisis. So we had to think.

What we looked at

The honest answer is that we looked at quite a few things.

Nextcloud kept coming up. It is a serious piece of software and the hub model it offers is genuinely impressive, with files, calendar, tasks, and chat all under one roof. But that was precisely the problem. We did not need a hub. We needed chat. Pulling in Nextcloud to solve a communication problem felt like rewiring your kitchen because a light bulb burned out.

Mattermost was the other obvious candidate. Open source, Slack-shaped, self-hostable. Nothing wrong with it. But the Slack mental model was not what we were used to. Keybase had a particular feel, encrypted by default, cryptographic identity baked in rather than bolted on. Mattermost did not scratch that itch.

Why Matrix

Matrix is not trying to be everything. It is a protocol for federated, encrypted messaging, and the reference client, Element, happens to look and feel remarkably close to what we had lost. The learning curve for the team was close to flat.

The cryptographic model mattered too. Matrix uses the Double Ratchet algorithm for end-to-end encryption in rooms where you want it, which is the same family of thinking Keybase was built on. It was not a foreign concept wrapped in new clothes.

There was one more thing: openness in the extensible sense. Matrix has a bridge ecosystem that lets you connect to other platforms, Slack, Telegram, IRC, and others. We have explored some of those bridges since the move and have a mixed story to tell there, but that is a post of its own.

The point is that Matrix felt like a single, focused piece of software that solved the problem we actually had, without demanding we adopt a whole new way of working. Which essentially made it a top candidate for our whole team and the similarity made it easier for us to adapt to the shift between keybase and the matrix.

How it started

We hosted the initial Synapse instance on AWS Lightsail. One server, one purpose. The logic was simple: run it for a while, see if it sticks, and scale the decision once we knew it was the right one.

This is something of a studio tradition. We have always been scientists of the void. We research, we deploy, we live with something for a few days, and we either commit or cut. We have stood up more platforms than we can easily count, and most of them we eventually took down. Matrix survived that process.

Element became our daily driver. People started opening it without being asked. That is the signal. Team transition was simple enough to guide them adding the homeserver and getting them logged in and they didn’t have to be told about channels or other functions of the app since we were already familiar with keybase that familiarity followed us with the element as well.

Where things stand

We started with Synapse running as a systemd service. That was fine for the early period, but as our infrastructure grew more complex, running things as bare services became harder to manage. The move to Docker Compose was a natural next step. We will cover that transition in detail in a separate post, including how we migrated the existing database and media store without losing history.

What matters here is that the decision held. Matrix is still our communication layer. It became the first real piece of what has grown into a broader open-source infrastructure stack, the thing that showed us this approach was worth pursuing.

We did not know that at the time. We just needed somewhere to talk.