Elliu 35e9c9e1ea Add unlink space feature
Squashed commit of the following:

commit bd9fd5cd3cf3f1301df18074c997ec537a81b4f5
Author: Elliu <elliu@hashi.re>
Date:   Sat Nov 15 15:32:18 2025 +0900

    Revert "fix matrix / db resource cleanup on space unlink"

    This reverts commit ccc10564f1e33ab277bc15f360b8c65f2d0ea867.

commit eec559293861305394770343d501389905fe1650
Author: Cadence Ember <cadence@disroot.org>
Date:   Sat Nov 8 13:01:59 2025 +1300

    Dependency inject snow for testing

commit b45eeb150e0702c201b8f710a3bdaa8e9f7d90be
Author: Elliu <elliu@hashi.re>
Date:   Wed Nov 5 00:20:20 2025 +0900

    manually revert 3597a3b: "Factorize some of the space link/unlink sanity checks"

commit 0f2e575df21bf940e4780c30d2701da989f62471
Author: Elliu <elliu@hashi.re>
Date:   Wed Nov 5 00:04:38 2025 +0900

    on unbriding room, also demote powel level of bridge user in matrix room

commit ccc10564f1e33ab277bc15f360b8c65f2d0ea867
Author: Elliu <elliu@hashi.re>
Date:   Wed Nov 5 00:04:13 2025 +0900

    fix matrix / db resource cleanup on space unlink

commit f4c1ea7c7f7d5a265b84ce464cd8e9e26d934a32
Author: Elliu <elliu@hashi.re>
Date:   Tue Nov 4 23:54:41 2025 +0900

    /unlink-space: properly leave guild and clean DB

commit 5f0ec3b2c861cc8b9edc51389d6176c7a22a1135
Author: Cadence Ember <cadence@disroot.org>
Date:   Sun Nov 2 22:31:14 2025 +1300

    Improve HTML to a state I'm happy with

commit 16309f26b3dd72927e05454cee8c63504b447b7f
Author: Elliu <elliu@hashi.re>
Date:   Sat Nov 1 22:24:51 2025 +0900

    add tests from /unlink-space endpoint

commit 5aff6f9048330a86eda3b2d1862f42df8d2bad84
Author: Elliu <elliu@hashi.re>
Date:   Sat Sep 6 20:05:18 2025 +0900

    Add /api/unlink-space implementation

commit dfc61594f68db4b52b3553ac7d3561ae9ce13b49
Author: Elliu <elliu@hashi.re>
Date:   Sat Sep 6 19:59:44 2025 +0900

    Extract /api/unlink code to its own function

commit 3597a3b5ce9dde3a9ddfe0853253bfda91a38335
Author: Elliu <elliu@hashi.re>
Date:   Sat Sep 6 19:28:42 2025 +0900

    Factorize some of the space link/unlink sanity checks

commit 05d788e26394106d9be24cef8b38f6c6f1e4c984
Author: Elliu <elliu@hashi.re>
Date:   Sat Sep 6 18:23:01 2025 +0900

    Add button to unlink a space

Co-authored-by: Cadence Ember <cadence@disroot.org>
2026-02-13 19:13:02 +13:00
2023-08-21 21:04:41 +12:00
2026-02-13 19:13:02 +13:00
2026-02-13 19:13:02 +13:00
2024-03-04 17:02:38 +13:00
2026-02-11 12:21:54 +13:00
2025-12-05 17:13:56 +13:00
2024-09-13 23:47:11 +12:00
2023-10-02 23:12:03 +13:00
2026-02-11 11:31:27 +13:00
2026-01-26 20:51:30 +13:00
2025-03-01 02:21:17 +13:00

Out Of Your Element

Modern Matrix-to-Discord appservice bridge, created by @cadence:cadence.moe

Releases Discuss on Matrix

Why a new bridge?

  • Modern: Supports new Discord features like replies, threads and stickers, and new Matrix features like edits, spaces and space membership.
  • Efficient: Special attention has been given to memory usage, database indexes, disk footprint, runtime algorithms, and queries to the homeserver. Efficiency details.
  • Reliable: Any errors on either side are notified on Matrix and can be retried. Messages sent during bridge downtime will still be bridged after it comes back up.
  • Tested: A test suite and code coverage make sure all the logic and special cases work.
  • Simple development: No build step (it's JavaScript, not TypeScript), minimal/lightweight dependencies, and abstraction only where necessary so that less background knowledge is required. No need to learn about Intents or library functions.
  • No locking algorithm: Other bridges use a locking algorithm which is a source of frequent bugs. This bridge avoids the need for one.
  • Latest API: Being on the latest Discord API version lets it access all features, without the risk of deprecated API versions being removed.

What works?

Most features you'd expect in both directions: messages, edits, deletions, formatting (including spoilers), reactions, custom emojis, custom emoji reactions, mentions, channel mentions, replies, threads, stickers (all formats: PNG, APNG, GIF, Lottie), attachments, spoiler attachments (compatible with most clients), embeds, URL previews, presence, discord.com hyperlinks, and more.

Metadata is also synced: people's names, avatars, usernames; channel names, icons, topics; spaces containing rooms; custom emoji lists. Syncing Matrix rooms, room icons, and topics is optional: you can keep them different from the Discord ones if you prefer.

I've also added some interesting features that I haven't seen in any other bridge:

  • Members using the PluralKit bot each get their own persistent accounts
  • Replies from PluralKit members are restyled into native Matrix replies
  • Simulated user accounts are named @the_persons_username rather than @112233445566778899
  • Matrix custom emojis from private rooms are still visible on Discord as a sprite sheet
  • To save space, larger files from Discord are linked instead of reuploaded to Matrix (links don't expire)

For more information about features, see the user guide.

Caveats

  • This bridge is not designed for puppetting.
  • Direct Messaging is not supported until I figure out a good way of doing it.

Get started!

Read the installation instructions →

Description
So anyway, I started blasting away features from ooye
Readme 3 MiB
Languages
JavaScript 97.5%
Pug 2.5%