Skip to content

Commit 82bd996

Browse files
committed
docs: add broadcast feature documentation, Caddy setup, TURN server guide, update test count
1 parent be98935 commit 82bd996

File tree

1 file changed

+89
-1
lines changed

1 file changed

+89
-1
lines changed

README.md

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@ The difference between *a tool you use* and *a tool you own.*
305305

306306
**Presence awareness** — see how many people are currently connected in real time.
307307

308+
**Live broadcast** — share your screen in real time with everyone on the network. Viewers join instantly from their browser, no plugins or installs needed. Built on WebRTC for smooth, low-latency video. Includes mic audio, viewer mute/unmute, raise hand, and screen capture to channel.
309+
308310
**Read receipts** — see how many devices have viewed each shared item. Updates live as teammates open the page.
309311

310312
**Item management** — add optional titles to label any item for future reference. Edit text items inline without deleting and re-pasting. Pinned items are protected from both manual deletion and auto-cleanup.
@@ -315,6 +317,91 @@ The difference between *a tool you use* and *a tool you own.*
315317

316318
---
317319

320+
## Broadcasting
321+
322+
One person shares their screen — everyone else on the network watches live in their browser. No plugins, no accounts, no external services. Built on WebRTC for smooth, low-latency video.
323+
324+
### How to broadcast
325+
326+
Click **📡 Broadcast** in the composer. Your browser will ask you to choose a screen, window, or tab to share. Once you pick one, a live bar appears at the top for all connected devices — teammates click **Join** to watch.
327+
328+
While broadcasting you can still use Instbyte normally — send text, drop files, switch channels. The broadcast runs in the background.
329+
330+
To stop, click **⏹ Stop** in the composer or use the browser's built-in "Stop sharing" bar.
331+
332+
### As a viewer
333+
334+
When a broadcast is live, a bar appears at the top of the page. Click **Join** to open the viewer panel. The panel is draggable and resizable — move it anywhere on your screen.
335+
336+
- **📸 Capture** — saves the current frame as an image to the active channel
337+
- **✋ Raise hand** — notifies the broadcaster with a sound and toast
338+
- **🔇 / 🔊** — mute and unmute audio
339+
- **─** — minimize the panel without leaving the broadcast
340+
- **✕** — leave the broadcast entirely
341+
342+
### Audio
343+
344+
Instbyte captures your microphone alongside the screen share by default. Viewers are muted on join — click 🔇 to unmute.
345+
346+
To share audio playing on your screen (videos, music, system sounds), select a **browser tab** in the screen picker and enable **Share tab audio**. Window and full-screen capture do not carry system audio — this is a browser limitation.
347+
348+
### HTTPS requirement
349+
350+
Broadcasting uses `getDisplayMedia` which browsers only allow on secure connections. This means:
351+
352+
- **localhost** — always works. If you run `npx instbyte` on your own machine and open `http://localhost:3000`, you can broadcast.
353+
- **LAN via HTTP** — viewers can watch but cannot broadcast themselves. Only the person running the server can broadcast.
354+
- **LAN via HTTPS** — everyone on the network can broadcast.
355+
356+
### Enabling broadcast for everyone on your network
357+
358+
To let any device on your LAN broadcast, run Caddy alongside Instbyte. Caddy adds HTTPS automatically — no certificate setup needed.
359+
360+
**Install Caddy:**
361+
```bash
362+
# macOS
363+
brew install caddy
364+
365+
# Ubuntu / Debian
366+
sudo apt install caddy
367+
```
368+
369+
**Run alongside Instbyte:**
370+
```bash
371+
# Terminal 1
372+
npx instbyte
373+
374+
# Terminal 2 — replace with your machine's local IP
375+
caddy reverse-proxy --from https://192.168.1.x --to localhost:3000
376+
```
377+
378+
Everyone on the network opens `https://192.168.1.x` instead of the plain HTTP URL. The first visit on each device will show a certificate warning — click **Advanced → Proceed**. After that, full HTTPS, anyone can broadcast.
379+
380+
For a permanent setup with a real domain, see the [Reverse Proxy](#reverse-proxy) section.
381+
382+
### Advanced: broadcast across subnets or over the internet
383+
384+
WebRTC peer connections work natively on a LAN without any relay server. If you're running Instbyte on a VPS or across different subnets, WebRTC needs a TURN relay to punch through NAT.
385+
386+
Install and run [coturn](https://github.com/coturn/coturn) on your server:
387+
```bash
388+
sudo apt install coturn
389+
```
390+
391+
Minimal `/etc/turnserver.conf`:
392+
```
393+
listening-port=3478
394+
fingerprint
395+
lt-cred-mech
396+
user=instbyte:yourpassword
397+
realm=yourdomain.com
398+
```
399+
400+
Then update the STUN_SERVERS config in `client/js/app.js` to point to your TURN server. Teams doing this are already comfortable with server config — the coturn docs cover the rest.
401+
```
402+
403+
---
404+
318405
## Keyboard Shortcuts
319406

320407
| Key | Action |
@@ -346,6 +433,7 @@ node server/server.js
346433
- Home lab file sharing without setting up NAS or cloud sync
347434
- Piping build logs or stack traces from CI or terminal directly into a shared channel
348435
- Sharing sensitive credentials or config files over LAN without leaving a cloud trail
436+
- Live screen sharing during standups, design reviews, or debugging sessions — no Zoom link needed
349437

350438
---
351439

@@ -393,7 +481,7 @@ Instbyte follows [Semantic Versioning](https://semver.org). See [Releases](https
393481

394482
Instbyte is intentionally lightweight and LAN-first. If you want to extend it — CLI tools, themes, integrations — open an issue or submit a pull request.
395483

396-
The codebase has a full test suite (184 tests across unit and integration). Run `npm test` before submitting anything. Issues tagged **good first issue** are a good starting point.
484+
The codebase has a full test suite (195 tests across unit and integration). Run `npm test` before submitting anything. Issues tagged **good first issue** are a good starting point.
397485

398486
---
399487

0 commit comments

Comments
 (0)