Skip to content

Update MatrixRTC implementation - #1029

Open
maheichyk wants to merge 7 commits into
mainfrom
nic/feat/ZO-259-update-matrixrtc
Open

Update MatrixRTC implementation#1029
maheichyk wants to merge 7 commits into
mainfrom
nic/feat/ZO-259-update-matrixrtc

Conversation

@maheichyk

@maheichyk maheichyk commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Update MatrixRTC implementation to follow the latest MSC4143, MSC4354, MSC4195 changes, summary:

Use org.matrix.msc4143.rtc.slot state event with an application.type of net.nordeck.whiteboard.

Use org.matrix.msc4143.rtc.member sticky event to store membership. It replaces the org.matrix.msc3401.call.member state event.

Adapt the existing usage of delayed events to update membership.

Update to use LiveKit backend according to MSC4195. Including support for multi-SFU mode.

Session identity is changed to pseudonymous identity described in MSC4195. See matrixRtcParticipantIdentity.ts.

Depends on Matrix Widget Toolkit PRs:

✔️ Checklist

  • A changeset describing the change and affected packages (more info).
  • Added or updated documentation.
  • Tests for new functionality and regression tests for bug fixes.
  • Screenshots or videos attached (for UI changes).
  • All your commits have a Signed-off-by line in the message (more info).

@maheichyk
maheichyk requested a review from a team as a code owner August 31, 2026 09:31
@changeset-bot

changeset-bot Bot commented Aug 31, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: e6a94bd

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@nordeck/matrix-neoboard-widget Minor
@nordeck/matrix-neoboard-react-sdk Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
@maheichyk
maheichyk force-pushed the nic/feat/ZO-259-update-matrixrtc branch from 4b8a534 to b58b914 Compare August 31, 2026 09:37
Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
@maheichyk
maheichyk force-pushed the nic/feat/ZO-259-update-matrixrtc branch from d2b791a to a262c9c Compare August 31, 2026 12:34

@mgcm mgcm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not a full review, just my first pass at it. Let's discuss it tomorrow.

Comment on lines +51 to +52
| `status` | `'open'` | A slot's status. |
| `application.type` | `net.nordeck.whiteboard` | Nordeck whiteboard application identifier. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are mixing type and values here. For example, status can be open or closed and the application type is a string following the CNIG.

Suggested change
| `status` | `'open'` | A slot's status. |
| `application.type` | `net.nordeck.whiteboard` | Nordeck whiteboard application identifier. |
| `status` | `string` | A slot's status, either 'open' or 'closed'. |
| `application.type` | `string` | Nordeck whiteboard application identifier: `net.nordeck.whiteboard` |

| --------------------------- | -------------------------- | ------------------------------------------------------------------------------- |
| `slot_id` | `string` | A MatrixRTC slot ID, example: `net.nordeck.whiteboard#whiteboard-id` |
| `member.id` | `string` | A unique user identifier for each join, even for the same user and device. |
| `member.membership` | `'join'` | Identifies membership event as `join`. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also mixing types and values here and I understand why you are doing it - still, I think this is not correct as is.


## Room Messages
We replace the `net.nordeck.whiteboard.sessions` state event with the
MatrixRTC `m.rtc.member` membership **sticky** event (or the unstable `org.matrix.msc4143.rtc.member`).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A link to the sticky events MSC would be helpful here, no?

Comment thread docs/model/matrix-rtc-events.md Outdated
Comment thread docs/model/matrix-rtc-events.md Outdated
Comment thread packages/react-sdk/src/locales/de/neoboard.json Outdated
}

// check for specific livekit backend config underride
const envFoci = getEnvironment('REACT_APP_RTC_LIVEKIT_SERVICE_URL');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we are not using this anymore, then we need to remove the option from configuration.md

Comment thread docs/model/matrix-rtc-events.md Outdated
and no longer need to use To Device Messages for establishing peer connections,
as all signaling and connection logic is now handled by the LiveKit Client SDK
and LiveKit Server backend.
We replace the `net.nordeck.whiteboard` state event with the MatrixRTC `m.rtc.slot` state event

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? Aren't these two separate concepts?

One is indicating this room has whiteboard data in it which can be used by the standalone app or the widget, and the other is enabling realtime collaboration (which can be disabled, if the slot is closed).

I haven't checked yet the full PR but this has data migration implications.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A very good question.

I somehow thought that would be useful and migration shouldn't be an issue and I addressed the PR to handle that. However I got other issues in standalone because of this decision.

I agree, that should be separated, that makes sense and makes everything much easier and consistent 👍

I have update PR to revert whiteboard to slot changes and add slot sending separately.

Comment thread packages/react-sdk/src/store/api/whiteboardApi.ts
Comment on lines +85 to +86
.items(Joi.string().valid('livekit'))
.length(1)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems a bit harsh to force this here? I know the existence of other transports is academic but if we are this strict here, why not also on the transport schema?

@maheichyk
maheichyk force-pushed the nic/feat/ZO-259-update-matrixrtc branch 2 times, most recently from 8b7f4e8 to a262c9c Compare September 2, 2026 09:01
maheichyk and others added 5 commits September 2, 2026 11:07
Co-authored-by: Milton Moura <miltonmoura@gmail.com>
Signed-off-by: maheichyk <mikhail.aheichyk@gmail.com>
…s created in MatrixRTC mode.

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
Co-authored-by: Milton Moura <miltonmoura@gmail.com>
Signed-off-by: maheichyk <mikhail.aheichyk@gmail.com>
Co-authored-by: Milton Moura <miltonmoura@gmail.com>
Signed-off-by: maheichyk <mikhail.aheichyk@gmail.com>
Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants