{"id":21489219,"url":"https://github.com/alpkeskin/rota","last_synced_at":"2025-07-07T05:02:50.224Z","repository":{"id":248381963,"uuid":"809296367","full_name":"alpkeskin/rota","owner":"alpkeskin","description":"A high-performance proxy rotation engine with automated IP management and real-time health monitoring","archived":false,"fork":false,"pushed_at":"2025-04-07T13:06:21.000Z","size":178,"stargazers_count":89,"open_issues_count":2,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-20T15:06:28.740Z","etag":null,"topics":["golang","http","http-proxy","ip-rotation","proxy","proxy-checker","proxy-list","proxy-rotator","proxy-server","rate-limiting","rotating-proxy","scraping","socks5","socks5-proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","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/alpkeskin.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":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["alpkeskin"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2024-06-02T09:40:07.000Z","updated_at":"2025-05-20T14:56:54.000Z","dependencies_parsed_at":"2024-07-14T14:56:46.356Z","dependency_job_id":"fae982f4-7189-4772-af0b-d458fd752db3","html_url":"https://github.com/alpkeskin/rota","commit_stats":null,"previous_names":["alpkeskin/rota"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/alpkeskin/rota","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpkeskin%2Frota","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpkeskin%2Frota/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpkeskin%2Frota/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpkeskin%2Frota/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alpkeskin","download_url":"https://codeload.github.com/alpkeskin/rota/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpkeskin%2Frota/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264016713,"owners_count":23544623,"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":["golang","http","http-proxy","ip-rotation","proxy","proxy-checker","proxy-list","proxy-rotator","proxy-server","rate-limiting","rotating-proxy","scraping","socks5","socks5-proxy"],"created_at":"2024-11-23T14:15:28.722Z","updated_at":"2025-07-07T05:02:50.210Z","avatar_url":"https://github.com/alpkeskin.png","language":"Go","funding_links":["https://github.com/sponsors/alpkeskin"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\" style=\"margin-bottom: 20px;\"\u003e\n  \u003cimg src=\"static/rota.png\" alt=\"rota\" width=\"150px\"\u003e\n  \u003ch1 align=\"center\"\u003e\n  Rota - Open Source Proxy Rotator\n  \u003c/h1\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://golang.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/made%20with-Go-brightgreen\"\u003e\u003c/a\u003e\n\u003ca href=\"https://goreportcard.com/badge/github.com/alpkeskin/rota\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/alpkeskin/rota\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/alpkeskin/rota/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/alpkeskin/rota\"\u003e\u003c/a\u003e\n\u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/badge/platform-osx%2Flinux%2Fwindows-green\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#key-highlights\"\u003eKey Highlights\u003c/a\u003e •\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e •\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#api\"\u003eAPI\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"#what-is-next\"\u003eWhat's Next\u003c/a\u003e\n\u003c/p\u003e\n\n**Rota** is a lightning-fast, self-hosted proxy rotation powerhouse that revolutionizes how you manage and rotate proxies. Built with performance at its core, this robust tool handles thousands of requests per second while seamlessly rotating IPs to maintain your anonymity. Whether you're conducting intensive web scraping operations, performing security research, or need reliable proxy management, Rota delivers enterprise-grade proxy rotation capabilities in an open-source package.\n\n# Key Highlights\n- 🚀 Self-hosted solution with complete control over your proxy infrastructure\n- ⚡ Blazing-fast performance optimized for high-throughput operations\n- 🔄 Advanced proxy rotation with intelligent IP management (random, roundrobin least_conn, time_based)\n- 🤖 Automatic proxy pool management (real-time file monitoring and automatic removal of unhealthy proxies)\n- 🌍 Supports HTTP, SOCKS v4(A) \u0026 v5 Protocols\n- ✅ Built-in proxy checker to maintain a healthy proxy pool\n- 🔒 Rate limiting to prevent abuse\n- 🌐 Perfect companion for web scraping and data collection projects\n- 🔍 Cross-platform compatibility (Windows, Linux, Mac, Raspberry Pi)\n- 🔗 Easy integration with upstream proxies (e.g., *Burp Suite*) and proxy chains (e.g., *OWASP ZAP*)\n\n# Installation\n\n```sh\ngo install -v github.com/alpkeskin/rota/cmd/rota@latest\n```\n\n## Docker\n\n```sh\ndocker pull ghcr.io/alpkeskin/rota:latest\n```\n\n### Docker Run\n\n```sh\ndocker run \\           \n  --name rota-proxy \\\n  -p 8080:8080 \\\n  -p 8081:8081 \\\n  -v \"$(pwd)/config.yml:/etc/rota/config.yml\" \\\n  -v \"$(pwd)/proxies.txt:/etc/rota/proxies.txt\" \\\n  rota:latest --config /etc/rota/config.yml\n```\nnote: If API is not enabled, dont use `-p 8081:8081`\n\n# Configuration\n\nExample configuration file can be found in [config.yml](config.yml)\n\n* `proxy_file`: Path to the proxy file\n* `file_watch`: Watch for file changes and reload proxies\n* `proxy`: Proxy configurations\n  - `host`: Proxy server host, leaving it empty will bind to all network interfaces\n  - `port`: Proxy server port\n  - `authentication`: Authentication configurations\n    - `enabled`: Enable basic authentication\n    - `username`: Username\n    - `password`: Password\n  - `rotation`: Rotation configurations\n    - `method`: Rotation method (random, roundrobin, least_conn, time_based)\n    - `time_based`: Time-based rotation configurations (only if method is time_based)\n      - `interval`: Interval in seconds\n    - `remove_unhealthy`: Remove unhealthy proxies from rotation\n    - `fallback`: Recommended for continuous operation in case of proxy failures\n    - `fallback_max_retries`: Number of retries for fallback. If this is reached, the response will be returned \"bad gateway\"\n    - `follow_redirect`: Follow HTTP redirection\n    - `timeout`: Timeout for proxy requests\n    - `retries`: Number of retries to get a healthy proxy\n  - `rate_limit`: Rate limiting configurations\n    - `enabled`: Enable rate limiting\n    - `interval`: Interval in seconds\n    - `max_requests`: Maximum number of requests per interval\n* `api`: API configurations\n  - `enabled`: Enable API endpoints\n  - `port`: API server port\n* `healthcheck`: Healthcheck configurations\n  - `output`: Output method (file, stdout)\n  - `file`: Path to the healthcheck file\n  - `timeout`: Timeout for healthcheck requests\n  - `workers`: Number of workers to check proxies\n  - `url`: URL to check proxies\n  - `status`: Status code to check proxies\n  - `headers`: Headers to check proxies\n* `logging`: Logging configurations\n  - `stdout`: Log to stdout\n  - `file`: Path to the log file\n  - `level`: Log level (debug, info, warn, error, fatal)\n\n### Proxies file pattern\n\nProxies file should be in the following format:\n```\nscheme://ip:port or scheme://username:password@ip:port\n\nExamples:\nsocks5://192.111.137.37:18762\nhttp://192.111.137.37:9911\nhttps://192.111.137.37:9911\nsocks5://admin:admin@192.111.137.37:18762\nhttp://admin:admin@192.111.137.37:8080\nhttps://admin:admin@192.111.137.37:8081\n```\n\n# Quick Start\n\n```sh\nrota --config config.yml\n```\nDefault config file path is `config.yml`. **So you can use `rota` without any arguments.** That's it! 🎉\n\n### Proxy Checker\n```sh\nrota --config config.yml --check\n```\n\n## API\n\nFor now, API is enabled by default. You can disabled it by setting `api.enabled` to `false` in your config file.\n\nEndpoints:\n- `/healthz`: Health check endpoint to monitor the service status\n- `/proxies`: Returns a list of all currently available proxies in the pool, including their status and performance metrics\n- `/metrics`: Provides detailed system metrics\n- `/history`: Shows a chronological log of proxy rotations, requests, and any errors encountered during operation\n\n# Contributing\n\nContributions are welcome! Please feel free to submit a PR. If you have any questions, please feel free to open an issue or contact me on [LinkedIn](https://www.linkedin.com/in/alpkeskin/).\n**Please ensure your pull requests are meaningful and add value to the project. Pull requests that do not contribute significant improvements or fixes will not be accepted.**\n\n\n##\n\u003e Thanks for your interest in Rota. I hope you enjoy using it.\n\u003e\n\u003e [LinkedIn](https://www.linkedin.com/in/alpkeskin)\n\u003e [Twitter](https://x.com/alpkeskindev)\n\u003e [GitHub](https://github.com/alpkeskin)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpkeskin%2Frota","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falpkeskin%2Frota","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpkeskin%2Frota/lists"}