{"id":20395497,"url":"https://github.com/shamanec/gads","last_synced_at":"2026-04-10T06:21:23.657Z","repository":{"id":38451649,"uuid":"443550002","full_name":"shamanec/GADS","owner":"shamanec","description":"Simple mobile device farm for remote control of devices and Appium test execution on iOS/Android","archived":false,"fork":false,"pushed_at":"2026-02-24T06:12:37.000Z","size":124291,"stargazers_count":235,"open_issues_count":10,"forks_count":41,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-02-24T12:45:05.384Z","etag":null,"topics":["android","appium","appium-android","appium-ios","device-farm","go","ios","linux","macos","remote-control","windows"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shamanec.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":"2022-01-01T14:00:03.000Z","updated_at":"2026-02-23T11:20:37.000Z","dependencies_parsed_at":"2026-01-26T17:04:28.359Z","dependency_job_id":null,"html_url":"https://github.com/shamanec/GADS","commit_stats":null,"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/shamanec/GADS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamanec%2FGADS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamanec%2FGADS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamanec%2FGADS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamanec%2FGADS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shamanec","download_url":"https://codeload.github.com/shamanec/GADS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shamanec%2FGADS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30167053,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T07:56:45.623Z","status":"ssl_error","status_checked_at":"2026-03-06T07:55:55.621Z","response_time":250,"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":["android","appium","appium-android","appium-ios","device-farm","go","ios","linux","macos","remote-control","windows"],"created_at":"2024-11-15T03:57:41.267Z","updated_at":"2026-04-10T06:21:23.352Z","avatar_url":"https://github.com/shamanec.png","language":"Go","readme":"\u003c!--\n  Title: GADS - Open Source Device Farm\n  Description: Self-hosted device farm and test automation platform for iOS, Android, and Smart TVs (Samsung Tizen OS, LG WebOS). Open source alternative to AWS Device Farm and Firebase Test Lab with Appium integration.\n  Author: shamanec\n  Tags: device-farm, mobile-testing, ios-testing, android-testing, appium, test-automation, qa-tools, continuous-testing, mobile-device-management, selenium-grid\n  --\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/docs/gads-logo-light.png\" alt=\"GADS - Open Source Mobile Device Farm Platform - Dark Theme Logo\"\u003e\n    \u003cimg src=\"/docs/gads-logo.png\" width=\"256\" alt=\"GADS - Open Source Mobile Device Farm Platform for iOS and Android Automated Testing\"/\u003e\n  \u003c/picture\u003e\n\n  \u003ch1\u003eGADS - Device Farm for Mobile \u0026 Smart TV Testing\u003c/h1\u003e\n\n[![GitHub Stars](https://img.shields.io/github/stars/shamanec/GADS?style=social)](https://github.com/shamanec/GADS/stargazers)\n[![GitHub Release](https://img.shields.io/github/v/release/shamanec/GADS)](https://github.com/shamanec/GADS/releases)\n[![GitHub Downloads](https://img.shields.io/github/downloads/shamanec/GADS/total)](https://github.com/shamanec/GADS/releases)\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![Discord](https://dcbadge.limes.pink/api/server/5amWvknKQd?style=flat\u0026theme=clean\u0026compact=true)](https://discord.gg/5amWvknKQd)\n\n🚀 **Self-Hosted Device Farm \u0026 Test Automation Platform** - Alternative to AWS Device Farm and Firebase Test Lab for Mobile \u0026 Smart TV Testing\n\n\u003c/div\u003e\n\n## 🎯 What is GADS?\n\n**GADS** is a free, open-source device farm platform that enables **remote device control** and **Appium test execution** on mobile devices (iOS/Android) and smart TVs (currently supporting Samsung Tizen OS and LG WebOS). Perfect for QA teams, mobile developers, and organizations looking for a self-hosted alternative to expensive cloud testing services like AWS Device Farm and Firebase Test Lab.\n\nThe platform architecture consists of two main components:\n\n- **Hub**: A web interface for remote device control and provider management.\n- **Provider**: Handles device setup and makes them available for remote access.\n\n### Why Choose GADS?\n\n- 💰 **Free**: Self-hosted alternative to AWS Device Farm and Firebase Test Lab\n- 📱 **Cross-Platform**: Full support for iOS and Android devices, plus automated testing for Smart TVs (Samsung Tizen OS, LG WebOS)\n- 🎮 **Remote Control**: Real-time device control and testing capabilities\n- 🎮 **Local debugging - Android only**: [Connect](./docs/adb-client.md) remotely controlled Android device to your local `adb` instance for development and debugging\n- 🔌 **Appium Compatible**: Works with industry-standard Appium testing framework\n- 🔑 **Flexible Authentication**: Support for multiple JWT issuers with origin-based keys\n- 🛠 **Easy Setup**: Simple installation and configuration process\n\n## ✨ Key Features\n\n### Hub Features 🎯\n\n- 🔐 **Authentication System**\n  - User login with session management\n  - Admin user management\n  - Origin-based secret key management\n  - Multiple JWT provider support\n  - OAuth2 client credentials for Appium (requires `gads:clientSecret` capability)\n  - [Detailed Secret Keys Documentation](./docs/secret-keys.md)\n  - [Appium Credentials Documentation](./docs/appium-credentials.md)\n- 📱 **Device Control**\n  - Real-time video streaming (MJPEG/WebRTC)\n  - Remote interactions: tap, swipe, text input, get clipboard\n  - Keyboard typing\n  - App installation/uninstallation\n  - High-quality screenshots\n  - Device reservation system\n  - Android devices remote debugging over `adb` [adb-client](./docs/adb-client.md)\n- 🔄 **Backend Capabilities**\n  - Web interface serving\n  - Provider communication proxy\n  - Experimental **Selenium Grid** replacement\n- 👥 **Workspace Management**\n  - User access control per workspace\n  - Default workspace for legacy support\n  - [Detailed Workspace Documentation](./docs/workspaces.md)\n\n### Provider Features 🔌\n\n- 🛠️ **Easy Setup**\n  - UI-based device management\n- 🤖 **Automated Device Provisioning**\n  - Per-device Appium server configuration (optional)\n- 📡 **Remote Control**\n  - iOS streaming via [WebDriverAgent](https://github.com/appium/WebDriverAgent)\n  - iOS WebRTC video stream via [WebDriverAgent](https://github.com/appium/WebDriverAgent) through a [ffmpeg pipeline](https://www.ffmpeg.org/) (Experimental)- `ffmpeg` should be installed and available in PATH\n  - iOS WebRTC video stream via Broadcast Extension (Experimental) - [notes](./docs/provider.md#prepare-broadcast-extension-for-webrtc-video---optional)\n  - Android MJPEG video streaming\n  - Android WebRTC video stream (Experimental) - [notes](./docs/provider.md#android-webrtc-video---experimental)\n  - Non-Appium based interaction\n  - Keyboard typing (highly performant on Android, usable on iOS)\n- 🧪 **Testing Integration**\n  - Individual Appium server endpoints (optional)\n  - Optional Selenium Grid 4 node registration\n  - Automated testing for Smart TVs - currently supports Samsung Tizen OS and LG WebOS (no remote control, testing only)\n\n## 💻 Platform Support\n\n| OS          | Android Support | iOS Support | Smart TV Support     | Notes                                                                         |\n| ----------- | --------------- | ----------- | -------------------- | ----------------------------------------------------------------------------- |\n| **macOS**   | ✅              | ✅          | ✅ (automation only) | Full support for mobile, Smart TVs support only automated testing             |\n| **Linux**   | ✅              | ⚠️          | ✅ (automation only) | Limited iOS support due to Xcode dependency. Currently supports Tizen \u0026 WebOS |\n| **Windows** | ✅              | ⚠️          | ✅ (automation only) | Limited iOS support due to Xcode dependency. Currently supports Tizen \u0026 WebOS |\n\n**Important**: Smart TV support (Tizen OS and WebOS) is focused on **automated testing only**. Manual interaction and real-time device control available for mobile devices are not supported for smart TVs.\n\n## License\n\nThis repository is **dual-licensed**:\n\n- **Open Source Components** (AGPL-3.0):\n  All source code in this repository, excluding explicitly listed proprietary components, is licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](https://www.gnu.org/licenses/agpl-3.0.html).\n\n- **Proprietary Components**:\n  The `hub-ui` directory is licensed under a separate proprietary license. See [`PROPRIETARY-LICENSE.txt`](./PROPRIETARY-LICENSE.txt) for more information.\n\nPlease refer to the [`LICENSE-OVERVIEW`](./LICENSE-OVERVIEW.txt) file for a detailed overview.\n\n### Using GADS\n\nGADS, including both open source and obfuscated proprietary components, is freely available for use under the terms specified in the license. Users can utilize all functionalities provided by GADS, including those powered by the proprietary components.\n\n### Important Notes on Proprietary Components\n\n- While the proprietary components are included in the distribution, their source code is not available for viewing, modification, or redistribution.\n- These components are provided in an obfuscated form to protect our intellectual property.\n- Users are granted the right to use these components as part of GADS, but not to decompile, reverse engineer, or attempt to extract the original source code.\n\n### Contributions and Modifications\n\n- Contributions and modifications to the open-source portions of GADS are welcome.\n- Please note that it is not possible to contribute to or modify the proprietary components due to their obfuscated nature.\n\n## 🚀 Getting Started\n\n\u003e ### **Prerequisites**\n\u003e\n\u003e Before getting started, make sure you have the following:\n\u003e\n\u003e - A **MongoDB** instance (v6.0 recommended)\n\u003e - Network connectivity between Hub, Providers, MongoDB, and Selenium Grid\n\u003e\n\u003e ---\n\n### ⚡ Quick Start\n\n#### Option 1: Download the latest binary\n\n1. Go to the [releases page](https://github.com/shamanec/GADS/releases) and download the latest binary for your platform.\n\n#### Option 2: Build from source for non-UI related development\n\n**IMPORTANT** You can freely use the Go code to your ends or provide new features/bug fixes on mainstream project but any changes to the UI should be requested from the core team.\n\n```bash\n# Clone the repository\ngit clone https://github.com/shamanec/GADS\n\n# Build the application without UI\ncd ../..\ngo build .\n```\n\n#### Option 3: Build from source for UI related development\n\n**IMPORTANT** You can freely use the Go code to your ends or provide new features/bug fixes on mainstream project but any changes to the UI should be requested from the core team.\n\n1. Clone the repository\n\n```bash\ngit clone https://github.com/shamanec/GADS\n```\n\n2. Download the prebuilt UI files zip from the latest [release](https://github.com/shamanec/GADS/releases)\n3. Unzip the file from step into your GADS folder in a new folder named `hub-ui`, your folder structure should look like `../GADS/hub-ui/build/*`\n4. Build the application\n\n```bash\ncd ../..\ngo build -tags ui .\n```\n\n\u003e **Note**: Optionally before building you can update the docs.go (OpenAPI spec) by running `swag init -g hub/hub.go -o docs`\n\n### 🛠️ Common setup\n\n#### 🌱 MongoDB\n\nThe project uses MongoDB for storing logs and for synchronization of some data between hub and providers.\nYou can either run MongoDB in a docker container:\n\n- You need to have Docker(Docker Desktop on macOS, Windows) installed.\n- Execute `docker run -d --restart=always --name mongodb -p 27017:27017 mongo:6.0`. This will pull the official MongoDB 6.0 image from Docker Hub and start a container binding ports `27017` for the MongoDB instance.\n- You can use MongoDB Compass or another tool to access the db if needed.\n\nor\n\n- Start MongoDB instance in the way you prefer\n\n#### ⚙️ Hub setup\n\nFor detailed instructions on setting up the Hub, refer to the [Hub Setup Docs](./docs/hub.md)\n\n#### 📱 Provider setup\n\nFor detailed instructions on setting up the Provider, refer to the [Provider Setup Docs.](./docs/provider.md)\n\n## Running GADS as a System Service\n\nTo ensure that GADS runs continuously and can be managed easily, it is recommended to execute it as a service on your operating system. Running GADS as a service allows it to start automatically on boot, restart on failure, and be managed through standard service commands.\n\n### 🐧 Linux\n\nFor detailed instructions on how to create a service for Linux using systemd, please refer to the [Linux Service Documentation](./docs/linux-service.md).\n\n### 🖥️ Windows\n\nFor detailed instructions on how to create a service for Windows using WinSW, please refer to the [Windows Service Documentation](./docs/windows-service.md).\n\n### 🍏 macOS\n\nFor detailed instructions on how to create a service for macOS using launchd, please refer to the [macOS Service Documentation](./docs/macos-service.md).\n\n## ❓ FAQ\n\nThe **FAQ** (Frequently Asked Questions) section has been created to provide quick answers to the most common questions about GADS. If you have any questions regarding installation, setup, or functionality, check out the answers in our documentation.\n\nFor more details, refer to the [full FAQ](./docs/faq.md).\n\n## 🙏 Thanks\n\n|                                                  | About                                                                                                                                                      |\n| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [go-ios](https://github.com/danielpaulus/go-ios) | Many thanks for creating this CLI tool to communicate with iOS devices, perfect for installing/reinstalling and running WebDriverAgentRunner without Xcode |\n| [Appium](https://github.com/appium)              | It would be impossible to control the devices remotely without Appium for the control and WebDriverAgent for the iOS screen stream, kudos!                 |\n\n## 🎥 Videos\n\n#### Start hub\n\nhttps://github.com/user-attachments/assets/7a6dab5a-52d1-4c48-882d-48b67e180c89\n\n#### Add provider configuration\n\nhttps://github.com/user-attachments/assets/07c94ecf-217e-4185-9465-8b8054ddef7e\n\n#### Add devices and start provider\n\nhttps://github.com/user-attachments/assets/a1b323da-0169-463e-9a37-b0364fc52480\n\n#### Run Appium tests in parallel with TestNG\n\nhttps://github.com/user-attachments/assets/cb2da413-6a72-4ead-9433-c4d2b41d5f4b\n\n#### Remote control\n\nhttps://github.com/user-attachments/assets/2d6b29fc-3e83-46be-88c4-d7a563205975\n\n## 💡 Use Cases\n\n### Mobile Testing 📱\n\n- **Mobile App Testing**: Automate testing across multiple real iOS and Android devices\n- **Manual QA**: Remote access to physical devices for manual testing and debugging\n- **Cross-Browser Testing**: Test web applications across multiple mobile browsers\n- **Device Lab Management**: Centralized management of your organization's mobile devices\n\n### Smart TV Testing 📺\n\n- **Smart TV App Testing**: Automated testing for TV applications\n- **Currently Supported**: Samsung Tizen OS and LG WebOS\n- **TV-Specific Testing**: Validate TV app functionality, performance, and compatibility\n- **Remote-First Testing**: Test TV apps without physical access to devices\n\n## 📊 Project Status\n\n- **Project Stage**: Active Development\n- **Contributors**: [View Contributors](https://github.com/shamanec/GADS/graphs/contributors)\n\n## 🔍 Keywords\n\n`device-farm`, `mobile-testing`, `ios-testing`, `android-testing`, `appium`, `test-automation`, `qa-tools`, `continuous-testing`, `mobile-device-management`, `selenium-grid`, `remote-device-control`, `mobile-qa`, `tizen-testing`, `smart-tv-testing`, `webos-testing`, `lg-tv-testing`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshamanec%2Fgads","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshamanec%2Fgads","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshamanec%2Fgads/lists"}