Skip to content

feat: Add video call support#2599

Merged
kfiven merged 306 commits intocinnyapp:voice-callsfrom
hazre:feat/element-call
Feb 22, 2026
Merged

feat: Add video call support#2599
kfiven merged 306 commits intocinnyapp:voice-callsfrom
hazre:feat/element-call

Conversation

@hazre
Copy link
Copy Markdown
Contributor

@hazre hazre commented Feb 11, 2026

Description

Fixes #528

Revives and continues #2335 (Element Call support), as the original PR has stalled.

Merged dev into this branch, resolved conflicts, and incorporated patches from @YoJames2019 to bring everything up to date and reviewable.

Marked as draft for now since some UX/polish improvements are still needed.

Credits to @GigiaJ for the original implementation and @YoJames2019 for follow up patches.

Here's laundry list of things I feel like should be addressed before merging: (Feedback welcome!)

Need to fix (help would be appreciated):

  • User doesn't show up when joining the call sometimes.
  • Make E2EE Voice rooms work.
  • Voice Room Permissions
  • Some kind of UI for homeserver's that don't support call features.
  • Connecting/disconnecting to voice rooms takes seconds.
  • Better new room creation experience, Have voice rooms as different type.
  • Connecting status.
  • Disable Webcam by default.
  • Add our own Call controls instead of default Element call controls.
  • Deafen functionality. (If possible, haven't investigated)

Nice to haves:

  • Show a badge on space if in a voice room.
  • User voice status in the room sidebar. (Blocked by official Element-call)
  • User Muted Status in room sidebar. (Blocked by official Element-call)
  • widget Folds/Cinny theming. (Blocked by official Element-call)
  • Request Camera permissions only on enabling camera.
  • Show duration of the call in the call status navigation.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings

Preview: https://2599--pr-cinny.netlify.app/

Any feedback/Questions, please post in the dedicated thread: #2599 (comment)

GigiaJ added 30 commits April 21, 2025 01:39
@RoflMyPancakes
Copy link
Copy Markdown

RoflMyPancakes commented Feb 19, 2026

I've been following this and able to use this just fine when built for web over the last few days, but when I build cinny-desktop with cinny on this branch, joining voice rooms hangs indefinitely from cinny-desktop (shows "Joining").

I just thought saying this sooner might get more eyes on the cinny-desktop angle.

Works fine with chrome, firefox.
But with cinny-desktop with Tauri it's behaving differently.

/public/element-call/index.html requests end up returning cinny's index instead.

Query params break the file lookup in cinny-desktop. I was able to test:

  • /public/element-call/index.html => Resolves to Element Call
  • /public/element-call/index.html?embed=true => Resolves to Cinny (not found, fallback to index)

I'm assuming (based on some research of tauri's localhost plugin) that Tauri's localhost resolver doesn't strip query parameters before looking up the file. It tries to find index.html?embed=true literally (including query params), fails, and falls back to the root index.html.

I've been able to fix it a couple different ways in my testing but that's the core problem I hit. I don't know what the most elegant solution is if I'm right about this being a problem.

I was able to fix it in just cinny by changing to url.hash from url.search, which caused other problems but I could at least join voice rooms. But changing cinny-desktop to not use the tauri localhost plugin could be another path.

Maybe someone more experienced with cinny-desktop should run this branch through a test.

Edit: The solution for me was to patch Tauri's localhost plugin (though it seems 2.x of tauri includes a localhost plugin with this fix). This made the fix entirely on the cinny-desktop side and I can use this branch unchanged.

// Original plugin:
asset_resolver.get(req.url().into())

// Patched plugin:
let path = req.url().split('?').next().unwrap_or(req.url()).into();
asset_resolver.get(path)

With that change, cinny-desktop works with this branch. Without it, joining voice rooms fails (the element-call iframe fails)

hazre and others added 11 commits February 19, 2026 20:15
- rename CreateRoomVoice to CreateRoomType and modal voice state to type
- rename CreateRoomKind to CreateRoomAccess and KindSelector to AccessSelector
- propagate access/defaultAccess through create room and create space forms
- set voice room power levels via createRoom power_level_content_override
- bump folds from 2.5.0 to 2.6.0
- replace separate room/space join-rule icon hooks with useJoinRuleIcons(roomType)
- route join-rule icons through getRoomIconSrc for consistent room type handling
- simplify getRoomIconSrc by removing the locked override path
- use VolumeHighGlobe for public call rooms and VolumeHighLock for private call rooms
- show filled User icon when the drawer is open
@hazre hazre requested review from ajbura and kfiven February 19, 2026 23:20
@hazre hazre marked this pull request as ready for review February 19, 2026 23:20
@jeanbono
Copy link
Copy Markdown

The commit 30303fe break the calls for me.
I'm getting disconnected almost immediatly after joining.
Everything is working fine with the previous commit (881da5c)

@hazre
Copy link
Copy Markdown
Contributor Author

hazre commented Feb 20, 2026

The commit 30303fe break the calls for me. I'm getting disconnected almost immediatly after joining. Everything is working fine with the previous commit (881da5c)

Yeah it looks like the element call version we are using, uses 1.13.0 version of widget api package. For now I will downgrade it.

@hazre
Copy link
Copy Markdown
Contributor Author

hazre commented Feb 20, 2026

@jeanbono I've pushed some changes to address that, see if it works now

@jeanbono
Copy link
Copy Markdown

@jeanbono I've pushed some changes to address that, see if it works now

Looks good now 👍

@vrisalab
Copy link
Copy Markdown

I've been testing this, and I've found a bug: When you join a room, and then close the tab, your user never leaves the call, not even after a server restart. If the user was sharing their screen, the screen remains perpetually shared. I'm not sure if the behavior is the same on Element.

@GigiaJ
Copy link
Copy Markdown
Contributor

GigiaJ commented Feb 20, 2026

shared. I'm not sure if the behavior is the same on Element.

You can do this on Element too. Quirk of Element Call I imagine. User has to timeout from the LiveKit SFU. That is why a server restart doesn't DC them even unless you restart that too I believe.

@Sollace
Copy link
Copy Markdown

Sollace commented Feb 20, 2026

I've been testing this, and I've found a bug: When you join a room, and then close the tab, your user never leaves the call, not even after a server restart. If the user was sharing their screen, the screen remains perpetually shared. I'm not sure if the behavior is the same on Element.

Ah yeah, I've seen this as well in fact when my browser has crashed whilst in a call.

@GigiaJ Is it possible to add something in to trigger the user leaving the call properly when the tab is closed?

i.e. Using the beforeunload window event or similar?

@chxreyes
Copy link
Copy Markdown

Is the preview up to date with the current PR diff? Calls do not seem to work for me using the preview.

@xetem
Copy link
Copy Markdown

xetem commented Feb 21, 2026

Is the preview up to date with the current PR diff? Calls do not seem to work for me using the preview.

Yeah I'm getting stuck trying to join a call in a call room without it ever resolving, can join the room successfully on Element.

@kfiven kfiven merged commit 65c3c7e into cinnyapp:voice-calls Feb 22, 2026
1 check passed
@github-actions github-actions bot locked and limited conversation to collaborators Feb 22, 2026
@kfiven
Copy link
Copy Markdown
Collaborator

kfiven commented Feb 22, 2026

Merging this in voice-calls PR for further testing. #2680

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Video and Voice Calling