landmineHQ fc9890235d fix(ui): decode room id from URL and encode it when writing back
The room id was read from the query string with a hand-rolled parser that
never decoded it, while the id was written back into the URL without any
encoding:

    getFromURL = (key, search) =>
        search.slice(1).split('&')
            .find((param) => param.startsWith(`${key}=`))?.split('=')[1];

    window.history.pushState({roomId: id}, '', id ? `?room=${id}` : '?');

Browsers percent-encode non-ASCII characters when a URL is serialized, so a
room named "不辞" is shared as `?room=%E4%B8%8D%E8%BE%9E`, but the client then
joins the literal `%E4%B8%8D%E8%BE%9E` room, which does not exist:

    -> {"type":"join","payload":{"id":"%E4%B8%8D%E8%BE%9E"}}
    <- close 1000 "room with id %E4%B8%8D%E8%BE%9E does not exist"

The same asymmetry also broke ids containing `&`, `=`, `+`, `#` or `%`, and
made ids that already contain percent escapes gain another encoding level on
every write, producing broken (double encoded) share links.

Use the platform URL API, which decodes on read and encodes on write exactly
once:

    new URLSearchParams(search).get(key) ?? undefined
    const params = new URLSearchParams();
    params.set('room', id);
    window.history.pushState({roomId: id}, '', `?${params.toString()}`);

No server change is needed: the room id stays the raw, human-readable string
that the ws `create`/`join` payload and the server-side room map already use,
and existing share links keep working.

Verified: URL round-trip for 不辞 / "my room" / "a+b" / "a&b=c" / "100%",
protocol-level e2e against a live server (encoded id -> "does not exist",
decoded id -> joins, cleanup on owner leave), `yarn build` (tsc + vite) and
`prettier --check src/useRoomID.ts`.
2026-09-26 02:52:21 -04:00
2026-04-25 10:17:04 +02:00
2023-03-17 09:59:23 +01:00
2024-08-25 08:53:18 +00:00
2024-09-28 14:07:03 +02:00
2026-05-10 21:37:46 +08:00
2023-03-17 09:59:23 +01:00
2024-10-11 15:11:07 +02:00
2023-03-17 09:59:23 +01:00
2024-09-28 14:07:03 +02:00
2023-11-20 18:40:09 +01:00
2026-01-01 13:42:03 +01:00
2020-10-09 08:03:56 +00:00
2026-01-01 13:42:03 +01:00
2026-05-13 22:06:01 +02:00
2023-04-05 12:51:51 +02:00
2026-04-25 10:14:07 +02:00
2026-04-25 10:14:07 +02:00
2020-09-29 18:54:22 +02:00
2020-10-04 19:19:11 +02:00
2026-08-01 10:41:37 +02:00
2020-10-04 20:10:38 +02:00

screego/server

screen sharing for developers

Build Status Docker Pulls latest release

Intro

In the past I've had some problems sharing my screen with coworkers using corporate chatting solutions like Microsoft Teams. I wanted to show them some of my code, but either the stream lagged several seconds behind or the quality was so poor that my colleagues couldn't read the code. Or both.

That's why I created screego. It allows you to share your screen with good quality and low latency. Screego is an addition to existing software and only helps to share your screen. Nothing else (:.

Features

  • Multi User Screenshare
  • Secure transfer via WebRTC
  • Low latency / High resolution
  • Simple Install via Docker / single binary
  • Integrated TURN Server see NAT Traversal

Demo / Public Instance ᛫ Installation ᛫ Configuration

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Languages
Go 52.1%
TypeScript 47%
HTML 0.8%
Dockerfile 0.1%