{"id":44474738,"url":"https://github.com/bedrud-ir/bedrud","last_synced_at":"2026-05-07T04:02:27.941Z","repository":{"id":287270889,"uuid":"964181101","full_name":"bedrud-ir/bedrud","owner":"bedrud-ir","description":"Bedrud Live Meeting","archived":false,"fork":false,"pushed_at":"2026-04-26T20:56:48.000Z","size":20762,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-26T21:28:12.495Z","etag":null,"topics":["agents","livekit","meet","meeting","video","video-conferencing"],"latest_commit_sha":null,"homepage":"https://bedrud.org","language":"MDX","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bedrud-ir.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-10T20:14:18.000Z","updated_at":"2026-04-26T19:56:04.000Z","dependencies_parsed_at":"2025-04-10T21:40:04.751Z","dependency_job_id":null,"html_url":"https://github.com/bedrud-ir/bedrud","commit_stats":null,"previous_names":["bedrud-ir/bedrud"],"tags_count":91,"template":false,"template_full_name":null,"purl":"pkg:github/bedrud-ir/bedrud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bedrud-ir%2Fbedrud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bedrud-ir%2Fbedrud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bedrud-ir%2Fbedrud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bedrud-ir%2Fbedrud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bedrud-ir","download_url":"https://codeload.github.com/bedrud-ir/bedrud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bedrud-ir%2Fbedrud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32318417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: 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":["agents","livekit","meet","meeting","video","video-conferencing"],"created_at":"2026-02-12T22:11:41.594Z","updated_at":"2026-05-07T04:02:27.920Z","avatar_url":"https://github.com/bedrud-ir.png","language":"MDX","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bedrud\n\n**Self-hosted video meeting platform** — a single binary that packages the web UI, REST API, and WebRTC media server into one deployable unit.\n\n[![CI](https://github.com/bedrud-ir/bedrud/actions/workflows/ci.yml/badge.svg)](https://github.com/bedrud-ir/bedrud/actions/workflows/ci.yml)\n[![Release](https://github.com/bedrud-ir/bedrud/actions/workflows/release.yml/badge.svg)](https://github.com/bedrud-ir/bedrud/actions/workflows/release.yml)\n[![Latest Release](https://img.shields.io/github/v/release/bedrud-ir/bedrud)](https://github.com/bedrud-ir/bedrud/releases/latest)\n[![Downloads](https://img.shields.io/github/downloads/bedrud-ir/bedrud/total)](https://github.com/bedrud-ir/bedrud/releases/latest)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n[![Go](https://img.shields.io/badge/Go-1.25-00ADD8?logo=go\u0026logoColor=white)](https://go.dev)\n[![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?logo=docker\u0026logoColor=white)](https://github.com/bedrud-ir/bedrud/pkgs/container/bedrud)\n[![Project Status](https://img.shields.io/badge/status-active--development-success)](https://github.com/bedrud-ir/bedrud/commits/main)\n\n[![Android](https://img.shields.io/badge/Android-API%2028+-3DDC84?logo=android\u0026logoColor=white)](https://bedrud.org/en/docs/guides/packages/#android)\n[![iOS](https://img.shields.io/badge/iOS-18.0+-000000?logo=apple\u0026logoColor=white)](https://bedrud.org/en/docs/guides/packages/#ios)\n[![Windows](https://img.shields.io/badge/Windows-10%2F11-0078D4?logo=windows\u0026logoColor=white)](https://bedrud.org/en/docs/guides/packages/#windows)\n[![Linux](https://img.shields.io/badge/Linux-x86__64-FCC624?logo=linux\u0026logoColor=black)](https://bedrud.org/en/docs/guides/packages/#linux)\n[![macOS](https://img.shields.io/badge/macOS-x86__64%2Farm64-000000?logo=apple\u0026logoColor=white)](https://bedrud.org/en/docs/guides/packages/#macos)\n\n[![EN](https://img.shields.io/badge/docs-EN-blue)](https://bedrud.org/en/docs/)\n[![DE](https://img.shields.io/badge/docs-DE-blue)](https://bedrud.org/de/docs/)\n[![FR](https://img.shields.io/badge/docs-FR-blue)](https://bedrud.org/fr/docs/)\n[![ES](https://img.shields.io/badge/docs-ES-blue)](https://bedrud.org/es/docs/)\n[![ZH](https://img.shields.io/badge/docs-ZH-blue)](https://bedrud.org/zh/docs/)\n[![JA](https://img.shields.io/badge/docs-JA-blue)](https://bedrud.org/ja/docs/)\n[![TR](https://img.shields.io/badge/docs-TR-blue)](https://bedrud.org/tr/docs/)\n[![FA](https://img.shields.io/badge/docs-FA-blue)](https://bedrud.org/fa/docs/)\n[![AR](https://img.shields.io/badge/docs-AR-blue)](https://bedrud.org/ar/docs/)\n[![RU](https://img.shields.io/badge/docs-RU-blue)](https://bedrud.org/ru/docs/)\n\n---\n\nDeploying self-hosted video infrastructure typically requires managing multiple services, external media servers, and separate client applications. Bedrud solves this by packaging the web UI, REST API, and a WebRTC media server into a single, lightweight binary, giving privacy-conscious teams complete control without the DevOps headache.\n\n## Why Bedrud?\n\n| | Bedrud | Jitsi Meet | BigBlueButton |\n|---|---|---|---|\n| **Deployment** | Single binary, no dependencies | Multiple services (Jicofo, JVB, Prosody) | Heavy stack (Tomcat, Redis, FreeSWITCH, etc.) |\n| **Media server** | Embedded LiveKit SFU | External Jitsi Videobridge | External FreeSWITCH |\n| **Native clients** | Android, iOS, Desktop (Rust) | Web only (Electron wrapper) | Web only |\n| **Mobile multi-server** | Connect to multiple instances | Single server | Single server |\n| **Built-in installer** | `bedrud install` (systemd + TLS) | Manual setup | Manual setup |\n| **Resource usage** | ~200 MB RAM* | ~1 GB+ RAM* | ~2 GB+ RAM* |\n\n*\\*Approximate, varies by load and configuration.*\n\nDesigned for privacy-first teams who want full control without managing complex infrastructure.\n\n---\n\n## Quick Start\n\nRun with Docker:\n\n```bash\ndocker run -p 8090:8090 -p 7880:7880 ghcr.io/bedrud-ir/bedrud:latest\n```\n\nOpen `http://localhost:8090`, create an account, and start a meeting.\n\n\u003e Demo coming soon.\n\n---\n\n## Table of Contents\n\n- [Screenshots](#screenshots)\n- [Features](#features)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Security](#security)\n- [Troubleshooting](#troubleshooting)\n- [Architecture](#architecture)\n- [Documentation](#documentation)\n- [Development Setup](#development-setup)\n- [Client Apps](#client-apps)\n- [Bot Agents](#bot-agents)\n- [Tech Stack](#tech-stack)\n- [Makefile Reference](#makefile-reference)\n- [Project Status](#project-status)\n- [Roadmap](#roadmap)\n- [Support](#support)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Screenshots\n\n### Web UI\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/images/web-dark.svg\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/images/web-light.svg\"\u003e\n  \u003cimg alt=\"Bedrud Web Interface\" src=\"docs/images/web-light.svg\"\u003e\n\u003c/picture\u003e\n\n*Web meeting room with video grid, chat sidebar, and controls.*\n\n### Desktop App (Windows / Linux / macOS)\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/images/desktop-dark.svg\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/images/desktop-light.svg\"\u003e\n  \u003cimg alt=\"Bedrud Desktop App\" src=\"docs/images/desktop-light.svg\"\u003e\n\u003c/picture\u003e\n\n*Native desktop client with picture-in-picture and system integration.*\n\n### Android\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/images/android-dark.svg\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/images/android-light.svg\"\u003e\n  \u003cimg alt=\"Bedrud Android App\" src=\"docs/images/android-light.svg\"\u003e\n\u003c/picture\u003e\n\n*Android meeting view with material design and gesture controls.*\n\n### iOS\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/images/ios-dark.svg\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/images/ios-light.svg\"\u003e\n  \u003cimg alt=\"Bedrud iOS App\" src=\"docs/images/ios-light.svg\"\u003e\n\u003c/picture\u003e\n\n*iOS meeting interface with SwiftUI and native iOS integration.*\n\n---\n\n## Features\n\n- **Video \u0026 Audio Meetings** — WebRTC-powered rooms via an embedded LiveKit media server\n- **Single Binary** — Go server with the React frontend and LiveKit compiled in; no runtime dependencies\n- **Native Client Apps** — Android (Jetpack Compose), iOS (SwiftUI), and desktop (Rust + Slint for Windows, Linux, and macOS) with picture-in-picture, deep linking, and call management\n- **Multiple Auth Methods** — Email/password, OAuth (Google, GitHub, Twitter), guest access, and FIDO2 passkeys\n- **Room Controls** — Public/private rooms, admin kick/mute/video-off, participant management\n- **Multi-Instance** — Mobile and desktop apps can connect to multiple Bedrud servers simultaneously\n- **Bot Agents** — Python agents for streaming music, radio, and video into rooms\n- **Built-in Installer** — `bedrud install` sets up systemd services, TLS certificates, and configuration on Debian/Ubuntu\n- **Docker Support** — Multi-variant images (Debian, Alpine, Distroless) on GHCR for containerized deployments\n\n---\n\n## Installation\n\n### Docker (Recommended)\n\n```bash\n# Debian-based (default)\ndocker pull ghcr.io/bedrud-ir/bedrud:latest\ndocker run -p 8090:8090 -p 7880:7880 ghcr.io/bedrud-ir/bedrud:latest\n\n# Alpine-based (smaller image)\ndocker pull ghcr.io/bedrud-ir/bedrud:latest-alpine\ndocker run -p 8090:8090 -p 7880:7880 ghcr.io/bedrud-ir/bedrud:latest-alpine\n\n# Distroless (smallest, no shell)\ndocker pull ghcr.io/bedrud-ir/bedrud:latest-distroless\ndocker run -p 8090:8090 -p 7880:7880 ghcr.io/bedrud-ir/bedrud:latest-distroless\n```\n\nOpen `http://localhost:8090`, create an account, and start a meeting.\n\nThree image variants are available:\n\n| Tag | Base | Size | Use when |\n|-----|------|------|----------|\n| `:latest` | Debian Bookworm | ~50 MB | Default — compatible with most systems |\n| `:latest-alpine` | Alpine 3.21 | ~30 MB | Alpine hosts, minimal footprint |\n| `:latest-distroless` | Distroless | ~25 MB | Smallest attack surface, no shell |\n\nAll images contain the same static binary — the base image only affects runtime utilities (ca-certs, timezone data).\n\n\u003e [!TIP]\n\u003e Ports `8090` (web UI + API) and `7880` (WebRTC media) must both be exposed. For production, use a reverse proxy (Traefik, Caddy, nginx) with TLS on port 8090.\n\n#### Ports\n\n| Port | Protocol | Purpose |\n|------|----------|---------|\n| 8090 | TCP | Web UI, REST API, WebSocket |\n| 7880 | TCP | LiveKit signaling |\n| 50000–60000 | UDP | WebRTC media (configurable range) |\n| 3478 | UDP | TURN relay |\n| 5349 | TCP | TURN/TLS relay |\n\n\u003cdetails\u003e\n\u003csummary\u003eBuild Docker image from source\u003c/summary\u003e\n\n```bash\ndocker build -t bedrud .\ndocker run -p 8090:8090 -p 7880:7880 bedrud\n```\n\n\u003c/details\u003e\n\n### Binary Download\n\n\u003cdetails\u003e\n\u003csummary\u003eLinux (x86_64 / ARM64)\u003c/summary\u003e\n\n```bash\ncurl -L https://github.com/bedrud-ir/bedrud/releases/latest/download/bedrud_linux_amd64.tar.xz | tar xJ\nsudo mv bedrud /usr/local/bin/\nsudo bedrud install   # sets up systemd, TLS, and config\n```\n\nFor ARM64 (Raspberry Pi, ARM servers): replace `amd64` with `arm64`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWindows\u003c/summary\u003e\n\nDownload `bedrud_windows_amd64.zip` from the [latest release](https://github.com/bedrud-ir/bedrud/releases/latest).\n\n\u003c/details\u003e\n\nSee [latest release](https://github.com/bedrud-ir/bedrud/releases/latest) for all platforms.\n\n### Ubuntu/Debian (APT)\n\n\u003cdetails\u003e\n\u003csummary\u003eInstall via apt repository\u003c/summary\u003e\n\n```bash\ncurl -fsSL https://bedrud-ir.github.io/bedrud/bedrud.gpg.key \\\n  | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/bedrud.gpg\necho \"deb https://bedrud-ir.github.io/bedrud stable main\" \\\n  | sudo tee /etc/apt/sources.list.d/bedrud.list\nsudo apt update \u0026\u0026 sudo apt install bedrud\nsudo bedrud install\n```\n\n\u003c/details\u003e\n\n### Arch Linux (AUR)\n\n\u003cdetails\u003e\n\u003csummary\u003eInstall from AUR\u003c/summary\u003e\n\n```bash\nyay -S bedrud-bin\nsudo bedrud install\n```\n\n\u003c/details\u003e\n\n### Alpine Linux (.apk)\n\n\u003cdetails\u003e\n\u003csummary\u003eInstall Alpine package\u003c/summary\u003e\n\n```bash\nwget https://github.com/bedrud-ir/bedrud/releases/latest/download/bedrud_x86_64.apk\napk add --allow-untrusted bedrud_x86_64.apk\n```\n\nFor ARM64: replace `x86_64` with `aarch64`.\n\n\u003c/details\u003e\n\n### Desktop Client\n\n\u003cdetails\u003e\n\u003csummary\u003eUbuntu/Debian (apt)\u003c/summary\u003e\n\n```bash\n# After adding the repo above:\nsudo apt install bedrud-desktop\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eArch Linux (AUR)\u003c/summary\u003e\n\n```bash\nyay -S bedrud-desktop-bin\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAppImage (any Linux)\u003c/summary\u003e\n\n```bash\nwget https://github.com/bedrud-ir/bedrud/releases/latest/download/bedrud-desktop-linux-x86_64.AppImage\nchmod +x bedrud-desktop-linux-x86_64.AppImage\n./bedrud-desktop-linux-x86_64.AppImage\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003emacOS (unsigned)\u003c/summary\u003e\n\n```bash\n# Apple Silicon\ncurl -L https://github.com/bedrud-ir/bedrud/releases/latest/download/bedrud-desktop-macos-arm64.tar.gz | tar xz\n# Intel\ncurl -L https://github.com/bedrud-ir/bedrud/releases/latest/download/bedrud-desktop-macos-x86_64.tar.gz | tar xz\n```\n\n\u003e [!WARNING]\n\u003e macOS builds are unsigned. Gatekeeper will block the app on first launch. To bypass: `xattr -d com.apple.quarantine bedrud-desktop` or allow it in **System Settings → Privacy \u0026 Security**.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWindows\u003c/summary\u003e\n\nDownload the NSIS installer or portable `.zip` from the [latest release](https://github.com/bedrud-ir/bedrud/releases/latest) for x86_64 or ARM64.\n\n\u003c/details\u003e\n\nSee the [Package Installation guide](https://bedrud.org/en/docs/guides/packages/) for full details on all platforms.\n\n---\n\n## Configuration\n\n**Development:** `server/config.yaml` (auto-generated by `make init` from `config.local.yaml`)\n**Production:** `/etc/bedrud/config.yaml` (set up by `bedrud install`)\n\nOverride path: `CONFIG_PATH=/path/to/config.yaml bedrud run`\n\nMinimum production changes:\n\n```yaml\nauth:\n  jwtSecret: \"change-to-random-string-32-chars\"\n  sessionSecret: \"change-to-another-random-string\"\n```\n\nSee the [Configuration guide](https://bedrud.org/en/docs/getting-started/configuration/) for the full reference, LiveKit settings, environment variables, and production checklist.\n\n---\n\n## Security\n\n- **Change default secrets** — `jwtSecret` and `sessionSecret` must be set to strong random values in production\n- **TLS is required** — use `bedrud install` (Let's Encrypt), a reverse proxy, or set `server.enableTLS: true`\n- **Firewall** — open only the ports listed above; restrict LiveKit UDP range to your needs\n\nSee the [Production Checklist](https://bedrud.org/en/docs/getting-started/configuration/#production-checklist) for a complete list.\n\n---\n\n## Troubleshooting\n\n| Issue | Cause | Fix |\n|-------|-------|-----|\n| No video/audio | UDP ports blocked | Open port range 50000–60000 (or your configured `rtc.port_range_start`–`port_range_end`) |\n| Media works on LAN only | Missing external IP | Set `rtc.use_external_ip: true` and configure your public IP in LiveKit config |\n| TURN not connecting | TLS certificate missing | TURN/TLS (port 5349) needs a valid certificate. See [TURN Server Guide](https://bedrud.org/en/docs/architecture/turn-server/) |\n| CORS errors in browser | Mismatched origins | Set `cors.allowedOrigins` to your frontend URL |\n\nFor more, see [WebRTC Connectivity](https://bedrud.org/en/docs/architecture/webrtc-connectivity/) and [TURN Server](https://bedrud.org/en/docs/architecture/turn-server/).\n\n---\n\n## Architecture\n\n```mermaid\n%%{init: {'theme': 'forest'}}%%\ngraph TB\n    subgraph Clients\n        WEB[\"Web Browser\u003cbr/\u003e(React + TanStack Start)\"]\n        ANDROID[\"Android\u003cbr/\u003e(Jetpack Compose)\"]\n        IOS[\"iOS\u003cbr/\u003e(SwiftUI)\"]\n        DESKTOP[\"Desktop\u003cbr/\u003e(Rust + Slint)\"]\n    end\n\n    subgraph \"Bedrud Server (Single Binary)\"\n        API[\"REST API\u003cbr/\u003e(Go + Fiber)\"]\n        AUTH[\"Auth Layer\u003cbr/\u003e(JWT / OAuth2 / FIDO2)\"]\n        LIVEKIT[\"Embedded LiveKit SFU\u003cbr/\u003e(WebRTC Media)\"]\n        EMBED[\"Embedded Frontend\u003cbr/\u003e(React SPA)\"]\n    end\n\n    subgraph Storage\n        DB[(\"SQLite / PostgreSQL\u003cbr/\u003e(GORM)\")]\n    end\n\n    WEB --\u003e|HTTP/WS| API\n    WEB --\u003e|WebRTC| LIVEKIT\n    ANDROID --\u003e|REST API| API\n    ANDROID --\u003e|WebRTC| LIVEKIT\n    IOS --\u003e|REST API| API\n    IOS --\u003e|WebRTC| LIVEKIT\n    DESKTOP --\u003e|REST API| API\n    DESKTOP --\u003e|WebRTC| LIVEKIT\n\n    API --\u003e AUTH\n    AUTH --\u003e DB\n    API --\u003e DB\n    API --\u003e LIVEKIT\n    EMBED --\u003e API\n```\n\n### Project Structure\n\n```\nbedrud/\n├── server/          Go backend (Fiber, GORM, embedded LiveKit)\n├── apps/\n│   ├── web/         React frontend (TanStack Start, TailwindCSS v4)\n│   ├── android/     Jetpack Compose app (Koin, Retrofit, LiveKit SDK)\n│   ├── ios/         SwiftUI app (KeychainAccess, LiveKit SDK)\n│   └── desktop/     Native desktop app (Rust, Slint, LiveKit SDK)\n├── agents/          Python bots (music, radio, video stream)\n├── packages/        Shared TypeScript types (@bedrud/api-types)\n├── tools/cli/       Deployment CLI (pyinfra, Click)\n├── Cargo.toml       Rust workspace root\n└── docs/images/       Platform screenshots (SVG)\n```\n\nSee the [Architecture Overview](https://bedrud.org/en/docs/architecture/overview/) for detailed documentation.\n\n---\n\n## Documentation\n\nFull documentation: [bedrud.org/en/docs](https://bedrud.org/en/docs/)\n\nKey pages:\n- [Quick Start](https://bedrud.org/en/docs/getting-started/quickstart/)\n- [Architecture Overview](https://bedrud.org/en/docs/architecture/overview/)\n- [Deployment Guide](https://bedrud.org/en/docs/guides/deployment/)\n- [API Reference](https://bedrud.org/en/docs/api/authentication/)\n\n---\n\n## Development Setup\n\n### Prerequisites\n\n- **Go** 1.24+\n- **Bun** (JavaScript runtime / package manager)\n- **LiveKit Server** (for local development)\n\n### Commands\n\n```bash\ngit clone https://github.com/bedrud-ir/bedrud.git\ncd bedrud\nmake init     # install all dependencies\nmake dev      # start LiveKit + server + web frontend\n```\n\nThe web frontend runs at `http://localhost:3000` and the API at `http://localhost:8090`.\n\n\u003e See [AGENTS.md](AGENTS.md) for the full developer guide including build order, testing, and common gotchas.\n\n\u003e [!NOTE]\n\u003e API docs available at `http://localhost:8090/api/swagger` (Swagger UI) or `http://localhost:8090/api/scalar` (Scalar UI) when the server is running.\n\n\u003e For detailed platform-specific development setup, see the [Development Workflow](https://bedrud.org/en/docs/guides/development/) guide.\n\n### Production Build\n\n```bash\nmake build            # Build frontend + backend into a single binary\nmake build-dist       # Build compressed linux/amd64 tarball (static)\n```\n\n---\n\n## Client Apps\n\n| Client | Platform | Stack | Download |\n|--------|----------|-------|----------|\n| Web | Browser | React 19, TanStack Start | N/A (runs on server) |\n| Android | API 28+ | Kotlin, Jetpack Compose, LiveKit SDK | [APK / Play Store](https://bedrud.org/en/docs/guides/packages/#android) |\n| iOS | 18.0+ | Swift, SwiftUI, LiveKit SDK | [IPA / App Store](https://bedrud.org/en/docs/guides/packages/#ios) |\n| Desktop | Windows / Linux / macOS | Rust, Slint, LiveKit SDK | [Installers](https://bedrud.org/en/docs/guides/packages/#desktop) |\n\n\u003e [!NOTE]\n\u003e Building client apps from source? See [Development Setup](#development-setup) and [Contributing Guide](https://bedrud.org/en/docs/contributing/) for platform-specific commands.\n\n---\n\n## Bot Agents\n\nStream media into meeting rooms using Python agents:\n\n```bash\ncd agents/music_agent\npython -m venv .venv\nsource .venv/bin/activate  # On Windows: .venv\\Scripts\\activate\npip install -r requirements.txt\npython agent.py \"https://meet.example.com/m/room-name\"\n```\n\nAvailable agents: `music_agent`, `radio_agent`, `video_stream_agent`.\n\n---\n\n## Tech Stack\n\nGo + Fiber backend · React 19 frontend · LiveKit WebRTC SFU · Android / iOS / Desktop native clients\n\n\u003cdetails\u003e\n\u003csummary\u003eView full technology stack\u003c/summary\u003e\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Go 1.24, Fiber, GORM, LiveKit Protocol SDK |\n| Web Frontend | React 19, TanStack Start, TanStack Router, TailwindCSS v4, Vite |\n| Android | Kotlin, Jetpack Compose, Koin, Retrofit, LiveKit Android SDK |\n| iOS | Swift, SwiftUI, KeychainAccess, LiveKit Swift SDK |\n| Desktop | Rust, Slint, reqwest, LiveKit Rust SDK |\n| Auth | JWT, OAuth2 (Goth), WebAuthn / FIDO2 Passkeys |\n| Database | SQLite (default), PostgreSQL (production) |\n| Media | LiveKit (embedded WebRTC SFU) |\n| CI/CD | GitHub Actions, Docker, GHCR |\n| Deployment | pyinfra, systemd, Traefik |\n\n\u003c/details\u003e\n\n---\n\n## Makefile Reference\n\n\u003cdetails\u003e\n\u003csummary\u003eView all Makefile targets\u003c/summary\u003e\n\n| Command | Description |\n|---------|-------------|\n| `make help` | Show all available targets |\n| `make init` | Install all dependencies |\n| `make dev` | Run LiveKit + server + web concurrently |\n| `make build` | Build frontend + backend (embedded single binary) |\n| `make build-dist` | Build production linux/amd64 tarball (static) |\n| `make build-android-debug` | Build Android debug APK |\n| `make build-android` | Build Android release APK |\n| `make build-ios` | Build iOS archive |\n| `make build-ios-sim` | Build for iOS simulator |\n| `make build-desktop` | Build desktop release binary |\n| `make dev-desktop` | Run desktop app (debug) |\n| `make test-back` | Run server tests |\n| `make deploy ARGS=...` | Run deployment CLI |\n| `make clean` | Remove build artifacts |\n\nFor the full target list, see the [Makefile Reference](https://bedrud.org/en/docs/guides/makefile/) or run `make help`.\n\n\u003c/details\u003e\n\n---\n\n## Project Status\n\nBedrud is in **active development**. Core features are functional and used in production. Breaking API changes are possible before v1.0; minor versions may include non-breaking additions.\n\n---\n\n## Roadmap\n\n- [ ] Screen sharing with annotation tools\n- [ ] End-to-end encryption (E2EE) for peer-to-peer rooms\n- [ ] Recording and playback (server-side + participant local)\n- [ ] Breakout rooms\n- [ ] SIP/VoIP gateway for dial-in access\n- [ ] LDAP / SAML / OIDC enterprise authentication\n- [ ] Whiteboard collaboration (shared canvas)\n- [ ] Signed and notarized macOS / Windows builds\n\nSee [GitHub Issues](https://github.com/bedrud-ir/bedrud/issues) and [Discussions](https://github.com/bedrud-ir/bedrud/discussions) for the latest plans.\n\n---\n\n## Support\n\n- **Bug Reports \u0026 Feature Requests:** [GitHub Issues](https://github.com/bedrud-ir/bedrud/issues)\n- **Architecture Discussions \u0026 Questions:** [GitHub Discussions](https://github.com/bedrud-ir/bedrud/discussions)\n- **Documentation:** [bedrud.org/en/docs](https://bedrud.org/en/docs/)\n\n\u003e [!NOTE]\n\u003e Before reporting issues, please check existing issues and documentation to avoid duplicates.\n\n---\n\n## Contributing\n\nContributions are welcome! Please open an issue first for significant changes.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) and the online [Contributing Guide](https://bedrud.org/en/docs/contributing/) for:\n- Development setup instructions\n- Code style conventions\n- Pull request process\n- CI/CD checks\n\n---\n\n## License\n\n[Apache-2.0](LICENSE)\n\nBy contributing to Bedrud, you agree that your contributions will be licensed under the Apache License 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbedrud-ir%2Fbedrud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbedrud-ir%2Fbedrud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbedrud-ir%2Fbedrud/lists"}