Migrating the

WordPress Community from Slack to Matrix

Alex Kirk
Alex Kirk

Alex Kirk

  • From Vienna, Austria (ich spreche auch deutsch)
  • At Automattic since 2014
    • Engineer, leading teams around Localization & Matrix
    • Sponsored to contribute to WordPress.org in Meta and Polyglots
  • Also working in the ActivityPub field, see my Friends plugin
    Your WordPress can be your personal Mastodon instance with a nice address

What is WordPress?

How the WordPress project works


  • 20 "Make teams": Accessibility, Core, Design, Polyglots, ...
  • Each team has a P2 (blog) for
    • Announcements
    • Proposals
    • Meeting summaries
    • Documentation (handbooks)
  • WordCamps: EU, Asia, US, Germany (soon: Oct 19-22), ...

Five for the Future


  • Companies and individuals pledge to give 5% of time or resources
  • A 100-people company would sponsor 5 people full time
  • Individuals: 2hrs / week
  • → Many people from different companies collaborate

Contributors to WP6.2 by Company


How Open Source works at WordPress

  • Issues are logged in Trac or Github
  • We have multiple trackers, e.g. Core, Meta, Gutenberg
  • Discussions and status updates happen in tickets
  • In (bi-)weekly meetings, the contributors coordinate, share news, scrub bugs, etc.
  • These meetings give everyone a chance to bring issues forward and discuss them with project participants
Overview of the Making WordPress.org teams including meeting times
Calendar view of the WordPress.org community meetings

Why migrate away from Slack?

  • Slack was not designed for an open source community
    • Sign up is E-Mail domain based → @chat.wordpress.org
    • E-Mail forwarding needed so that people receive their invite
  • Non-Open Source chat for an Open Source project

Slack & an open source community

  • Complexity through E-Mail-based signup with invites
  • Common issue at WordCamps where we onboard new people
    Full page of instructions → people won’t read it
  • Message retention
    • 10,000 / 90 days message history limit for free plans
  • Data is siloed behind Slack’s doors

Matrix & an open source community

  • Federation has been designed so that anyone can join
  • Login via existing authentication system (SSO / OIDC)
  • No retention limits
  • Unite several Slack workspaces (e.g. for local communities)
  • Open Source chat for an Open Source project

Matrix is still behind on

  • Element's UX
    • Notification Management
      • No dedicated threads and mentions view
      • Cannot mark message as unread
    • Search: No filters, icon looks like it's in-room search only
    • Joining room experience (need click an "add" icon to join)
  • Other clients miss important features like threads
  • Access Control for server users: Anyone can create a new room
    (we know about Matrix Corporal but we didn't yet dive into it)

Making it easier to join Matrix

Chatrix: Matrix client in a WordPress block

  • Each block can be configured individually
  • Set a home server, can be restricted to a single room
  • Based on Hydrogen with upstream contributions:
Making WordPress Polyglots Team chat page

Creating a new post with a Chatrix block

Making it easier to join Matrix

OpenID Connect Server WordPress plugin

  • Makes your WordPress an OIDC provider
  • → WordPress.org users can login with their account

Making it easier to join Matrix

We host a preconfigured Element Web

Making the Migration easier with a bridge

  • Created the users on the homeserver with a script
  • Slack bridge
    • We’re using a forked version of matrix-appservice-slack
    • Extended the bridge to puppet users on the Matrix side since we know the users exist

Migrating history seamlessly

  1. Create room and bridge it (it won't have history)
  2. Create a second room and migrate the history there
    • Add all users who are in the room in Slack
    • Import in sequence, backdating events (appservice)
    • If a user is no longer in the room, we re-invite them
  3. Copy events from the first room to catch up with real-time
  4. Change room aliases, reattach bridge, delete old room

Matrix Server


  • Synapse
    • Slack bridge
    • OpenID connect configured
    • Migration appservice
  • We migrated
    • ~ 3m messages in ~170 rooms
    • ~ 45k users
    • ~ 55GB database size

Still missing: App migration

  • Simple apps can be used from Matrix through the Slack bridge
  • Ecosystem problem
    • Companies build Slack apps using internal APIs
      → Cannot replicate on Matrix
    • Need to evaluate each Slack app and find a specific solution

Misc Tips

  • Temorarily turn off the push setting in Synapse while importing
    • Our first import of a room resulted in a db size of 257 GB for a Slack channel with 2.5k users and 90k messages
  • OIDC: Synapse queries the userinfo endpoint even for a JWT
  • Serve something useful on the homeserver address HTTPS URL
  • Pick a server address that doesn't imply they represent the project

Trial Phase

  • Making WordPress is not a Matrix-only community yet
  • Slack and Matrix work in parallel for now
  • Still inconclusive about community acceptance
    • Slack is widespread in WordPress-based companies
    • More convenient to just have one chat client
    • Selling point: (individual) cross-org spaces
  • Our Accessibility team is not happy yet

We're Hiring!

Automattic is hiring Matrix Engineers

Ping me at @alex:kirk.at

Thank You!