Migrating the
WordPress Community from Slack to Matrix

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
How the WordPress project works
https://make.wordpress.org/
- 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), ...
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
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:
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 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
- Create room and bridge it (it won't have history)
- 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
- Copy events from the first room to catch up with real-time
- Change room aliases, reattach bridge, delete old room
Matrix Server
community.wordpress.org
- 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