From 26020e3e9574443e3e9d22bd6b56c2314209c4bc Mon Sep 17 00:00:00 2001 From: Bart van der Braak Date: Wed, 9 Jul 2025 13:04:41 +0200 Subject: [PATCH 1/6] Add Blender Chat to Trusted Instances --- src/open/clients/Element.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/open/clients/Element.js b/src/open/clients/Element.js index 6cdf81a..2d35c37 100644 --- a/src/open/clients/Element.js +++ b/src/open/clients/Element.js @@ -25,6 +25,7 @@ const trustedWebInstances = [ "chat.mozilla.org", "webchat.kde.org", "app.gitter.im", + "chat.blender.org", ]; /** From 442ed2f1d1b9173f0ab49cc821cb56210bca5f74 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 16 Jul 2025 12:09:19 -0600 Subject: [PATCH 2/6] Support v12 room IDs MSC: https://github.com/matrix-org/matrix-spec-proposals/pull/4291 Pre-disclosure: https://matrix.org/blog/2025/07/security-predisclosure/ --- src/Link.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Link.js b/src/Link.js index 33e496f..6c8e66e 100644 --- a/src/Link.js +++ b/src/Link.js @@ -18,7 +18,7 @@ import {createEnum} from "./utils/enum.js"; import {orderedUnique} from "./utils/unique.js"; const ROOMALIAS_PATTERN = /^#([^:]*):(.+)$/; -const ROOMID_PATTERN = /^!([^:]*):(.+)$/; +const ROOMID_PATTERN = /^!([^:]*)(:(.+))?$/; // As of room version 12, room IDs don't have domains const USERID_PATTERN = /^@([^:]+):(.+)$/; const EVENTID_PATTERN = /^$([^:]+):(.+)$/; const GROUPID_PATTERN = /^\+([^:]+):(.+)$/; @@ -92,7 +92,7 @@ export class Link { static validateIdentifier(identifier) { return !!( USERID_PATTERN.exec(identifier) || - ROOMALIAS_PATTERN.exec(identifier) || + ROOMALIAS_PATTERN.exec(identifier) || ROOMID_PATTERN.exec(identifier) || GROUPID_PATTERN.exec(identifier) ); @@ -166,12 +166,19 @@ export class Link { } constructor(clientId, viaServers, identifierKind, localPart, server, webInstances, eventId) { - const servers = [server]; + const servers = []; + if (server !== undefined) { + servers.push(server); // v12 rooms don't have domains, and therefore no server + } servers.push(...viaServers); this.webInstances = webInstances; this.servers = orderedUnique(servers); this.identifierKind = identifierKind; - this.identifier = `${asPrefix(identifierKind)}${localPart}:${server}`; + if (identifierKind === IdentifierKind.RoomId && !server) { + this.identifier = `${asPrefix(identifierKind)}${localPart}`; + } else { + this.identifier = `${asPrefix(identifierKind)}${localPart}:${server}`; + } this.eventId = eventId; this.clientId = clientId; } From f8c30eabde16c8d989adafbf159be011ba42e18d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 16 Jul 2025 12:30:19 -0600 Subject: [PATCH 3/6] regex is hard --- src/Link.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Link.js b/src/Link.js index 6c8e66e..9eb96ce 100644 --- a/src/Link.js +++ b/src/Link.js @@ -152,7 +152,7 @@ export class Link { } matches = ROOMID_PATTERN.exec(identifier); if (matches) { - const server = matches[2]; + const server = matches[3]; // group 2 is an optional over `:domain`, group 3 is just `domain` const localPart = matches[1]; return new Link(clientId, viaServers, IdentifierKind.RoomId, localPart, server, webInstances, eventId); } From 8e82c4687e5b2fe08f03c539560539e1a2e79076 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sun, 12 Oct 2025 01:04:30 +0200 Subject: [PATCH 4/6] docs: Clarify matrix.to URL scheme for Spaces on README (fixes #393) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3f67274..810c088 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,10 @@ The matrix.to URL scheme is The #/ component is mandatory and exists to avoid leaking the target URL to the server hosting matrix.to. +There is no _Entity type_ for **Spaces**, as they are technically really just regular +rooms. (Some servers call their "entrypoint" space literally `space`, in which case +the URL would be `https://matrix.to/#/#space:example.org`.) + Note that linking to rooms by ID should only be used for rooms to which the target user has been invited: these links cannot be assumed to work for all visitors. From 3474e341a5f86c82b0f795a4ad5035ab2e54175d Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Mon, 13 Oct 2025 18:14:53 +0200 Subject: [PATCH 5/6] docs: Simplified clarification re. Spaces on README Based on https://github.com/matrix-org/matrix.to/pull/394#discussion_r2425555065 feedback. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 810c088..40b8811 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,7 @@ The matrix.to URL scheme is The #/ component is mandatory and exists to avoid leaking the target URL to the server hosting matrix.to. -There is no _Entity type_ for **Spaces**, as they are technically really just regular -rooms. (Some servers call their "entrypoint" space literally `space`, in which case -the URL would be `https://matrix.to/#/#space:example.org`.) +There is no _Entity type_ for **Spaces**, as they are technically really just rooms. Note that linking to rooms by ID should only be used for rooms to which the target user has been invited: these links cannot be assumed to work for all From 88a7eb03a77668f4ca81ef6a928632268f9b6dd3 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Fri, 2 Jan 2026 14:57:19 +0100 Subject: [PATCH 6/6] Update README.md Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40b8811..1aac1b5 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ The matrix.to URL scheme is The #/ component is mandatory and exists to avoid leaking the target URL to the server hosting matrix.to. -There is no _Entity type_ for **Spaces**, as they are technically really just rooms. +There is no _Entity type_ for **Spaces**, as they are technically just rooms. Note that linking to rooms by ID should only be used for rooms to which the target user has been invited: these links cannot be assumed to work for all