Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Initial support for Matrix - #2

Merged
cfpwastaken merged 86 commits into
mainfrom
matrix
May 22, 2026
Merged

Initial support for Matrix#2
cfpwastaken merged 86 commits into
mainfrom
matrix

Conversation

@cfpwastaken

@cfpwastakencfpwastaken commented May 1, 2026

Copy link
Copy Markdown
Collaborator
  • Login
  • Register
  • MXC (Content Repository)
  • Rooms
    • Showing rooms
    • Viewing rooms
    • Viewing messages
    • Sending messages
    • Creating rooms
    • Inviting to rooms
    • Joining rooms
    • Leaving rooms
    • Viewing members
image

@cfpwastaken
cfpwastaken marked this pull request as draft May 1, 2026 20:17
@cfpwastakencfpwastaken mentioned this pull request May 2, 2026
48 tasks
@cfpwastaken
cfpwastaken marked this pull request as ready for review May 2, 2026 10:38
@cfpwastakencfpwastaken changed the title MatrixInitial support for MatrixMay 2, 2026
@cfpwastaken
cfpwastaken requested review from Copilot and j0codeMay 2, 2026 13:16

CopilotAI 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.

Pull request overview

This PR adds initial Matrix (client-server) support to the Threadlet client, shifting core chat concepts from the existing forum/post/message model toward Matrix rooms and events, along with a new login/register flow and UI updates.

Changes:

  • Introduces a Matrix client wrapper and boot flow (login/register, start sync, room list + room views).
  • Adds event rendering for common Matrix message/event types (text, image, file, audio, video, notice, emote, room name) plus an unknown-event fallback.
  • Updates UI layout and components (member list, context menus, room creation/invites) and replaces message list plumbing with an event list.

Reviewed changes

Copilot reviewed 34 out of 37 changed files in this pull request and generated 9 comments.

Show a summary per file
FileDescription
client/vite.config.jsAdjusts Vite HMR websocket protocol for development.
client/style.cssAdds layout/styles for members pane, events list, dialogs, and login UI.
client/src/matrix.tsCreates Matrix client instance and starts it based on stored credentials.
client/src/main.tsSwitches app bootstrap to Matrix-based App/Login and registers Matrix views.
client/src/comps/App.tsAdds Matrix room list syncing + member list pane and view rendering adjustments.
client/src/comps/Avatar.tsNew avatar component backed by Matrix profile + MXC images/fallback initials.
client/src/comps/ChannelList.tsConverts channel list to render Matrix rooms and handle membership/invites.
client/src/comps/ChatInput.tsSends Matrix m.text messages from a room view (post flow stubbed).
client/src/comps/ContextMenu.tsAdds right-click context menu primitive used by room tabs.
client/src/comps/EventList.tsReplaces message list with Matrix event list + event renderer.
client/src/comps/FormCheckbox.tsAdds checkbox form input (used in room creation).
client/src/comps/ForumTab.tsConverts tab to a Matrix room tab with context menu (leave room).
client/src/comps/Login.tsAdds Matrix homeserver selection + password login and registration dialogs.
client/src/comps/MemberList.tsAdds room member list rendering + invite prompt action.
client/src/comps/MXCImage.tsAdds component to resolve/render MXC media URLs.
client/src/comps/PostView.tsSwaps MessageList usage to EventList (plumbing change).
client/src/comps/RoomCreationForm.tsAdds Matrix room creation UI including federation toggle.
client/src/comps/RoomInviteView.tsAdds invite accept/decline UI for rooms where membership isn’t join.
client/src/comps/RoomView.tsAdds room timeline rendering + live updates via Matrix timeline events.
client/src/comps/Message.tsRefactors message component toward Matrix event backing (still present).
client/src/comps/events/Event.tsAdds event-type and msgtype dispatch to specific render components.
client/src/comps/events/EventBase.tsIntroduces base event component type holding a MatrixEvent.
client/src/comps/events/ChatMessageBase.tsBase renderer for chat-style events (avatar/name/timestamp/content).
client/src/comps/events/EventMessageBase.tsBase renderer for non-chat event rows (avatar + inline content).
client/src/comps/events/RoomTextMessage.tsRenders m.text messages.
client/src/comps/events/RoomImageMessage.tsRenders m.image messages via MXC image component.
client/src/comps/events/RoomFileMessage.tsRenders m.file messages as download links.
client/src/comps/events/RoomAudioMessage.tsRenders m.audio messages with an <audio> element.
client/src/comps/events/RoomVideoMessage.tsRenders m.video messages with a <video> element.
client/src/comps/events/RoomNoticeMessage.tsRenders m.notice messages with subdued styling.
client/src/comps/events/RoomEmoteMessage.tsRenders m.emote-style messages.
client/src/comps/events/RoomNameEvent.tsRenders m.room.name state events as a system message.
client/src/comps/events/UnknownEvent.tsRenders unhandled events as JSON for visibility/debugging.
client/package.jsonReplaces Discord SDK deps with matrix-js-sdk.
client/package-lock.jsonUpdates lockfile for dependency changes, including Matrix SDK.
client/bun.lockAdds Bun lockfile for the same dependency set.
Files not reviewed (1)
  • client/package-lock.json: Language not supported

Comment threadclient/src/comps/Avatar.ts
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/RoomView.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/ChatInput.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/RoomNoticeMessage.ts Outdated
Comment threadclient/src/comps/events/RoomAudioMessage.ts Outdated

CopilotAI 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.

Pull request overview

Copilot reviewed 35 out of 38 changed files in this pull request and generated 14 comments.

Files not reviewed (1)
  • client/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

client/src/comps/EventList.ts:6

  • This file still imports Threadlet/Post message types, api, and Message, but the implementation now only operates on MatrixEvent and renderEvent(). Remove unused imports to avoid confusion and keep the module focused on Matrix events.

Comment threadclient/src/comps/FormCheckbox.ts Outdated
Comment threadclient/src/comps/events/HTMLFormat.ts
Comment threadclient/src/comps/events/RoomNoticeMessage.ts
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomTextMessage.ts
Comment threadclient/src/comps/events/RoomVideoMessage.ts Outdated
Comment threadclient/src/comps/events/RoomEmoteMessage.ts Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Partial review for now.

Please fix the following issues first:

  • login impossible if matrix server is on a subdomain (check .well-known entries!)
  • member list is squished on the right and overflows on the bottom
  • latest message and member list flash like crazy
  • avatars don't load
  • fallback "avatars" are too large

Comment threadclient/src/comps/App.ts
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/ChannelList.ts Outdated
Comment threadclient/src/comps/RoomList.ts Outdated
Comment threadclient/src/comps/Avatar.ts Fixed
@cfpwastaken

Copy link
Copy Markdown
CollaboratorAuthor

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Comment threadclient/src/main.ts Outdated
@j0code

Copy link
Copy Markdown
Owner

login impossible if matrix server is on a subdomain (check .well-known entries!)

valid point, but do know that you can enter the subdomain (the location where the matrix server is actually hosted) instead and that will work.

Sure. But we shouldn't force users (who might possibly be unaware of this) to do that.

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I'll review the event components later.

Comment threadclient/src/comps/Avatar.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/Login.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/RoomCreationForm.ts
Comment threadclient/src/comps/RoomCreationForm.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
Comment threadclient/src/comps/RoomInviteView.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 4, 2026 08:44

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Once again, only events remaining. lol

Comment threadclient/src/comps/App.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/comps/ForumTab.ts Outdated
Comment threadclient/src/comps/ContextMenu.ts Outdated
Comment threadclient/src/main.ts Outdated
Comment threadclient/src/matrix.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
Comment threadclient/src/comps/events/RoomNameEvent.ts Outdated
j0code
j0code previously requested changes May 20, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Consider everything else reviewed (including event components).

Comment threadclient/src/comps/ConfirmForm.ts
Comment threadclient/src/comps/ConfirmForm.ts Outdated
Comment threadclient/src/comps/RoomInviteForm.ts Outdated
Comment threadclient/src/types.ts Outdated
Comment threadclient/src/comps/RoomInvitationForm.ts Outdated
Comment threadclient/style.css Outdated
Comment threadclient/src/comps/events/ChatMessageBase.ts Outdated
Comment threadclient/src/comps/MemberList.ts Outdated
@cfpwastaken
cfpwastaken requested a review from j0codeMay 22, 2026 15:01
@j0code
j0code dismissed their stale reviewMay 22, 2026 15:03

Change requests have been addressed.

@j0code
j0code removed their request for review May 22, 2026 15:03
@cfpwastaken
cfpwastaken enabled auto-merge (rebase) May 22, 2026 15:06
@j0code
j0code self-requested a review May 22, 2026 15:10
j0code
j0code previously approved these changes May 22, 2026

@j0codej0code left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Skinner thumbs up GIF

@cfpwastaken
cfpwastaken merged commit 92a0370 into mainMay 22, 2026
6 checks passed
@cfpwastaken
cfpwastaken deleted the matrix branch May 22, 2026 15:18
Sign up for freeto 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.

4 participants

@cfpwastaken@j0code@github-advanced-security