{"id":32674911,"url":"https://github.com/makesnosense/voice","last_synced_at":"2026-01-12T15:33:32.547Z","repository":{"id":320632844,"uuid":"1051339221","full_name":"makesnosense/voice","owner":"makesnosense","description":"A minimalistic, self-hostable WebRTC voice chat.","archived":false,"fork":false,"pushed_at":"2026-01-10T12:50:28.000Z","size":544,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T04:00:01.063Z","etag":null,"topics":["self-hosted","socket-io","voice-chat","webrtc"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makesnosense.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-09-05T20:21:52.000Z","updated_at":"2026-01-10T12:51:03.000Z","dependencies_parsed_at":"2025-10-24T23:35:46.497Z","dependency_job_id":null,"html_url":"https://github.com/makesnosense/voice","commit_stats":null,"previous_names":["makesnosense/voice"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/makesnosense/voice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makesnosense%2Fvoice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makesnosense%2Fvoice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makesnosense%2Fvoice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makesnosense%2Fvoice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makesnosense","download_url":"https://codeload.github.com/makesnosense/voice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makesnosense%2Fvoice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["self-hosted","socket-io","voice-chat","webrtc"],"created_at":"2025-11-01T06:01:19.812Z","updated_at":"2026-01-12T15:33:32.542Z","avatar_url":"https://github.com/makesnosense.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\".github/header.svg\" alt=\"Voice\"/\u003e\n\n**A minimalistic, self-hostable WebRTC voice chat.**\n\n## Built with\n\n**Client:** React 19, TypeScript, Vite, Zustand, Socket.IO Client  \n**Server:** Express, Socket.IO Server, Bun  \n**Infra:** Docker, nginx, coturn, Let's Encrypt\n\n\u003cbr\u003e\n\u003cimg src=\".github/screenshot.png\" alt=\"App screenshot\" width=600px/\u003e\n\n## Self-hosting\n\n### Prerequisites\n\n- **Server**: Linux VPS with 1 GB RAM or more\n- **Domain**: Any domain pointing to your server's IP (free options: [FreeDNS](https://freedns.afraid.org), [DuckDNS](https://www.duckdns.org))\n- **Docker**\n- **Open Ports**: 80 (HTTP), 443 (HTTPS), 3478 (TURN server), 49152-49172 (TURN server UDP range)\n\n### Installation\n\n#### 1. Clone the repository\n\n```bash\ngit clone --branch v1.0-selfhost --depth 1 https://github.com/makesnosense/voice.git\ncd voice\n```\n\nThis downloads the stable self-hosted version (`v1.0-selfhost`) without full git history.\n\n#### 2. Set up environment\n\n```bash\ncp .env.selfhost.example .env\nnano .env  # or use vim, micro, etc.\n```\n\nEdit the following in `.env`:\n\n```bash\nDOMAIN=your-domain.com        # your actual domain\nEMAIL=your-email@example.com  # for Let's Encrypt notifications\nCOTURN_SECRET=                # generate with: openssl rand -base64 32\n```\n\nTo generate a strong secret:\n\n```bash\nopenssl rand -base64 32\n```\n\n#### 3. Choose setup method\n\n##### Option A: Quick Setup\n\nIf you don't mind using a setup script, this is the fastest way. (setup.sh is just two `docker run` commands)\n\n```bash\nbash setup.sh\ndocker compose up -d\n```\n\nThat's it! ✨\n\nYour voice chat is now running at `https://your-domain.com`\n\n##### Option B: Manual Setup\n\n###### 1. Get SSL certificate\n\nLoad environment variables and get certificate:\n\n```bash\nsource .env\n\ndocker run --rm -p 80:80 \\\n  -v voice_certbot-conf:/etc/letsencrypt \\\n  certbot/certbot certonly --standalone \\\n  --email ${EMAIL} \\\n  --agree-tos --no-eff-email --non-interactive \\\n  -d ${DOMAIN}\n```\n\nYou should see: `Successfully received certificate`\n\n###### 2. Build frontend\n\n```bash\nsource .env\ndocker run --rm \\\n  -v ./client:/app/client \\\n  -v ./shared:/app/shared \\\n  -v voice_client-dist:/app/dist \\\n  -e VITE_TURN_SERVER_HOST=${DOMAIN} \\\n  -e VITE_TURN_SERVER_PORT=${VITE_TURN_SERVER_PORT} \\\n  -w /app/client \\\n  node:alpine \\\n  sh -c \"npm ci \u0026\u0026 npm run build \u0026\u0026 cp -r dist/* /app/dist/\"\n```\n\nThis takes 1-2 minutes. You should see: `✓ built in XXs`\n\n###### 3. Start services\n\n```bash\ndocker compose up -d\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakesnosense%2Fvoice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakesnosense%2Fvoice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakesnosense%2Fvoice/lists"}