You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+89-1Lines changed: 89 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -305,6 +305,8 @@ The difference between *a tool you use* and *a tool you own.*
305
305
306
306
**Presence awareness** — see how many people are currently connected in real time.
307
307
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
+
308
310
**Read receipts** — see how many devices have viewed each shared item. Updates live as teammates open the page.
309
311
310
312
**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.*
315
317
316
318
---
317
319
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
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
+
318
405
## Keyboard Shortcuts
319
406
320
407
| Key | Action |
@@ -346,6 +433,7 @@ node server/server.js
346
433
- Home lab file sharing without setting up NAS or cloud sync
347
434
- Piping build logs or stack traces from CI or terminal directly into a shared channel
348
435
- 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
349
437
350
438
---
351
439
@@ -393,7 +481,7 @@ Instbyte follows [Semantic Versioning](https://semver.org). See [Releases](https
393
481
394
482
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.
395
483
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.
0 commit comments