Migrating Your Discord Server

So you run a Discord server and you're thinking about moving to Matrix. This page walks you through recreating your server structure as a Space, setting up permissions, picking bots, and getting your community across without too much chaos.

Haven't read the basics yet? Check the Discord → Matrix guide first — it covers terminology and general differences. This page builds on that.

Recreating Your Server Structure

Discord Server → Matrix Space

A Matrix Space is your Discord server equivalent. It's a container that holds rooms (channels) and can also hold other spaces (like categories). You create one, give it a name and avatar, and people join it to see everything inside.

Categories → Sub-Spaces

Discord uses categories to group channels. On Matrix, you do this with sub-spaces — a space inside your main space. So if your Discord looks like this:

Discord

📁 GENERAL
  #welcome
  #rules
  #general-chat
📁 GAMING
  #minecraft
  #valorant
  #lfg
📁 MEDIA
  #art
  #music
  #memes

Matrix

🏠 Your Community (Space)
  📂 General (Sub-Space)
    💬 #welcome
    💬 #rules
    💬 #general-chat
  📂 Gaming (Sub-Space)
    💬 #minecraft
    💬 #valorant
    💬 #lfg
  📂 Media (Sub-Space)
    💬 #art
    💬 #music
    💬 #memes

In Cinny, this looks almost identical to Discord's sidebar — sub-spaces collapse and expand just like categories do. That's one of the reasons I recommend it.

How To Create It

  1. Create your main Space (Home → "+" → Create Space, or use the /createspace command if your client supports it)
  2. For each category, create a sub-space inside it (in Cinny: right-click the space → "Create Space")
  3. Create rooms inside each sub-space for your individual channels
  4. Set the space to public or invite-only depending on your needs
  5. Copy the matrix.to link for your top-level space — that's your invite link
Tip: Room addresses look like #room-name:zeroprocess.de. Pick short, descriptive names — they can't be changed after creation (you can only create a new room and migrate).

Permissions & Roles

Discord has a complex role system with named roles and per-channel overrides. Matrix is simpler — it uses power levels, which are just numbers.

Discord RoleMatrix Power LevelWhat They Can Do
Server Owner100 (Admin)Everything — full control over the space and all rooms
Admin100Same as owner (Matrix doesn't have a separate owner concept per room beyond whoever created it)
Moderator50 (Moderator)Kick/ban users, delete messages, manage room settings
Trusted / VIP25–49 (custom)Whatever you configure — e.g., ability to change room topic or pin messages
@everyone0 (Default)Send messages, react, read history — the basics
Muted-1Can read but not send messages

Key Differences from Discord

Heads up: The lack of named roles is probably the biggest adjustment for Discord users. Your members won't see "Moderator" next to someone's name — they'll just notice that person can delete messages. It works, it's just less visual.

Recommended Bots

Matrix has a solid bot ecosystem. You won't find exact equivalents for every Discord bot, but the important stuff is covered. Here's what I'd recommend for anyone running a community:

Moderation

🛡️ Draupnir

The go-to moderation bot for Matrix. Think of it as a combination of Discord's AutoMod + Dyno/Carl-bot. It handles:

  • Ban lists (subscribe to shared community ban lists)
  • Auto-banning spammers and known bad actors
  • Room protection (anti-spam, anti-flood)
  • Bulk moderation across all your rooms at once

GitHub · Highly recommended if you're running a public community of any size.

General Purpose

🤖 maubot

A plugin-based bot framework. You install one bot, then load whatever plugins you need. There are plugins for:

  • RSS feeds (post updates from websites into rooms)
  • Reminders and scheduled messages
  • Reaction roles (closest thing to Discord reaction roles)
  • Polls, dice rolling, translate, and more
  • Karma / reputation tracking

GitHub · Very flexible, great for customizing your space.

🔗 Hookshot

Webhooks and integrations for Matrix. Connects your rooms to:

  • GitHub / GitLab (commit notifications, issue tracking)
  • RSS / Atom feeds
  • Generic webhooks (anything that can POST JSON)
  • JIRA, Figma, and more

GitHub · Useful if your community is dev/project-oriented.

Bridging (Keep a Foot in Both Worlds)

🌉 mautrix-discord

A bridge that connects Discord channels to Matrix rooms. Messages sent on one side appear on the other. This is great for a gradual migration — you don't have to hard-cut everyone over at once.

  • Bridge specific channels ↔ rooms
  • Messages, replies, edits, and reactions sync both ways
  • File attachments and embeds are forwarded
  • Users on Discord see Matrix messages and vice versa

GitHub · Run this during the transition, then shut it down when everyone's moved.

Bots work differently here. On Discord, you click "Add Bot," authorize it, and it just works — someone else is hosting it for you. On Matrix, bots are self-hosted programs. There's no "bot store" or OAuth invite button. A bot only exists if someone is actually running it on a server somewhere.

So how do I get a bot in my space?

OptionHow it worksWho does the work
I host it for you I run the bot on my hardware, you invite its account (e.g. @draupnir:zeroprocess.de) into your rooms and give it the right power level I set it up, you just invite & configure
You self-host You run the bot on your own machine or VPS, register a bot account on any homeserver, and invite it yourself All you — full control, but you need the technical chops
Public bots Some community-run bots exist on other Matrix servers that anyone can invite via federation — these are rare and often limited The bot operator — you just invite the account

Once a bot account exists, inviting it is just like inviting any other user — you only need invite permission in the room (power level 50+ by default). The bot shows up as a regular member, so give it the power level it needs (e.g. 50 for moderation bots so they can kick/ban).

The easy route: If your community is part of the zeroprocess space, I'm happy to run Draupnir or maubot for you — just reach out and I'll get it set up. You'll invite the bot account into your rooms and I'll handle keeping it running.

Migration Checklist

Here's a rough step-by-step for moving your community over:

  1. Plan your structure — Map out which Discord categories/channels become sub-spaces/rooms
  2. Create your Space on zeroprocess.de with sub-spaces and rooms
  3. Set up permissions — Give your mods power level 50 in each room
  4. Set up Draupnir (or ask me to) — Get moderation tools in place before people arrive
  5. Optionally bridge — Set up mautrix-discord so people can chat across both platforms during the transition
  6. Announce the move — Tell your Discord members what's happening, link to this site, share the Space invite link
  7. Help people get set up — Point them to the Discord → Matrix guide and recommend Cinny
  8. Run both in parallel for a while — Don't kill the Discord server immediately, let people migrate at their own pace
  9. Wind down Discord — Once activity has shifted, archive or close the Discord server
Don't rush it. Migrations go smoother when people have time to adjust. A couple of weeks of overlap is normal. Some people will resist — that's okay, they'll come around (or they won't, and that's fine too).

Things Server Owners Should Know

You don't need your own homeserver

Your community's space lives on zeroprocess.de. You don't need to run your own Matrix server — just create a Space and you're good. I handle the infrastructure side.

Spaces can be nested

You can have sub-spaces inside sub-spaces. If you had a big Discord server with lots of categories, this maps cleanly. Don't go too deep though — 2 levels is usually plenty.

Room history visibility

You can set whether new members see messages from before they joined. Options are: "Anyone" (like Discord), "Members only from invite", "Members only from join", or "No one." Set this when creating rooms — it's annoying to change later.

There's no "slow mode" (yet)

Matrix doesn't have a built-in slow mode like Discord. If you need rate limiting, Draupnir can help with anti-flood rules, but it's not as elegant.

No built-in welcome screen

There's no fancy welcome/rules popup like Discord's Server Onboarding. The workaround is a pinned message or a dedicated #welcome room with a clear topic/description. maubot can auto-send a welcome DM to new joiners.

Server emoji work differently

Matrix has emoji packs (via the im.ponies.room_emotes spec). You can upload custom emoji to rooms or spaces, and anyone in that room can use them. It's similar to Discord server emoji but not all clients support it equally — Element and Cinny handle it well.