Desktop without WebRTC: "Open in browser" instead of a dead end (cinny-desktop #21) #245

Merged
jared merged 1 commits from calls-open-in-browser into lotus 2026-09-27 17:10:51 -04:00
Owner

The Linux desktop app can't make calls (WebKitGTK ships without WebRTC; tracked, blocked upstream, in cinny-desktop #21). Until now it hid the call button, showed "Your browser does not support WebRTC" with Join disabled, and couldn't answer incoming calls.

What changes (desktop app without WebRTC only)

  • Call rooms: "Calls aren't available in the desktop app on Linux yet: its web engine has no WebRTC. You can join from the web app in your browser." plus an Open in browser button.
  • Incoming call: the same, with Answer in browser.
  • Room header: the call button stays and opens the room in the browser.

The link is the room in the web app, from config webAppUrl (https only; set by cinny-desktop's config). The user presses Join there.

Two deliberate choices:

  • No auto-join link, so a crafted URL can't join a call and open someone's mic.
  • Scope: without webAppUrl you get the explanation with no button, and web browsers without WebRTC keep the old message.

Tests

  • Unit: callInBrowser.test.ts, covering URL validation (https only; rejects javascript:, data:, http, relative) and the link shape (no join parameter). 1,271 unit tests pass.
  • End-to-end: Chromium made to look like the desktop app (Tauri bridge present, RTCPeerConnection removed), local Synapse.
Case Result
Call room Message and button shown, Join disabled, button opens https://chat.lotusguild.org/home/<room>
DM header "Start call in browser" button (normal call button hidden) opens the room link
Incoming call (Bob rings from a normal browser) "Answer in browser" shown, opens the room link
Desktop without webAppUrl Message, no button
Plain browser without WebRTC The old "Your browser does not support WebRTC" message, no button
  • Suites: Playwright e2e 20/20, build clean.

call room
incoming call

Ship order

Merge with cinny-desktop's linux-nvidia-wayland PR, which adds webAppUrl to the desktop config. Either order is safe: without the config key the button just doesn't show.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA

The Linux desktop app can't make calls (WebKitGTK ships without WebRTC; tracked, blocked upstream, in cinny-desktop **#21**). Until now it hid the call button, showed "Your browser does not support WebRTC" with Join disabled, and couldn't answer incoming calls. ## What changes (desktop app without WebRTC only) - **Call rooms:** "Calls aren't available in the desktop app on Linux yet: its web engine has no WebRTC. You can join from the web app in your browser." plus an **Open in browser** button. - **Incoming call:** the same, with **Answer in browser**. - **Room header:** the call button stays and opens the room in the browser. The link is the room in the web app, from config `webAppUrl` (https only; set by cinny-desktop's config). The user presses Join there. Two deliberate choices: - **No auto-join link**, so a crafted URL can't join a call and open someone's mic. - **Scope:** without `webAppUrl` you get the explanation with no button, and web browsers without WebRTC keep the old message. ## Tests - Unit: `callInBrowser.test.ts`, covering URL validation (https only; rejects `javascript:`, `data:`, http, relative) and the link shape (no join parameter). 1,271 unit tests pass. - End-to-end: Chromium made to look like the desktop app (Tauri bridge present, `RTCPeerConnection` removed), local Synapse. | Case | Result | |---|---| | Call room | Message and button shown, Join disabled, button opens `https://chat.lotusguild.org/home/<room>` | | DM header | "Start call in browser" button (normal call button hidden) opens the room link | | Incoming call (Bob rings from a normal browser) | "Answer in browser" shown, opens the room link | | Desktop without `webAppUrl` | Message, no button | | Plain browser without WebRTC | The old "Your browser does not support WebRTC" message, no button | - Suites: Playwright e2e 20/20, build clean. ![call room](https://code.lotusguild.org/attachments/ec2d2000-82a1-4c03-bdce-17603bb30979) ![incoming call](https://code.lotusguild.org/attachments/8a29a28d-8929-4225-a807-ad9f37766d1c) ## Ship order Merge with cinny-desktop's `linux-nvidia-wayland` PR, which adds `webAppUrl` to the desktop config. Either order is safe: without the config key the button just doesn't show. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
jared added 1 commit 2026-09-27 16:57:40 -04:00
feat(call): desktop without WebRTC offers "Open in browser" instead of a dead end
CI / Build & Quality Checks (pull_request) Successful in 2m12s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 17s
CI / Playwright smoke (e2e) (pull_request) Successful in 10m22s
fff583fca5
The Linux desktop app runs on WebKitGTK, which ships without WebRTC (2.52
has no RTCPeerConnection; 2.54 disables it outright pending a libwebrtc
backend around 2.56), so calls can't work there. Until now the call button
just disappeared, the call room said "Your browser does not support WebRTC"
with Join disabled, and an incoming call couldn't be answered.

In the desktop app (isTauri) without WebRTC:
- call rooms: "Calls aren't available in the desktop app on Linux yet: its
  web engine has no WebRTC" + an "Open in browser" button;
- incoming-call overlay: the same, with "Answer in browser";
- room header: the call button stays, and opens the room in the browser.

The link is the room in the web app (config.json `webAppUrl`, https only,
new key); the user presses Join there. Deliberately not an auto-join link:
a crafted URL must not be able to join a call and open someone's mic. It
opens through the desktop's new-window handler (web/mail schemes only → the
system browser). Without `webAppUrl` the explanation shows with no button;
browsers without WebRTC keep the old message.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
jared merged commit ffe1d5a81e into lotus 2026-09-27 17:10:51 -04:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#245