{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Tulir Asokan",
  "home_page_url": "https://mau.fi/blog/",
  "items": [
    {
      "id": "2026-03-mautrix-release",
      "url": "https://mau.fi/blog/2026-03-mautrix-release/",
      "title": "March 2026 releases // Meowlnir protections and XChat support",
      "content_html": "\u003cp\u003eThe initial revision of protections in Meowlnir is finally here. The Telegram\nGo rewrite is also nearing completion.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSoftware\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.2603.0\"\u003ev26.03\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.2603.0\"\u003ev26.03\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.2603.0\"\u003ev26.03\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2603.0\"\u003ev26.03\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.2603.0\"\u003ev26.03\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egomuks\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/gomuks/gomuks/releases/v0.2603.0\"\u003ev26.03\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.26.4\"\u003ev0.26.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.7\"\u003ev0.9.7\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eThe Go rewrite of Telegram received support for avoiding contact names, which\nwas the main blocker for multi-user bridges. Other than the old-style relaybot,\nit should now be ready to replace the old bridge. I'm not yet certain whether\nI'll implement the actual old-style relaybot, or just add enough config options\nto allow emulating the behavior with a dedicated relay user. Either way, I'm\nhoping to have it ready for the next release.\u003c/p\u003e\n\u003cp\u003eSignal had some breaking changes which resulted in extremely rare unscheduled\nreleases. This latest release also starts sending the new fields to match how\nnative Signal 8.0 clients work.\u003c/p\u003e\n\u003cp\u003eThe Twitter bridge has been updated to support the new encrypted XChat chats.\nThe quality of the encryption protocol is obviously extremely dubious and you\nshouldn't rely on Twitter for anything sensitive, but supporting the new chat\ntype is necessary to keep receiving messages. The bridge will prompt you to\nprovide the encryption PIN after updating, which you can do using the\n\u003ccode\u003erelogin \u0026lt;id\u0026gt;\u003c/code\u003e command (where \u003ccode\u003e\u0026lt;id\u0026gt;\u003c/code\u003e can be found with \u003ccode\u003elist-logins\u003c/code\u003e).\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eI finally got around to reviewing and slightly refactoring the protections PR,\nwhich is now included in this release. The list of available protections is\nstill fairly small, plus most of them aren't designed to work well with the\npolicy server and are therefore marked as unsafe. However, the most important\none (\u003ccode\u003eno_media\u003c/code\u003e) works fine both with and without a policy server.\u003c/p\u003e\n\u003cp\u003eFuture development plans include more advanced media protections using local\nimage classification models and making the other protections safer to use in\nthe policy server mode.\u003c/p\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003eDirect chat classification was switched to use the \u003ccode\u003em.direct\u003c/code\u003e account data\nevent, so you may have to manually mark rooms as DMs if they weren't already\nthere. The \u003ccode\u003e/converttodm\u003c/code\u003e command exists to do that.\u003c/p\u003e\n\u003cp\u003eKlipy support was also added to the GIF picker, as Tenor is being shut down\nin June.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in March 2026",
      "date_published": "2026-03-16T18:31:27+02:00",
      "date_modified": "2026-03-16T18:33:40+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2026-02-mautrix-release",
      "url": "https://mau.fi/blog/2026-02-mautrix-release/",
      "title": "February 2026 releases // Pop-out widgets in gomuks",
      "content_html": "\u003cp\u003eThis month's releases include pop-out widgets in gomuks, policy list subscribing\ncommands in Meowlnir and more bugfixes in bridges. Also, \u003ca href=\"https://go.dev/blog/go1.26\"\u003eGo 1.26\u003c/a\u003e was released,\nso the minimum version for compiling any new releases is now 1.25. As always,\nprecompiled binaries have no dependencies and don't require installing Go.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSoftware\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-linkedin\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/linkedin/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-discord\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/discord/releases/v0.7.6\"\u003ev0.7.6\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egomuks\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/gomuks/gomuks/releases/v0.2602.0\"\u003ev26.02\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.26.3\"\u003ev0.26.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.6\"\u003ev0.9.6\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003eThe widget support in gomuks web was upgraded to include always on screen\nwidgets, which should be the last piece to actually usable Element Call in\ngomuks: you can now safely switch between rooms without the call being\ninterrupted. It'll just pop out into a floating box that you can move or resize\nhowever you want.\u003c/p\u003e\n\u003cp\u003eA bunch of smaller improvements were made as well, such as hiding events in JS\nto enable accurate date change headers and redirecting read receipts to the\nprevious visible event. It also improves performance by not adding hidden events\nto the DOM.\u003c/p\u003e\n\u003cp\u003eTerminal didn't get much changes other than a fix for the /reply command, which\nwas supposed to work in the previous release, but accidentally didn't.\u003c/p\u003e\n\u003cp\u003eThe backend now has C FFI bindings, which can be used to embed gomuks into\ndifferent kinds of clients. For example, QuadRadical is building a Flutter\nfrontend which uses the C FFI: \u003ca href=\"https://git.federated.nexus/Henry-Hiles/nexus\"\u003ehttps://git.federated.nexus/Henry-Hiles/nexus\u003c/a\u003e.\nFuture gomuks web mobile or desktop clients with embedded backend support will\nprobably also use the C bindings.\u003c/p\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eMost bridge changes were bugfixes again, although Messenger got a new login flow\nwhich uses username/password input rather than requiring a browser. It's still\nexperimental though, so for now it may be safer to stick to the old flows.\u003c/p\u003e\n\u003cp\u003eDiscord had accumulated a bunch of small bugfixes and while the rewrite is\nprogressing, it's not ready yet, so I decided to make another hopefully final\nrelease of the old bridge.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eI didn't get around to reviewing the protections PR, but the policy list\nsubscribing commands were merged, so you can now manage a Meowlnir instance\nwithout sending raw state events.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in February 2026",
      "date_published": "2026-02-16T17:05:44+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2026-01-mautrix-release",
      "url": "https://mau.fi/blog/2026-01-mautrix-release/",
      "title": "January 2026 releases // New command systems and gomuks notification center",
      "content_html": "\u003cp\u003eThis month's releases include \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4391\"\u003eMSC4391\u003c/a\u003e support in gomuks and Meowlnir, as well\nas various bugfixes.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSoftware\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.2601.0\"\u003ev26.01\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.2601.0\"\u003ev26.01\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.2601.0\"\u003ev26.01\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.2601.0\"\u003ev26.01\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egomuks\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/gomuks/gomuks/releases/v0.2601.0\"\u003ev26.01\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.26.2\"\u003ev0.26.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.5\"\u003ev0.9.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003eThe command system was switched from \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4332\"\u003eMSC4332\u003c/a\u003e to \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4391\"\u003eMSC4391\u003c/a\u003e, which is both\nsimpler and more versatile. As a part of the switch, commands were also\nimplemented in new gomuks terminal, which means replying/reacting is possible\nagain (among other things). Note that there's no autocompletion for commands\nin the terminal interface yet, but they should work other than that.\u003c/p\u003e\n\u003cp\u003eOn the web side, a notification center was added to easily view messages that\ntriggered notifications. It has the caveat that only messages that gomuks\nreceived will be listed, i.e. if gomuks was offline and there were lots of\nmessages, those messages won't show up until you scroll up to them.\u003c/p\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eBridge releases this month were very bugfix-heavy: Signal had various fixes for\nsender keys added last month and WhatsApp got more LID handling fixes.\u003c/p\u003e\n\u003cp\u003eTelegram is mostly in the same spot as last month, but more bugs were fixed, so\nnow it's stable for single-account bridges. Discord is progressing on schedule,\nso it'll take at least another month, but might take longer too.\u003c/p\u003e\n\u003cp\u003eThe Twitter bridge is also being rewritten again to support the new \u0026quot;encrypted\u0026quot;\nXChat protocol. You can already use the \u003ccode\u003exchat\u003c/code\u003e branch if you depend on Twitter\nDMs for some reason. After updating the bridge, run \u003ccode\u003erelogin \u0026lt;your login ID\u0026gt;\u003c/code\u003e\nto be prompted for your encryption PIN. The remaining bugs will hopefully be\nfixed within the next month so that the rewrite can be included in the next\nrelease cycle.\u003c/p\u003e\n\u003cp\u003eSwitching mautrix-go to use \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4391\"\u003eMSC4391\u003c/a\u003e for bridge commands is planned next month\nand maubot will probably also eventually get support.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir has also switched to \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4391\"\u003eMSC4391\u003c/a\u003e for commands, but other than that there\nweren't any major changes. I'm hoping to review nexy's protections PR in the\nnext month to get it into the next release, but not sure if that will actually\nhappen.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in January 2026",
      "date_published": "2026-01-16T18:01:46+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-12-mautrix-release",
      "url": "https://mau.fi/blog/2025-12-mautrix-release/",
      "title": "December 2025 releases // Image pack editing and megabridge rewrite progress",
      "content_html": "\u003cp\u003eThis month's releases don't have too many new features, but gomuks did get an\nimage pack editor and the remaining megabridge rewrites are progressing again.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSoftware\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.2512.0\"\u003ev25.12\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-linkedin\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/linkedin/releases/v0.2512.0\"\u003ev25.12\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.2512.0\"\u003ev25.12\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.2512.0\"\u003ev25.12\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.2512.0\"\u003ev25.12\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egomuks\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/gomuks/gomuks/releases/v0.2512.0\"\u003ev25.12\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.26.1\"\u003ev0.26.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.4\"\u003ev0.9.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003egomuks terminal didn't get any updates this month, but gomuks web got a voice\nmessage recorder and an emoji/sticker pack editor. The pack editor can also be\nused to reorder images using \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4389\"\u003eMSC4389\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe GeckoView wrapper for Android got a bunch of updates and now supports\nrequesting microphone permissions for the voice message recorder and Element\nCall, as well as downloading files to disk.\u003c/p\u003e\n\u003cp\u003eUnfortunately asking for camera permission for Element Call is not yet supported\nbecause Android is dumb: apps that never ask for camera permission can use the\nsystem camera to take photos without permission, but if the camera permission is\nin the manifest, then it is required even for using the system camera. This\nmeans that using the camera to take a photo also needs a permission prompt\nbefore video calling can be supported.\u003c/p\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eThe Signal bridge got support for sender keys, which makes sending messages to\ngroups significantly faster. Polls are also fully supported now. Other than\nthat, most bridge changes were just bugfixes.\u003c/p\u003e\n\u003cp\u003eOn the megabridge rewrites, Telegram is now progressing again. Lots of bugs have\nbeen fixed and support for bot logins was added, so while there's no old-style\nrelaybot, you can use the generic relay mode with a bot account. It is not yet\nsafe for multi-user use, as it uses contact names by default (Telegram makes it\nvery difficult to avoid contact names, the old bridge had complicated logic for\nthat). If you only have one login though, you can try migrating to the new\nbridge.\u003c/p\u003e\n\u003cp\u003eThe Discord rewrite has also finally started, but is expected to take a couple\nof months at least. Discord also has a novel relay system (webhooks), which\ndoesn't quite fit into the generic relay mode.\u003c/p\u003e\n\u003cp\u003eThe Google Chat rewrite is technically ready, but hasn't been tested properly\nand unfortunately isn't scheduled to be finished in the near future.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir didn't have many changes either, but there are some new API endpoints\nin preparation for a future web management interface.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in December 2025",
      "date_published": "2025-12-16T15:03:19+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-11-mautrix-release",
      "url": "https://mau.fi/blog/2025-11-mautrix-release/",
      "title": "November 2025 releases // gomuks terminal and mautrix-irc",
      "content_html": "\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSoftware\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-linkedin\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/linkedin/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gvoice\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gvoice/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-zulip\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/zulip/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egomuks\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/gomuks/gomuks/releases/v0.2511.0\"\u003ev25.11\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.26.0\"\u003ev0.26.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.3\"\u003ev0.9.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003eThe big news is that gomuks terminal is finally back. As neither of my previous\nplans ended up working out, I ended up doing it myself by hacking the legacy\ngomuks code to use the new RPC API to talk with the gomuks backend.\u003c/p\u003e\n\u003cp\u003eIt's not quite at feature parity with legacy gomuks yet, but it works for basic\nchatting. Some use of the web interface is required, as the terminal frontend\ndoesn't have Matrix login support yet. For now, gomuks terminal is a separate\nbinary that only includes the frontend, so the backend has to run separately.\nIn the future, they'll probably be available in the same binary and you can\nchoose between embedded and remote backend.\u003c/p\u003e\n\u003cp\u003eAs with bridges, gomuks will use calendar versioning, so the first release of\ngomuks web and new gomuks terminal is v25.11.\u003c/p\u003e\n\u003cp\u003eOther than gomuks terminal, the web frontend also had some changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ea space viewer with buttons for adding and removing rooms to a space\u003c/li\u003e\n\u003cli\u003esyncing space child changes to the frontend in real time\n(previously you had to reload to apply changes)\u003c/li\u003e\n\u003cli\u003eroom autocomplete (which was required for adding rooms to a space)\u003c/li\u003e\n\u003cli\u003edisplaying invited users in the member list and autocomplete\u003c/li\u003e\n\u003cli\u003elinkifying event IDs in message pin notices\u003c/li\u003e\n\u003cli\u003ecommands to change room name/avatar\u003c/li\u003e\n\u003cli\u003esupport for sending @room mentions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003ch3\u003emautrix-irc\u003c/h3\u003e\n\u003cp\u003eI've started writing the successor to \u003ca href=\"https://github.com/hifi/heisenbridge\"\u003eHeisenbridge\u003c/a\u003e\nin Go using the bridgev2 framework. It already works for basic chatting and has\nsome fancy IRCv3 features as well, but it's not very robust, so I wouldn't\nrecommend switching from Heisenbridge just yet. In particular, support for\nlegacy (non-v3) IRC networks is not yet good, as fallbacks for various features\nare still missing.\u003c/p\u003e\n\u003ch3\u003eOther bridges\u003c/h3\u003e\n\u003cp\u003emautrix-zulip and mautrix-linkedin had their first releases. They more or less\nwork and there haven't been any major changes recently.\u003c/p\u003e\n\u003cp\u003emautrix-whatsapp had a lot of fixes. The LID migration on WhatsApp's side is\nstill in progress and brings up more bugs occasionally. WhatsApp Android also\nhad a breaking change that broke pairing with the bridge, which is fixed now.\u003c/p\u003e\n\u003cp\u003emautrix-signal got initial support for polls, although vote bridging isn't\nworking yet. As with WhatsApp, bridging polls as Element-compatible extensible\nevents must be enabled in the config separately, as those polls are not in the\nMatrix spec yet.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir's policy server has been updated to the latest version of [MSC4284],\nwhich has the event sender call \u003ccode\u003e/sign\u003c/code\u003e once instead of every receiver calling\n\u003ccode\u003e/check\u003c/code\u003e.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in November 2025",
      "date_published": "2025-11-16T14:58:32+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-10-mautrix-release",
      "url": "https://mau.fi/blog/2025-10-mautrix-release/",
      "title": "October 2025 releases // Verification in bridges, hosted Meowlnirs \u0026 Zulip bridge",
      "content_html": "\u003cp\u003eThis month's releases include self-signing support in bridges, better\nmulti-tenant support in Meowlnir for Asgard.Chat, a Zulip bridge, and a new\nversioning scheme for bridges and Meowlnir.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-bluesky\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/bluesky/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gvoice\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gvoice/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.2510.0\"\u003ev25.10\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.25.2\"\u003ev0.25.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.2\"\u003ev0.9.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVersioning\u003c/h2\u003e\n\u003cp\u003eAll Go bridges have been following a monthly release schedule ever since the\nWhatsApp bridge was accidentally released on the same day for 3 months in a row.\nTo simplify picking version numbers and telling how old a given version is, all\nmegabridges and Meowlnir have switched to \u003ca href=\"https://calver.org/\"\u003ecalendar versioning\u003c/a\u003e\nusing the \u003ccode\u003evYY.0M.patch\u003c/code\u003e format.\u003c/p\u003e\n\u003cp\u003eThis months releases are \u003ccode\u003ev25.10\u003c/code\u003e with \u003ccode\u003ev0.2510.0\u003c/code\u003e as the git tags. In the\nunlikely event of a patch release, it'd be \u003ccode\u003ev25.10.1\u003c/code\u003e and \u003ccode\u003ev0.2510.1\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eDue to restrictions from Go modules, the actual git tags will still follow\n\u003ca href=\"https://0ver.org/\"\u003e0ver\u003c/a\u003e, so they'll be formatted as \u003ccode\u003ev0.YY0M.patch\u003c/code\u003e instead.\nDocker tags will be available in both formats.\u003c/p\u003e\n\u003cp\u003eOther projects like maubot and gomuks are also expected to switch to calendar\nversioning in the future. Legacy bridges like Telegram and Discord won't switch\nover before being rewritten though.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eIf you've read \u003ca href=\"https://matrix.org/blog/2025/09/26/this-week-in-matrix-2025-09-26/#asgard-chat\"\u003eThis Week In Matrix\u003c/a\u003e\nor watched this morning's keynote at the Matrix conference, you may have already\nheard about \u003ca href=\"https://asgard.chat/\"\u003eAsgard.Chat\u003c/a\u003e, a hosted moderation bot service\nI recently launched with some other people. Check it out if you need a\nmoderation bot (which you do if you run any public Matrix rooms), but can't host\none yourself.\u003c/p\u003e\n\u003cp\u003eTo work with Asgard, Meowlnir has some improved multi-tenancy features. In\nparticular, the \u003ccode\u003euntrusted\u003c/code\u003e flag in the config can be set to indicate the\ninstance is meant for multiple tenants to enable some additional checks to the\npolicy list cache. Without the checks, separate bots may be able to access\npolicy list info without actually being in the list room.\u003c/p\u003e\n\u003cp\u003eAdditionally, there's a new \u003ccode\u003emeowlnir4all\u003c/code\u003e section in the config which can be\nset to enable the \u003ccode\u003e!provision\u003c/code\u003e command. The command can be used from an admin\nroom to fully provision a new bot and management room for a given user.\u003c/p\u003e\n\u003ch2\u003emautrix-zulip\u003c/h2\u003e\n\u003cp\u003eThere's a new puppeting bridge for \u003ca href=\"https://zulip.com/\"\u003eZulip\u003c/a\u003e. It doesn't have\na lot of features yet, but should work for basic bridging. As with all bridgev2\nbridges, it also supports relay mode, but I haven't tested logging in as a bot.\u003c/p\u003e\n\u003cp\u003eZulip topics are bridged as Matrix threads. It works best with a client like\ngomuks, which shows all messages in the main timeline, but allows focusing on\na thread.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/mautrix/zulip\"\u003ehttps://github.com/mautrix/zulip\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eE2EE self-signing in bridges\u003c/h2\u003e\n\u003cp\u003eAs mentioned last month, mautrix-go and mautrix-python now have basic support\nfor cross-signing the bridge bot for future proofing against \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4153\"\u003eMSC4153\u003c/a\u003e. You can\nenable it using the \u003ccode\u003eself_sign\u003c/code\u003e option under \u003ccode\u003eencryption\u003c/code\u003e in the bridge config.\nWhen enabled, the bridge will generate a new recovery key and cross-signing keys,\nthen sign its own device.\u003c/p\u003e\n\u003cp\u003eMegabridges will save the recovery key in the \u003ccode\u003ekv_store\u003c/code\u003e table in the database,\nwhile legacy bridges (i.e. Telegram) will just log it. If the bridge is reset\nsuch that the bridge has to sign itself again, Go bridges will ask you to put\nthe old recovery key in the database, or a special \u003ccode\u003eoverwrite\u003c/code\u003e value to tell\nthe bridge you want it to overwrite existing cross-signing keys. However, Python\nwill just always try to overwrite keys.\u003c/p\u003e\n\u003cp\u003eNote that the bridge can't do user-interactive auth, which means by default it\ncan only upload cross-signing keys if the bot doesn't have those keys yet. This\nmeans that overwriting as mentioned above will fail if the bridge bot already\nhas cross-signing keys uploaded. However, recent changes to \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4190\"\u003eMSC4190\u003c/a\u003e allow\nbridges to replace keys without UIA, so the problem can be avoided by enabling\nMSC4190 and ensuring you have the latest version of Synapse (v1.139 or higher).\nAlso note that until Synapse v1.141, enabling MSC4190 requires updating the\nbridge registration. See \u003ca href=\"https://docs.mau.fi/bridges/general/end-to-bridge-encryption.html#use-with-next-gen-auth-mas-msc4190\"\u003ethe docs\u003c/a\u003e\nfor more info.\u003c/p\u003e\n\u003cp\u003eSelf-signing the bridge bot is only the first step: it is not expected to remove\nwarnings, but it's enough to be compatible under the \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/4153-invisible-crypto.md#clients-may-make-provisions-for-encrypted-bridges\"\u003eexception that MSC4153\ngives for bridges\u003c/a\u003e.\nThe proper solution to remove warnings will be \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4350\"\u003eMSC4350\u003c/a\u003e, which defines a way\nto explicitly allow the bridge bot to impersonate ghosts and double puppeted\nusers.\u003c/p\u003e\n\u003cp\u003eIn addition to verification, the support for \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/3202\"\u003eMSC3202\u003c/a\u003e (the \u003ccode\u003eappservice\u003c/code\u003e mode\nin the encryption config) was updated to work with Synapse, so it is now safe\nto enable as long as you regenerate the registration and enable the relevant\n\u003ccode\u003eexperimental_features\u003c/code\u003e in the Synapse config as well.\u003c/p\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003egomuks was less active this month, but there is an account data explorer now in\naddition to the old room state explorer. Also, a dedicated share button was\nadded to rooms and spaces to avoid having to go through the event share menu to\nget a room link.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in October 2025",
      "date_published": "2025-10-16T13:29:18+02:00",
      "date_modified": "2025-10-18T11:01:17+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-09-mautrix-release",
      "url": "https://mau.fi/blog/2025-09-mautrix-release/",
      "title": "September 2025 releases // Verification in maubot, bridge group creation and commandmuks",
      "content_html": "\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.7.0\"\u003ev0.7.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.12.5\"\u003ev0.12.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.7\"\u003ev0.8.7\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.25.1\"\u003ev0.25.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.8.0\"\u003ev0.8.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.1\"\u003ev0.9.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003emaubot\u003c/h2\u003e\n\u003cp\u003emaubot 0.6.0 beta 1 was released, which includes v12 support (e.g. when checking\npower levels after following a tombstone) as well as two new buttons for\nverifying the maubot device, either using an existing recovery key or generating\na new recovery key.\u003c/p\u003e\n\u003cp\u003eWith the verification support, all maubots can be future-proofed for \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4153\"\u003eMSC4153\u003c/a\u003e,\nwhich is expected to land in the near-ish future (within months).\u003c/p\u003e\n\u003cp\u003eBridges will likely get basic cross-signing support in the next release.\nHowever, only the bridge bot will be verified initially, and clients will keep\nshowing a warning for messages from ghost users. MSC4153 includes a caveat to\nallow such use until \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4350\"\u003eMSC4350\u003c/a\u003e is implemented, which is likely to happen some\nmonths after the base MSC4153 changes come into effect.\u003c/p\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eThere were less bridge releases this month, but all three bridges with releases\nnow have support for creating new group chats for existing Matrix rooms.\nBridging existing groups to existing rooms will probably happen in the next few\nmonths too.\u003c/p\u003e\n\u003cp\u003eAll three released bridges also removed support for the legacy provisioning APIs\nand legacy migration, which means upgrading from the pre-megabridge versions is\nno longer supported. If you were using the bridge with config writing disabled,\nyou must also make sure that the config is updated to the megabridge format\nbefore upgrading to these releases.\u003c/p\u003e\n\u003cp\u003eWhile the WhatsApp bridge didn't get any LID-related changes, WhatsApp's rollout\nof the feature to existing groups is continuing, so bridges set up before v0.5.0\nmust ensure their \u003ccode\u003eregistration.yaml\u003c/code\u003e file has the appropriate regex. There's a\n\u003ca href=\"https://docs.mau.fi/bridges/general/troubleshooting.html#mautrix-whatsapp-messages-in-some-groups-are-no-longer-bridged\"\u003enew entry on the troubleshooting page\u003c/a\u003e\nwith more details.\u003c/p\u003e\n\u003cp\u003eGoogle Messages got support for typing notifications in both directions, as well\nas read receipts from RCS group chats. The read receipt feature is particularly\nhacky, as the messages for web API doesn't actually send them in a sensible\nformat like \u003ccode\u003e\u0026quot;read_by\u0026quot;: [\u0026quot;user_id\u0026quot;, ...]\u003c/code\u003e. Instead, it sends\n\u003ccode\u003e\u0026quot;status_text\u0026quot;: \u0026quot;Read by Name1, Name2, ...\u0026quot;\u003c/code\u003e, which the bridge has to parse.\nFortunately, it wasn't too difficult to cache the raw group metadata in memory\nand use those names to map to user IDs. There will be incorrect read receipts if\nyou have multiple users with the same name, but those are unavoidable.\u003c/p\u003e\n\u003cp\u003eThe Meta bridge has support for typing notifications from/to Instagram, but it\nwasn't released yet, as there were some bugs found fairly late and I didn't want\nto risk a release in case there are more bugs.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir's policy server will now actually validate PDUs it receives, which\nmeans it might be somewhat safe to use. However, the PDU validation code in\nmautrix-go depends on \u003ccode\u003eGOEXPERIMENT=jsonv2\u003c/code\u003e, so the policy server will be\nhard-disabled if Meowlnir is built without that experiment.\u003c/p\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003egomuks got support for web push, which means you can now use it as a PWA on iOS\nwith proper push notifications. It of course works on Android and desktop\nbrowsers as well, but those are less useful, as there's gomuks android for\nnative FCM push and desktop generally doesn't need push.\u003c/p\u003e\n\u003cp\u003eThread support has been improved by making thread messages in timeline more\ncompact by default: instead of rendering entire messages as replies, the main\ntimeline only shows the first 2 lines and makes it very obvious that they're\nthread messages. Clicking on any thread message will open the thread sidebar.\u003c/p\u003e\n\u003cp\u003eIf you prefer the old way of rendering thread messages, you can still disable\n\u0026quot;Compact thread messages\u0026quot; in settings.\u003c/p\u003e\n\u003cp\u003eExperimental support for \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4332\"\u003eMSC4332\u003c/a\u003e: In-room bot commands was added, along with\na bunch of built-in commands built on the same system. The UI is still fairly\nrough, but you can still just type parameters instead of using the input fields.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in September 2025",
      "date_published": "2025-09-16T15:54:14+03:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-08-mautrix-release",
      "url": "https://mau.fi/blog/2025-08-mautrix-release/",
      "title": "August 2025 releases // Room v12 support, threadmuks and wasmuks",
      "content_html": "\u003cp\u003eMeowlnir and bridges received room v12 support as expected. The legacy\nprovisioning APIs in bridges were also deprecated. Bigger changes in gomuks\nthis month include jumping to events, a thread view and the start of a wasm\nbuild.\u003c/p\u003e\n\u003cp\u003eAlso, with the release of \u003ca href=\"https://go.dev/blog/go1.25\"\u003eGo 1.25\u003c/a\u003e, the minimum version for compiling any new\nreleases is now 1.24. As always, precompiled binaries have no dependencies and\ndon't require installing Go.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.6.5\"\u003ev0.6.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.12.4\"\u003ev0.12.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.5.0\"\u003ev0.5.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gvoice\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gvoice/releases/v0.1.2\"\u003ev0.1.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.6\"\u003ev0.8.6\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2.3\"\u003ev0.2.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.5.3\"\u003ev0.5.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.25.0\"\u003ev0.25.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.7.0\"\u003ev0.7.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.9.0\"\u003ev0.9.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eThe legacy provisioning APIs (\u003ccode\u003e/_matrix/provision/v1\u003c/code\u003e and \u003ccode\u003e../v2\u003c/code\u003e) are now\nformally deprecated in all megabridges and will be removed in next month's\nreleases. Anyone using the legacy APIs should migrate to the \u003ccode\u003e/v3\u003c/code\u003e\n\u003ca href=\"https://spec.mau.fi/megabridge/\"\u003eMegabridge provisioning API\u003c/a\u003e immediately.\u003c/p\u003e\n\u003cp\u003eRoom v12 support was added to megabridges and mautrix-discord, although not all\nbridges got a release this month. The bridges will also follow tombstones\nautomatically to make room upgrades easier. If you use mautrix-discord for\npublic rooms, you may want to update to the main branch.\u003c/p\u003e\n\u003cp\u003eInternally, mautrix-go got rid of the gorilla toolkit which has been mostly\nunmaintained for years (except for some broken releases). HTTP routers were\nreplaced with the standard library and websockets now use \u003ca href=\"https://github.com/coder/websocket\"\u003ecoder/websocket\u003c/a\u003e.\nThe HTTP router change is a breaking change for some library users who assume\nthe router is gorilla/mux.\u003c/p\u003e\n\u003cp\u003eOther than that, there were minor bridging improvements in multiple bridges,\nsuch as \u0026quot;delete for me\u0026quot; bridging on Signal and better placeholders for various\nmessage types on WhatsApp. Signal also bumped their backup/transfer protocol\nversion, so some users may have noticed the lack of a history transfer option\nwhen linking the bridge to Signal iOS. The latest release adds support for the\nlatest protocol version to restore history transfer.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir received room v12 support as expected. Note that tombstones are not\nfollowed automatically, so you have to re-protect/watch rooms if a protected\nroom or watched list is upgraded. There will likely be automated tombstone\nhandling in the future.\u003c/p\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003ch3\u003eJumping to events and thread view\u003c/h3\u003e\n\u003cp\u003eJumping to arbitrary events is now possible using a separate modal. This\nincludes jumping to reply when someone replies to an old message as well as\nclicking matrix.to links with an event ID. If the event is loaded in the visible\ntimeline, gomuks will still jump to it in place, but when it's not loaded, a\nseparate modal will open to show the event and context around it. Internally,\nthe modal calls the event \u003ccode\u003e/context\u003c/code\u003e API on the homeserver rather than using\nthe local database.\u003c/p\u003e\n\u003cp\u003eAfter I made the event context modal, I realized a thread view could be\nimplemented just as easily using the \u003ccode\u003e/relations\u003c/code\u003e endpoint, so I did that. When\nyou click on the reply box of a threaded reply, it'll open the thread view in\nthe right panel instead of jumping to the event.\u003c/p\u003e\n\u003ch3\u003eWasmuks\u003c/h3\u003e\n\u003cp\u003eAs mentioned in my \u003ca href=\"https://mau.fi/blog/2024-h1-mautrix-updates/#high-level-client-framework\"\u003every first post\u003c/a\u003e,\nbefore starting gomuks web I had looked into running it in wasm, but discarded\nthe idea due to performance concerns. However, while I want maximum performance\nfor my own account, that doesn't mean having a wasm build as an option would be\na bad idea, so I decided to see if it works at all.\u003c/p\u003e\n\u003cp\u003eAfter some updates to the proof-of-concept Go-JS-SQLite bridge I made last year,\nI was able to hook it up to gomuks and compile the whole thing to wasm. The\nperformance is certainly worse than natively, but it appears usable on my test\naccount with a few dozen rooms.\u003c/p\u003e\n\u003cp\u003eMatrix e2ee was trivial thanks to goolm. Getting libolm would've been much more\ncomplicated, as there's no cgo for wasm. That's also why the SQLite connector\nhas to bridge via JS. In the future, the wasm component model may allow more\ndirect C\u0026lt;-\u0026gt;Go interop, but I'm not sure whether that stuff is going to be\nsupported in browsers any time soon.\u003c/p\u003e\n\u003cp\u003eThe main missing bit is media, as the native version proxies media downloads\nvia the Go backend for authentication and decryption. I'll probably go for a\nservice worker, but still need to figure out how to have it talk to the Go\nside for encryption keys and authentication.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUpdate:\u003c/strong\u003e media has been implemented and a demo is now available at\n\u003ca href=\"https://demo.gomuks.app\"\u003ehttps://demo.gomuks.app\u003c/a\u003e. It's still very fragile and will explode if you\nhold it wrong.\u003c/p\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRoom v12+ power level support in various places where it's relevant, like\ndisplaying moderation buttons and sorting the member list.\u003c/li\u003e\n\u003cli\u003eMegolm sessions are now shared when you start typing rather than when you\nsend the message.\u003c/li\u003e\n\u003cli\u003eA mutex was added around sending to try to preserve outgoing message order\nbetter.\u003c/li\u003e\n\u003cli\u003eEvents flagged as soft-failed by Synapse will be rendered with a special\nbackground color. Server admins can opt into receiving soft-failed events\nusing the \u003ccode\u003eio.element.synapse.admin_client_config\u003c/code\u003e account data event.\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in August 2025",
      "date_published": "2025-08-16T14:59:50+03:00",
      "date_modified": "2025-09-15T17:28:13+03:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-07-mautrix-release",
      "url": "https://mau.fi/blog/2025-07-mautrix-release/",
      "title": "July 2025 releases // bandwidthmuks",
      "content_html": "\u003cp\u003eThis month's bridge releases include future-proofing against room v12 and many\nsmaller bug fixes. On the gomuks side, bandwidth usage has been improved.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.6.4\"\u003ev0.6.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.12.3\"\u003ev0.12.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-telegram\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/telegram/releases/v0.15.3\"\u003ev0.15.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-bluesky\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/bluesky/releases/v0.1.2\"\u003ev0.1.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-discord\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/discord/releases/v0.7.5\"\u003ev0.7.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.4.3\"\u003ev0.4.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gvoice\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gvoice/releases/v0.1.1\"\u003ev0.1.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.5\"\u003ev0.8.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2.2\"\u003ev0.2.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.5.2\"\u003ev0.5.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.24.2\"\u003ev0.24.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eNearly all bridges got a release this month, primarily to future-proof them\nagainst changes in future room versions. \u003ca href=\"https://matrix.org/blog/2025/07/security-predisclosure/\"\u003eRoom v12\u003c/a\u003e is scheduled to be released\nnext week and it contains breaking changes to power levels and the \u003ccode\u003e/createRoom\u003c/code\u003e\nAPI. In order to ensure bridges can still create rooms when v12 becomes default,\nall bridges have been updated to hardcode v11 in create room requests. The next\nmonth's releases are expected to have proper support for v12.\u003c/p\u003e\n\u003cp\u003eWhatsApp's \u003ccode\u003e@lid\u003c/code\u003e support has received further improvements. LID DMs should now\nbe merged into the phone number DM more consistently, and even if merging doesn't\nwork, sending to LID DMs should actually work now. The bridge also stores LID\nmappings received from the phone.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eThe Meowlnir release this month was skipped, as it is expected that there will\nbe changes to support room v12 within a week. There won't be a release with the\nchanges right away, but admins using Meowlnir who want to upgrade their rooms\nto v12 are strongly encouraged to update to main/latest as soon as the v12\ncompatibility lands there.\u003c/p\u003e\n\u003cp\u003eUsing old versions of Meowlnir in a v12 room may cause unexpected behavior, as\nthe bot won't know that creators have special power. However, if you don't\nupgrade any Meowlnir-moderated rooms to v12, then there's no urgency in updating\nMeowlnir either.\u003c/p\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003eThe bandwidthmuks project has finally started with 2 main changes:\u003c/p\u003e\n\u003cp\u003eThere's now an option in settings to compress server-\u0026gt;client traffic. It uses a\nconnection-wide deflate session similar to Discord. I chose a custom implementation\nover the standard permessage-deflate, as the standard isn't supported properly on\nSafari, plus I assume Discord did extensive testing to find that a connection-wide\ndeflate is more efficient than per-message. Compression is not enabled by default,\nas it prevents using browser devtools effectively, and it's not really needed if\ngomuks is on \u003ccode\u003elocalhost\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIf the client is slow to read incoming data, the server will bundle queued events\nin one websocket message rather than waiting for each one. This should lead to\na few big packets instead of many small ones, which will hopefully go through\nfaster. I didn't actually bother benchmarking it though, so who knows.\u003c/p\u003e\n\u003cp\u003eIn addition to actual bandwidth improvements, the media upload indicator now has\nan actual progress bar instead of just a spinner. The indicator shows both gomuks\nfrontend -\u0026gt; backend upload and backend -\u0026gt; homeserver upload as the first and\nsecond half of the progress bar respectively. Between the two halves, there may\nbe some processing on the backend, which isn't currently measured and depends on\noptions chosen in the upload dialog (e.g. re-encoding videos may take a while).\nThe media uploads can even be cancelled now at any stage.\u003c/p\u003e\n\u003cp\u003eNon-bandwidth changes this month include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixes for \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4293\"\u003eMSC4293\u003c/a\u003e support, as it turned out the initial implementation was\nbroken.\u003c/li\u003e\n\u003cli\u003eDisplaying why a message was redacted (either \u0026quot;via ban event\u0026quot; or the user who\nsent the redaction event).\u003c/li\u003e\n\u003cli\u003eWorkaround for servers that return weird mime types for avatars.\u003c/li\u003e\n\u003cli\u003eThe markdown parser was changed to only allow two tildes (\u003ccode\u003e~~\u003c/code\u003e) for\nstrikethrough, as single-tilde strikethrough has a risk of false positives.\u003c/li\u003e\n\u003cli\u003eThe view source dialog has a \u0026quot;Copy /raw command\u0026quot; button, which can be used\nas a way to forward messages (especially media messages to avoid reuploading).\nSimply paste the command into another chat and send.\u003c/li\u003e\n\u003cli\u003eThe Element Call widget is now bundled with gomuks web instead of being loaded\nfrom an external URL.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/3417\"\u003eMSC3417\u003c/a\u003e video rooms with Element Call now have special UI that opens straight\ninto the Element Call widget. Other room types like spaces and policy list\nrooms may also receive special UI in the future.\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in July 2025",
      "date_published": "2025-07-16T14:08:21+03:00",
      "date_modified": "2025-07-16T16:56:31+03:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-06-mautrix-release",
      "url": "https://mau.fi/blog/2025-06-mautrix-release/",
      "title": "June 2025 releases // Meowlnir policy server and gomuks updates",
      "content_html": "\u003cp\u003eThis month's bridge releases are again fairly boring, but Meowlnir got a\nbuilt-in policy server, gomuks terminal development is starting again, and\ngomuks android now has prebuilt APKs.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.6.3\"\u003ev0.6.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.12.2\"\u003ev0.12.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.4.2\"\u003ev0.4.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-discord\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/discord/releases/v0.7.4\"\u003ev0.7.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.4\"\u003ev0.8.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.5.0\"\u003ev0.5.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.24.1\"\u003ev0.24.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.6.0\"\u003ev0.6.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.8.8\"\u003ev0.8.8\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eBridge updates were mostly bug fixes and some small features.\u003c/p\u003e\n\u003cp\u003eWhatsApp's \u003ccode\u003e@lid\u003c/code\u003e support mentioned in the April update has been improved,\nalthough it's still not quite perfect and the migration is still ongoing on\nWhatsApp's side. Further improvements are expected in the next few months.\u003c/p\u003e\n\u003cp\u003eAdmins of old WhatsApp bridge instances may need to regenerate or manually\nupdate the registration files, as old versions generated the namespace with\na \u003ccode\u003e[0-9]+\u003c/code\u003e regex, which will not cover the new \u003ccode\u003elid-\u0026lt;number\u0026gt;\u003c/code\u003e user IDs.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir got a bunch of changes, most notably an experimental built-in policy\nserver by \u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e. Currently the policy server is just an extra layer for\npreventing banned users sending messages, but when Meowlnir gets support for\nprotections like disallowing images, the policy server will allow blocking such\nmessages pre-emptively rather than redacting after-the-fact.\u003c/p\u003e\n\u003cp\u003eRoom ban policies are also now fully supported. When receiving a room ban or\ndiscovering a room which was previously banned, Meowlnir will prompt whether\nthe room should be deleted. To enable the prompts, set the \u003ccode\u003eroom_ban_room\u003c/code\u003e in\nthe config. Rooms can also be deleted manually with the \u003ccode\u003e!rooms delete\u003c/code\u003e and\n\u003ccode\u003e!rooms block\u003c/code\u003e commands.\u003c/p\u003e\n\u003ch2\u003egomuks\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e has started work on the gomuks terminal frontend. My previous plans\nfor gomuks terminal didn't end up working out, so the new plan is for nexy to\nwrite it over the summer. It's not usable yet, but you can follow the progress\nin the \u003ca href=\"https://github.com/gomuks/gomuks/tree/terminal\"\u003eterminal branch\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe main gomuks repo was moved to the \u003ca href=\"https://github.com/gomuks\"\u003egomuks org\u003c/a\u003e\non GitHub and mau.dev. If you were using the Docker image for gomuks web, you'll\nhave to update the image path.\u003c/p\u003e\n\u003cp\u003eThere are now CI-built APKs for gomuks android: \u003ca href=\"https://mau.dev/gomuks/android/-/pipelines\"\u003ehttps://mau.dev/gomuks/android/-/pipelines\u003c/a\u003e.\nAdditionally, the app now has fancy edge-to-edge rendering so that the room\nlist background color extends below the OS top bar.\u003c/p\u003e\n\u003cp\u003eOther changes this month include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4293\"\u003eMSC4293\u003c/a\u003e to immediately hide messages from users who are\nbanned with the redact_events flag.\u003c/li\u003e\n\u003cli\u003eAdded support for fallbacks in \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4144\"\u003eMSC4144\u003c/a\u003e per-message profiles (the support\nis that gomuks removes the fallback immediately, as gomuks already has proper\nrendering support).\u003c/li\u003e\n\u003cli\u003eFixed URL-encoded \u003ccode\u003ematrix:\u003c/code\u003e URIs not being handled correctly.\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in June 2025",
      "date_published": "2025-06-16T21:13:32+03:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-05-mautrix-release",
      "url": "https://mau.fi/blog/2025-05-mautrix-release/",
      "title": "May 2025 releases // archivemuks and other gomuks web updates",
      "content_html": "\u003cp\u003eThis month's releases mostly consist of some bridge bugfixes, a few new features\nin Meowlnir and many features in gomuks web.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.6.2\"\u003ev0.6.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.12.1\"\u003ev0.12.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.4.1\"\u003ev0.4.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.3\"\u003ev0.8.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.24.0\"\u003ev0.24.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.5.0\"\u003ev0.5.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.8.7\"\u003ev0.8.7\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eSignal has basic support for direct media access now. It's a bit safer to use\nthan WhatsApp, but the links will only work for 45 days and will be permanently\nbroken after that, so for most use cases, traditional re-uploaded media is\nlikely still better.\u003c/p\u003e\n\u003cp\u003eThe Twitter bridge got a few bug fixes as well as support for voice messages\nin both directions.\u003c/p\u003e\n\u003cp\u003eThe Signal and WhatsApp bridges turned out to have the exact same bug\nimplemented in different ways which broke backfilling exisitng portals after\nre-logining. Backfilling old messages is not possible as there's no standard\nmechanism in Matrix to do it, but backfilling missed messages when no new\nmessages have been sent should work again.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir received some new tools for public servers, such as automatically\nsuspending local accounts when a ban policy is received. \u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e also made\na couple pull requests, like customizable auto-redact ban reasons and a fix for\nthe fallback redaction mechanism not deleting state events.\u003c/p\u003e\n\u003cp\u003eIn addition to new features, the command handling system was redone on top of\nmautrix-go's new generic command processing framework. There shouldn't be any\nuser-facing changes, but if you want to write your own bots in Go, the new\ncommand framework will likely be useful.\u003c/p\u003e\n\u003ch2\u003egomuks web\u003c/h2\u003e\n\u003cp\u003eThere have been a bunch of changes to gomuks web, like sending URL previews,\nre-encoding uploads and mass-redacting messages. In addition to changes to web,\nthere's now a Go client package for using the gomuks websocket RPC API that the\nweb frontend uses.\u003c/p\u003e\n\u003cp\u003eUsing the new RPC package, I made a simple CLI tool called \u003ca href=\"https://github.com/tulir/gomuks/tree/main/cmd/archivemuks\"\u003earchivemuks\u003c/a\u003e which\nconnects to the backend, asks it to fetch all messages in a single room, and\nsaves them to a JSON file. The long-term plan is to have background room history\ncrawling built into the backend to enable filling the local database for search\nand export purposes, but the CLI tool works as a proof-of-concept. Because the\ntool doesn't wait for decryption, you'll have to delete the export and re-run\nthe tool after the history has been downloaded once, otherwise your export will\nhave a bunch of undecrypted events.\u003c/p\u003e\n\u003cp\u003eFull changelog:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eACL changes are now rendered in a \u003ccode\u003e\u0026lt;details\u0026gt;\u003c/code\u003e tag to avoid filling up the\ntimeline for the first ACL event that adds lots of blocked servers\n(contributed by \u003ca href=\"https://github.com/sumnerevans\"\u003e@sumnerevans\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eI also finally merged Sumner's PR for generating URL previews and bundling\nthem in sent messages with \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4095\"\u003eMSC4095\u003c/a\u003e. Bundled previews can be seen by other\ngomuks users and will also be bridged by most mautrix bridges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e contributed a button to remove all recent messages from a user.\n\u003cul\u003e\n\u003cli\u003eThe ban dialog now also offers removing messages as an option.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eA new media upload dialog was added, which allows previewing media and\nresizing/re-encoding it before uploading.\n\u003cul\u003e\n\u003cli\u003eThe dialog can be disabled in setting if you prefer the old immediate upload style.\u003c/li\u003e\n\u003cli\u003eRe-encoding videos requires ffmpeg to be installed and discoverable in \u003ccode\u003e$PATH\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDumb formats like HEIC have re-encoding enabled by default to ensure you don't\naccidentally send images that nobody can view.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eThumbnail generation for avatars and upload re-encoding will now apply JPEG\norientation correctly (it won't preserve the raw metadata, but will rotate the\npixels if necessary).\u003c/li\u003e\n\u003cli\u003eThe room view header buttons have been moved into a three dot menu on mobile,\nwhich means you can actually see the room name again.\u003c/li\u003e\n\u003cli\u003eYou can now click on reactions in the timeline to react with the same emoji.\nHowever, gomuks does not currently track whether you have reacted with a given\nemoji, so you can't un-react by clicking yet.\u003c/li\u003e\n\u003cli\u003eThere's a new button in settings for importing the entire server-side key\nbackup. It may be useful if you want to export keys to file. By default,\ngomuks will only import keys as necessary rather than loading the entire\nbackup.\u003c/li\u003e\n\u003cli\u003eSending mentions in captions has been fixed to actually include the mention\nin \u003ccode\u003em.mentions\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eApparently some weird people have dozens of emoji/sticker packs, so the\nemoji/sticker picker now has a scroll bar if there are more than 3 rows of\npacks.\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in May 2025",
      "date_published": "2025-05-16T08:31:16+03:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-04-mautrix-release",
      "url": "https://mau.fi/blog/2025-04-mautrix-release/",
      "title": "April 2025 releases // WhatsApp store migration and more Meowlnir commands",
      "content_html": "\u003cp\u003eThis was a quieter month, so there aren't that many exciting changes. Various\nbridges got bugfixes, Meowlnir got a bunch of new commands and gomuks can now\ncreate rooms.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.12.0\"\u003ev0.12.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.4.0\"\u003ev0.4.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-discord\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/discord/releases/v0.7.3\"\u003ev0.7.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.2\"\u003ev0.8.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2.1\"\u003ev0.2.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.4.6\"\u003ev0.4.6\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.23.3\"\u003ev0.23.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.4.0\"\u003ev0.4.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBridges\u003c/h2\u003e\n\u003cp\u003eThe WhatsApp bridge includes a somewhat dangerous change to the way Signal\nsessions are stored, which is necessary as WhatsApp is starting to move away\nfrom using phone numbers as internal user identifiers. Users on the old bridge\nversion may find certain groups stop working until they update.\u003c/p\u003e\n\u003cp\u003eDiscord had accumulated a bunch of bugfixes, so I decided to make another\nrelease of the old version. Unfortunately there hasn't been any progress on\nthe megabridge rewrite.\u003c/p\u003e\n\u003cp\u003eOn a non-mautrix note, Heisenbridge \u003ca href=\"https://github.com/hifi/heisenbridge/releases/tag/v1.15.3\"\u003ev1.15.3\u003c/a\u003e\nwas released recently with a crash fix. Updating is recommended ASAP.\u003c/p\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eMeowlnir got a bunch of new commands like \u003ccode\u003e!send-as-bot\u003c/code\u003e for talking as the\nmoderation bot, \u003ccode\u003e!redact-recent\u003c/code\u003e for redacting all recent messages,\n\u003ccode\u003e!powerlevel\u003c/code\u003e for modifying power levels, and more.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e also contributed support for automatic unbans when a ban policy is\nremoved.\u003c/p\u003e\n\u003cp\u003eMeowlnir, my Synapse fork, and synapse-http-antispam now have support for an\nexperimental join rule which can be used to block joins based on a policy list.\nThe rule is fully compatible with all servers as it (ab)uses the existing\n\u003ccode\u003erestricted\u003c/code\u003e join rule mechanism. The only downside is that it centralizes all\nroom joins to go through a single server.\u003c/p\u003e\n\u003ch2\u003egomuks web\u003c/h2\u003e\n\u003cp\u003eSince last month, gomuks web has received a bunch of bugfixes, as well as a few\nnew features. In particular, there's now a room creation dialog that allows\ncustomizing everything, support for room upgrades, and support for knocking on\nrooms. The last 2 features were contributed by \u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e.\u003c/p\u003e\n",
      "summary": "A summary of the mautrix releases in April 2025",
      "date_published": "2025-04-16T14:33:47+03:00",
      "date_modified": "2025-04-16T15:18:57+03:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-03-mautrix-release",
      "url": "https://mau.fi/blog/2025-03-mautrix-release/",
      "title": "March 2025 releases // Meowlnir antispam \u0026 gomuks widgets",
      "content_html": "\u003cp\u003eMeowlnir has a bunch of new features and gomuks received support for widgets \u0026amp;\nElement Call. The Meta bridge received an experimental fix for missing user\nprofiles in encrypted chats, but most other bridge changes were minor.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-gmessages\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/gmessages/releases/v0.6.1\"\u003ev0.6.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.11.4\"\u003ev0.11.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-bluesky\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/bluesky/releases/v0.1.1\"\u003ev0.1.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.3.0\"\u003ev0.3.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.1\"\u003ev0.8.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-slack\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/slack/releases/v0.2.0\"\u003ev0.2.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.4.5\"\u003ev0.4.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.23.2\"\u003ev0.23.2\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emeowlnir\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/maunium/meowlnir/releases/v0.3.0\"\u003ev0.3.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.8.6\"\u003ev0.8.6\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eMeowlnir\u003c/h2\u003e\n\u003cp\u003eLast week I wrote \u003ca href=\"https://github.com/maunium/synapse-http-antispam\"\u003esynapse-http-antispam\u003c/a\u003e, which is a Synapse module that\nexposes the \u003ca href=\"https://element-hq.github.io/synapse/latest/modules/spam_checker_callbacks.html\"\u003espam checker callbacks\u003c/a\u003e over HTTP, allowing other services like\nMeowlnir to handle them. With the help of the module, Meowlnir can now be used\nto block invites from banned users. It can even automatically reject pending\ninvites in case the invite happened before the ban policy if you provide a\ndouble puppeting access token in the Meowlnir config.\u003c/p\u003e\n\u003cp\u003eMeowlnir also received support for managing server ACLs, as well as \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4204\"\u003eMSC4204\u003c/a\u003e\nand \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4205\"\u003eMSC4205\u003c/a\u003e, which allow sending policy events without directly exposing the\nbanned entity or why they were banned.\u003c/p\u003e\n\u003ch2\u003egomuks web\u003c/h2\u003e\n\u003cp\u003egomuks web received support for widgets, which ended up being surprisingly easy\nthanks to \u003ca href=\"https://github.com/matrix-org/matrix-widget-api\"\u003ematrix-widget-api\u003c/a\u003e.\nElement Call is also supported, although the UX isn't quite optimal yet (e.g.\nthe call won't stay open when switching to another room).\u003c/p\u003e\n\u003cp\u003eOther new features include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eViewing edit history (by clicking the \u003ccode\u003e(edited)\u003c/code\u003e text)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/2815\"\u003eMSC2815\u003c/a\u003e support to view redacted event content\u003c/li\u003e\n\u003cli\u003eRoom state explorer and editor\u003c/li\u003e\n\u003cli\u003eContext menu in room list for muting rooms and marking as unread\u003c/li\u003e\n\u003cli\u003eStarting new DMs in the user info right panel\u003c/li\u003e\n\u003cli\u003eStarting new threads via the reply button\u003c/li\u003e\n\u003cli\u003eOptions to disable inline images and avatars in invites\n\u003cul\u003e\n\u003cli\u003eDisabling normal media previews was already an option previously\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in March 2025",
      "date_published": "2025-03-16T18:38:09+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-02-mautrix-release",
      "url": "https://mau.fi/blog/2025-02-mautrix-release/",
      "title": "February 2025 releases // Signal backfill",
      "content_html": "\u003cp\u003eThis month's highlight is the new history transfer feature on Signal, which is\nnow supported in the bridge.\u003c/p\u003e\n\u003cp\u003eSignal backfill is similar to WhatsApp in that it only happens on login.\nAdditionally, the app will ask you if you want to transfer history when pairing\n(if you don't get the prompt, it probably means you're using an old version of\nthe app that doesn't support history transfer).\u003c/p\u003e\n\u003cp\u003eOther bridges didn't have any major changes, but WhatsApp and Meta had a couple\nof bugfixes.\u003c/p\u003e\n\u003cp\u003eAlso, with the release of \u003ca href=\"https://go.dev/blog/go1.24\"\u003eGo 1.24\u003c/a\u003e, the minimum\nversion for compiling any new releases is now 1.23. As always, precompiled\nbinaries have no dependencies and don't require installing Go.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-whatsapp\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/whatsapp/releases/v0.11.3\"\u003ev0.11.3\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.8.0\"\u003ev0.8.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-meta\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/meta/releases/v0.4.4\"\u003ev0.4.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.23.1\"\u003ev0.23.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.8.5\"\u003ev0.8.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003egomuks web\u003c/h2\u003e\n\u003cp\u003eThere weren't as many changes as previous months, but some features were added\nand multiple bugs were fixed. \u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e contributed\nuser moderation actions in the right panel (kick, ban, invite, ignore) and\na share button to get links to event. Other than that, I added:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTouch panning/zooming for mobile devices in the image viewer\u003c/li\u003e\n\u003cli\u003eAvatar thumbnails to avoid wasting ram on rendering multi-megabyte avatars\u003c/li\u003e\n\u003cli\u003eManual key export/import (both all keys and keys for a specific room)\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in February 2025",
      "date_published": "2025-02-16T17:50:34+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    },
    {
      "id": "2025-01-mautrix-release",
      "url": "https://mau.fi/blog/2025-01-mautrix-release/",
      "title": "January 2025 releases // gomuks android",
      "content_html": "\u003cp\u003eMost bridges didn't have any significant changes over the holidays, so only\nSignal and Twitter have new releases. I accidentally became an Android\ndeveloper and made a GeckoView wrapper for gomuks web.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBridge/library\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-twitter\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/twitter/releases/v0.2.1\"\u003ev0.2.1\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-signal\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/signal/releases/v0.7.5\"\u003ev0.7.5\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emautrix-go\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go/releases/v0.23.0\"\u003ev0.23.0\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego-util\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mautrix/go-util/releases/v0.8.4\"\u003ev0.8.4\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eMegabridge progress\u003c/h2\u003e\n\u003cp\u003eMost bridges didn't have any notable changes over the holidays, so I decided\nto skip their releases. However, Signal had some breaking changes which\nnecessitated a release, and the Twitter bridge had multiple bugfixes worth\nreleasing too.\u003c/p\u003e\n\u003cp\u003eBeeper is currently focusing on shipping the existing megabridges as local\nbridges, so there probably won't be much progress on the remaining rewrites\nuntil March or April.\u003c/p\u003e\n\u003ch2\u003egomuks web\u003c/h2\u003e\n\u003cp\u003eAs with the last 2 months, gomuks web received a bunch of new features.\nContributors this time included \u003ca href=\"https://github.com/nexy7574\"\u003e@nexy7574\u003c/a\u003e,\n\u003ca href=\"https://github.com/sumnerevans\"\u003e@sumnerevans\u003c/a\u003e, and\n\u003ca href=\"https://github.com/everypizza1\"\u003e@everypizza1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003egomuks android\u003c/h3\u003e\n\u003cp\u003eLast month gomuks web got some small changes for mobile optimization, which\nended up making it quite a good mobile client. The obvious next step was to add\npush notifications and other integrations with native features.\u003c/p\u003e\n\u003cp\u003eI was initially considering using web push to keep it as a pure web app.\nHowever, Firefox and iOS browsers don't support all the fancier options for\nnotifications, and even the fancy options in Chrome aren't as good as a native\napp. Therefore, I decided to make a native wrapper app which uses GeckoView for\nthe web side, while handling push notifications from FCM natively in Kotlin.\u003c/p\u003e\n\u003cp\u003eThe app can be found in the \u003ca href=\"https://github.com/gomuks/android\"\u003egomuks/android\u003c/a\u003e\nrepo. It doesn't have any precompiled builds yet, but should work to some extent\nif you build it yourself. It can already receive notifications as well as\nauto-dismiss them when they're read from another device. The next features I'm\nplanning to add are showing media and avatars in notifications and then\nproviding a share target to send media using the OS share feature.\u003c/p\u003e\n\u003cp\u003eFor now, gomuks android requires the backend to run elsewhere, because that's\nhow I use it. In the future, there may be an option to run a backend bundled\nwith the app. The backend running 24/7 allows notifications to be fully reliable\nwith minimal battery usage. All information is sent in an encrypted FCM payload,\nwhich means the app doesn't need to fetch extra data to display notifications.\u003c/p\u003e\n\u003ch3\u003eUser styles\u003c/h3\u003e\n\u003cp\u003eCustom CSS is already supported, but this month gomuks web's custom CSS feature\ngained support for \u003ccode\u003e@import\u003c/code\u003e statements. To make such statements easier to use,\nI made a simple service where user styles can be shared: \u003ca href=\"https://css.gomuks.app/\"\u003ecss.gomuks.app\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cp\u003eA mostly complete list of new features in gomuks web:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSpaces\u003c/li\u003e\n\u003cli\u003eRendering read receipts\u003c/li\u003e\n\u003cli\u003eJoining rooms (via link and accepting invites) and leaving rooms\u003c/li\u003e\n\u003cli\u003eSticker picker to complete \u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/2545\"\u003eMSC2545\u003c/a\u003e support\n(custom emojis were already supported before)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4095\"\u003eMSC4095\u003c/a\u003e URL preview rendering\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/matrix-org/matrix-spec-proposals/pull/4144\"\u003eMSC4144\u003c/a\u003e per-message profile rendering\u003c/li\u003e\n\u003cli\u003eOption for Discord-like compact replies\u003c/li\u003e\n\u003cli\u003eBetter message context menu for small screens (mobile)\u003c/li\u003e\n\u003c/ul\u003e\n",
      "summary": "A summary of the mautrix releases in January 2025",
      "date_published": "2025-01-16T14:45:54+02:00",
      "author": {
        "name": "Tulir Asokan"
      },
      "authors": [
        {
          "name": "Tulir Asokan"
        }
      ]
    }
  ]
}
