From 82a62218800b29af46119e0fd2223f82211cfb04 Mon Sep 17 00:00:00 2001 From: Sovran Systems <99053422+naturallaw777@users.noreply.github.com> Date: Sat, 13 Jun 2026 11:50:43 -0500 Subject: [PATCH] Clarify Element Calling 30000-40000 range needs separate TCP and UDP forwards The onboarding Step 4 port table listed the 30000-40000 TURN relay range as a single "TCP/UDP" row, which is ambiguous on most routers where TCP and UDP forwards are separate entries. Split it into two explicit rows (TCP and UDP), add a clarifying note, and update the totals so users create both forwarding rules. --- app/sovran_systemsos_web/static/onboarding.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/sovran_systemsos_web/static/onboarding.js b/app/sovran_systemsos_web/static/onboarding.js index 30dd1b8..fbabcf0 100644 --- a/app/sovran_systemsos_web/static/onboarding.js +++ b/app/sovran_systemsos_web/static/onboarding.js @@ -355,9 +355,9 @@ async function loadStep3() { + 'Before you continue:' + '
    ' + '
  1. Create an account at https://njal.la
  2. ' - + '
  3. Purchase a new domain on Njal.la, or create a subdomain from a domain you already own. Tip: Subdomains are free to create — you only need to purchase one domain, and you can add as many subdomains as you need at no extra cost.
  4. ' + + '
  5. Purchase a new domain on Njal.la, or create a subdomain from a domain you already own. Tip: Subdomains are free to create — you only need to purchase one domain, and you can add as many subdomains as you like.
  6. ' + '
  7. In the Njal.la web interface, create a Dynamic record pointing to this machine\'s external IP address:
    ' - + '' + escHtml(externalIp) + '
  8. ' + + '' + escHtml(externalIp) + '' + '
  9. Njal.la will give you a curl command like:
    ' + 'curl "https://njal.la/update/?h=sub.domain.com&k=abc123&auto"
  10. ' + '
  11. Enter the subdomain and paste that curl command below for each service
  12. ' @@ -370,7 +370,7 @@ async function loadStep3() { html += ''; html += ''; html += ''; - html += ''; + html += ''; html += '

    ℹ Paste the curl URL from your Njal.la dashboard\'s Dynamic record

    '; html += ''; html += ''; @@ -551,7 +551,7 @@ async function loadStep4() { // Optional ports table html += '
    '; html += '
    Optional — Only needed if you enable Element Calling:
    '; - html += '
    These 5 additional port openings are required on top of the 3 required ports above.
    '; + html += '
    These additional port openings are required on top of the 3 required ports above.
    '; html += ''; html += ''; html += ''; @@ -559,14 +559,16 @@ async function loadStep4() { html += ''; html += ''; html += ''; - html += ''; + html += ''; + html += ''; html += '
    PortProtocolForward toPurpose
    7882UDP' + ip + 'LiveKit media (UDP mux)
    5349TCP' + ip + 'TURN over TLS
    3478UDP' + ip + 'TURN (STUN/relay)
    30000–40000TCP/UDP' + ip + 'TURN relay (WebRTC)
    30000–40000TCP' + ip + 'TURN relay (WebRTC) — TCP rule
    30000–40000UDP' + ip + 'TURN relay (WebRTC) — UDP rule
    '; + html += '
    ℹ The 30000–40000 range must be forwarded for both TCP and UDP. On most routers these are two separate forwarding rules.
    '; html += '
    '; // Totals html += '
    '; html += 'Total port openings: 3 (without Element Calling)
    '; - html += 'Total port openings: 8 (with Element Calling — 3 required + 5 optional)'; + html += 'Total port openings: 9 (with Element Calling — 3 required + 6 optional; the 30000–40000 range counts as one TCP rule and one UDP rule)'; html += '
    '; html += '
    '