{"id":39682964,"url":"https://github.com/crybapp/portal","last_synced_at":"2026-01-18T09:55:16.375Z","repository":{"id":46753637,"uuid":"214824052","full_name":"crybapp/portal","owner":"crybapp","description":"Service deployed on VM instances to launch browsers","archived":false,"fork":false,"pushed_at":"2024-10-16T21:31:03.000Z","size":380,"stargazers_count":33,"open_issues_count":10,"forks_count":12,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-24T15:28:36.231Z","etag":null,"topics":["cryb","docker","hacktoberfest","vm-instance"],"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/crybapp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"cryb"}},"created_at":"2019-10-13T13:21:12.000Z","updated_at":"2025-10-11T11:03:30.000Z","dependencies_parsed_at":"2024-10-18T04:14:43.232Z","dependency_job_id":"9cbff872-c390-40b0-a701-0597162784f5","html_url":"https://github.com/crybapp/portal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/crybapp/portal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crybapp%2Fportal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crybapp%2Fportal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crybapp%2Fportal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crybapp%2Fportal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crybapp","download_url":"https://codeload.github.com/crybapp/portal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crybapp%2Fportal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534200,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cryb","docker","hacktoberfest","vm-instance"],"created_at":"2026-01-18T09:55:16.295Z","updated_at":"2026-01-18T09:55:16.369Z","avatar_url":"https://github.com/crybapp.png","language":"TypeScript","readme":"![Cryb OSS](.github/portal-icon.png \"@cryb/portal Logo\")\n\n**@cryb/portal** - _VM instance_\n\n[![GitHub contributors](https://img.shields.io/github/contributors/crybapp/portal)](https://github.com/crybapp/portal/graphs/contributors) [![License](https://img.shields.io/github/license/crybapp/portal)](https://github.com/crybapp/portal/blob/master/LICENSE) [![Patreon Donate](https://img.shields.io/badge/donate-Patreon-red.svg)](https://patreon.com/cryb) [![Chat on Discord](https://discord.com/api/guilds/594942455749672983/widget.png)](https://discord.gg/xdhEgD5)\n\n## Docs\n\n* [Info](#info)\n  * [Status](#status)\n* [Codebase](#codebase)\n  * [Folder Structure](#folder-structure)\n  * [Code Style](#code-style)\n  * [First time setup](#first-time-setup)\n    * [Installation](#installation)\n  * [Running the app locally](#running-the-app-locally)\n    * [Background services](#background-services)\n    * [Starting @cryb/portal](#starting-@cryb/portal)\n* [Questions / Issues](#questions--issues)\n\n## Info\n\n`@cryb/portal` is the instance deployed onto VM machines to act as the 'Virtual browser'.\n\n`@cryb/portal` connect to `@cryb/portals` over WS to send and recieve updates like controller events and health updates.\n\n### Status\n\n`@cryb/portal` has been actively developed internally since September 2019, and is now open source as of October 2019.\n\n## Codebase\n\nThe codebase for `@cryb/portal` is written in JavaScript, utilising TypeScript and Node.js.\n\n### Code Style\n\nWe ask that you follow our [code style guidelines](https://github.com/crybapp/library/blob/master/code-style/STYLE.md) when contributing to this repository.\n\nWe use TSLint in order to lint our code. Run `yarn lint` before committing any code to ensure it's clean.\n\n*Note: while we have most rules covered in our `tslint.json` config, it's good practice to familarise yourself with our code style guidelines*\n\n### Folder Structure\n\n```\ncryb/portal/\n└──┐ src # The core source code\n   ├── browser # Class used to start services on the VM, such as Chromium and ffmpeg\n   ├── clients # Our Express.js setup and WebSocket setup\n   ├── config # Services such as queue management, etc\n   └── utils # Helper methods\n```\n\n### First time setup\n\nFirst, clone the `@cryb/portal` repository locally:\n\n```\ngit clone https://github.com/crybapp/portal.git\n```\n\n#### Installation\n\nThe following services need to be installed for `@cryb/portal` to function:\n\n* `@cryb/portals`\n* `@cryb/aperture` or Janus WebRTC Server\n\nWe recommend that you run the following services alongside `@cryb/portal`, but it's not required.\n\n* `@cryb/api`\n* `@cryb/web`\n* `@cryb/aperture` or Janus WebRTC Server\n\nYou also need to install the required dependencies by running `yarn`\n\nEnsure that `.env.example` is either copied and renamed to `.env`, or is simply renamed to `.env`.\n\nIn this file, you'll need some values. Documentation is available in the `.env.example` file.\n\n### Running the app locally\n\n#### Background Services\n\nMake sure `@cryb/portals` is running on port 5000 and that you have setup `@cryb/aperture` or Janus WebRTC Server.\n\n#### Starting @cryb/portal\n\nWe recommend that you use a service like [Docker](https://docker.com) to start an instance of `@cryb/portal`.\n\nTo run `@cryb/portal` in development mode on Docker, run `yarn docker:dev`.\n\nUse `yarn docker:build` to build an image for deployment in production.\n\n## Questions / Issues\n\nIf you have an issues with `@cryb/portal`, please either open a GitHub issue, contact a maintainer or join the [Cryb Discord Server](https://discord.gg/xdhEgD5) and ask in `#tech-support`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcrybapp%2Fportal.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcrybapp%2Fportal?ref=badge_large)\n","funding_links":["https://patreon.com/cryb"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrybapp%2Fportal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrybapp%2Fportal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrybapp%2Fportal/lists"}