{"id":45157484,"url":"https://github.com/fildon/tiny-stream","last_synced_at":"2026-02-20T05:03:09.245Z","repository":{"id":338762256,"uuid":"1159006638","full_name":"fildon/tiny-stream","owner":"fildon","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-16T11:25:46.000Z","size":60,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-16T16:27:21.931Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fildon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-16T07:37:25.000Z","updated_at":"2026-02-16T11:25:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fildon/tiny-stream","commit_stats":null,"previous_names":["fildon/tiny-stream"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/fildon/tiny-stream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fildon%2Ftiny-stream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fildon%2Ftiny-stream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fildon%2Ftiny-stream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fildon%2Ftiny-stream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fildon","download_url":"https://codeload.github.com/fildon/tiny-stream/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fildon%2Ftiny-stream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29641929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T03:21:14.183Z","status":"ssl_error","status_checked_at":"2026-02-20T03:18:24.455Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-20T05:02:46.447Z","updated_at":"2026-02-20T05:03:09.239Z","avatar_url":"https://github.com/fildon.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tiny-stream\n\nOne-way video + audio streaming between your devices — open a URL, pick Send or Receive, done.\n\n## Quick Start\n\n```bash\nnpm install\nnpm start\n```\n\nThe server prints your local network URL:\n\n```\n  ╔══════════════════════════════════════════════╗\n  ║         tiny-stream is running!         ║\n  ╠══════════════════════════════════════════════╣\n  ║  Local:   https://localhost:3000        ║\n  ║  Network: https://192.168.1.42:3000     ║\n  ╚══════════════════════════════════════════════╝\n```\n\nOpen the **Network** URL on any device connected to your home Wi-Fi/LAN.\n\n## How It Works\n\n1. Open the URL on **two devices** (laptops, desktop, phone — anything with a browser).\n2. Both devices enter the same **room name** (default: `home`).\n3. On one device, tap **Send Video** — it opens your camera/microphone and starts streaming.\n4. The sender sees a **4-digit room code** displayed on screen.\n5. On the other device, enter the room name _and_ the room code, then tap **Receive Video** — it shows the live feed with audio.\n\nThat's it. No accounts, no installs, no cloud.\n\n## Architecture\n\n```mermaid\ngraph TD\n    Sender[\"Sender (camera)\"] -- \"WebRTC (peer-to-peer video)\" --\u003e Receiver[\"Receiver (viewer)\"]\n    Sender -- \"WebSocket signaling\" --\u003e Server[\"Node.js server.ts\\n(port 3000)\"]\n    Receiver -- \"WebSocket signaling\" --\u003e Server\n```\n\n- **Video + audio** travels directly between devices via WebRTC (peer-to-peer). The server never sees your stream.\n- **Signaling** (tiny JSON messages to set up the connection) goes through the Node.js WebSocket server.\n\n## Features\n\n- **One-way streaming** — one sender, multiple receivers per room\n- **Camera switching** — sender can switch between cameras on the fly\n- **Room codes** — each room gets a random 4-digit security code; receivers must enter the correct code to join\n- **Room-based** — run multiple independent streams with different room names\n- **Mobile-friendly** — works on phone browsers (Chrome, Safari, Firefox)\n- **Audio + video** — streams both camera and microphone\n- **Zero config** — no TURN servers needed on a home network\n\n## Requirements\n\n- Node.js 18+\n- Devices on the same local network\n- A modern browser (Chrome, Edge, Firefox, Safari)\n\n## Configuration\n\n| Env Variable | Default | Description |\n| ------------ | ------- | ----------- |\n| `PORT`       | `3000`  | Server port |\n\n```bash\nPORT=8080 npm start\n```\n\n## Troubleshooting\n\n**Camera not working on phone?**  \nMobile browsers require HTTPS for camera access. On first visit, you'll need to accept the self-signed certificate warning. If the browser still blocks camera access, try opening the URL directly (not via redirect) and accepting the certificate again.\n\n**\"Access denied: Invalid room code\"?**  \nThe 4-digit code is generated when the sender starts streaming and is shown on the sender's screen. Ask the sender for the current code. If the sender restarts, a new code is generated.\n\n**Can't connect between devices?**  \nMake sure both devices are on the same Wi-Fi/LAN. Check that your firewall allows connections on port 3000.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffildon%2Ftiny-stream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffildon%2Ftiny-stream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffildon%2Ftiny-stream/lists"}