{"id":13581375,"url":"https://github.com/cloudflare/orange","last_synced_at":"2025-05-14T08:07:20.629Z","repository":{"id":231391632,"uuid":"777335634","full_name":"cloudflare/orange","owner":"cloudflare","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-11T22:09:53.000Z","size":8712,"stargazers_count":1900,"open_issues_count":39,"forks_count":299,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-05-11T23:19:27.069Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://demo.orange.cloudflare.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudflare.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}},"created_at":"2024-03-25T16:53:59.000Z","updated_at":"2025-05-11T08:06:17.000Z","dependencies_parsed_at":"2024-04-03T21:48:34.285Z","dependency_job_id":"c20604f0-1f9e-4e2b-90cd-45738e5cec05","html_url":"https://github.com/cloudflare/orange","commit_stats":null,"previous_names":["cloudflare/orange"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Forange","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Forange/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Forange/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Forange/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudflare","download_url":"https://codeload.github.com/cloudflare/orange/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254101617,"owners_count":22014909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-08-01T15:02:00.929Z","updated_at":"2025-05-14T08:07:15.617Z","avatar_url":"https://github.com/cloudflare.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Templates \u0026 Examples"],"sub_categories":["Example Applications"],"readme":"# Welcome to Orange Meets\n\nOrange Meets is a demo application built using [Cloudflare Calls](https://developers.cloudflare.com/calls/). To build your own WebRTC application using Cloudflare Calls, get started in the [Cloudflare Dashboard](https://dash.cloudflare.com/?to=/:account/calls).\n\nSimpler examples can be found [here](https://github.com/cloudflare/calls-examples).\n\n[Try the demo here!](https://demo.orange.cloudflare.dev)\n\n![A screenshot showing a room in Orange Meets](orange-meets.png)\n\n## Architecture Diagram\n\n![Diagram of Orange Meets architecture](architecture.png)\n\n## Variables\n\nGo to the [Cloudflare Calls dashboard](https://dash.cloudflare.com/?to=/:account/calls) and create an application.\n\nPut these variables into `.dev.vars`\n\n```\nCALLS_APP_ID=\u003cAPP_ID_GOES_HERE\u003e\nCALLS_APP_SECRET=\u003cSECRET_GOES_HERE\u003e\n```\n\n### Optional variables\n\nThe following variables are optional:\n\n- `MAX_WEBCAM_BITRATE` (default `1200000`): the maximum bitrate for each meeting participant's webcam.\n- `MAX_WEBCAM_FRAMERATE` (default: `24`): the maximum number of frames per second for each meeting participant's webcam.\n- `MAX_WEBCAM_QUALITY_LEVEL` (default `1080`): the maximum resolution for each meeting participant's webcam, based on the smallest dimension (i.e. the default is 1080p).\n\nTo customise these variables, place replacement values in `.dev.vars` (for development) and in the `[vars]` section of `wrangler.toml` (for the deployment).\n\n## Development\n\n```sh\nnpm install\nnpm run dev\n```\n\nOpen up [http://127.0.0.1:8787](http://127.0.0.1:8787) and you should be ready to go!\n\n## Deployment\n\n1. Make sure you've installed `wrangler` and are logged in by running:\n\n```sh\nwrangler login\n```\n\n2. Update `CALLS_APP_ID` in `wrangler.toml` to use your own Calls App ID\n\n3. You will also need to set the token as a secret by running:\n\n```sh\nwrangler secret put CALLS_APP_SECRET\n```\n\nor to programmatically set the secret, run:\n\n```sh\necho REPLACE_WITH_YOUR_SECRET | wrangler secret put CALLS_APP_SECRET\n```\n\n4. Optionally, you can also use [Cloudflare's TURN Service](https://developers.cloudflare.com/calls/turn/) by setting the `TURN_SERVICE_ID` variable in `wrangler.toml` and `TURN_SERVICE_TOKEN` secret using `wrangler secret put TURN_SERVICE_TOKEN`\n\n5. Also optionally, you can include `OPENAI_MODEL_ENDPOINT` and `OPENAI_API_TOKEN` to use OpenAI's [Realtime API with WebRTC](https://platform.openai.com/docs/guides/realtime-webrtc) to [invite AI](https://www.youtube.com/watch?v=AzMpyAbZfZQ) to join your meeting.\n\n6. Finally you can run the following to deploy:\n\n```sh\nnpm run deploy\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudflare%2Forange","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudflare%2Forange","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudflare%2Forange/lists"}