{"id":22210635,"url":"https://github.com/giovanni-iannaccone/webweaver","last_synced_at":"2025-08-03T15:34:50.709Z","repository":{"id":264370376,"uuid":"839410497","full_name":"giovanni-iannaccone/WebWeaver","owner":"giovanni-iannaccone","description":"High-performance load balancer ⚖","archived":false,"fork":false,"pushed_at":"2025-01-06T17:49:12.000Z","size":8525,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T05:15:32.647Z","etag":null,"topics":["collaborate","go","golang","httpproxy","load-balancer","network","web"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/giovanni-iannaccone.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-07T14:51:24.000Z","updated_at":"2025-01-06T17:49:15.000Z","dependencies_parsed_at":"2024-12-09T16:26:26.737Z","dependency_job_id":"192262dd-4538-4410-88ff-75e9f49c7e9b","html_url":"https://github.com/giovanni-iannaccone/WebWeaver","commit_stats":null,"previous_names":["giovanni-iannaccone/webweaver"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giovanni-iannaccone%2FWebWeaver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giovanni-iannaccone%2FWebWeaver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giovanni-iannaccone%2FWebWeaver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giovanni-iannaccone%2FWebWeaver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/giovanni-iannaccone","download_url":"https://codeload.github.com/giovanni-iannaccone/WebWeaver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245407760,"owners_count":20610232,"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":["collaborate","go","golang","httpproxy","load-balancer","network","web"],"created_at":"2024-12-02T20:14:49.856Z","updated_at":"2025-08-03T15:34:50.697Z","avatar_url":"https://github.com/giovanni-iannaccone.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"assets/logo.png\" alt=\"logo\" title=\"WebWeaver\"\u003e\u003c/img\u003e\n\n![License](https://img.shields.io/github/license/giovanni-iannaccone/WebWeaver)\n[![Number of GitHub issues that are open](https://img.shields.io/github/issues/giovanni-iannaccone/WebWeaver)](https://github.com/giovanni-iannaccone/WebWeaver/issues)\n![Number of GitHub closed issues](https://img.shields.io/github/issues-closed/giovanni-iannaccone/WebWeaver)\n![Number of GitHub pull requests that are open](https://img.shields.io/github/issues-pr-raw/giovanni-iannaccone/WebWeaver)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/m/giovanni-iannaccone/WebWeaver)\n![Number of GitHub contributors](https://img.shields.io/github/contributors/giovanni-iannaccone/WebWeaver)\n[![Number of GitHub stars](https://img.shields.io/github/stars/giovanni-iannaccone/WebWeaver)](https://github.com/giovanni-iannaccone/WebWeaver/stargazers)\n\n# 🕸 WebWeaver\n\nWebWeaver is a load balancer written in Go, designed to handle load balancing efficiently and at scale. With a modular architecture and simple configuration, WebWeaver is ideal for modern deployments and high-availability environments.\n\n## 📚 Features\n\n- **Automatic Failover**: Manages automatic failover of unavailable backend servers.\n- **Dynamic Configuration**: Supports real-time configuration changes without needing a restart.\n- **Fast**: Using the \u003ca href=\"https://github.com/valyala/fasthttp\"\u003efasthttp\u003c/a\u003e library, WebWeaver can quickly send packages across your network\n- **Load Balancing**: Distributes requests across backend servers using various strategies, including Round-Robin, Random and IP Hash.\n- **Monitoring and Logging**: Provides detailed statistics and request logging for in-depth monitoring.\n- **Security**: Includes configuration options for protection against common threats and connection management.\n- **SSL/TLS certificates**: With \u003ca href=\"https://letsencrypt.org/\"\u003eLet's encrypt\u003c/a\u003e your domain will automatically have a free SSL/TLS certificate\n- **Sticky sessions**: Redirect the same user to the same server using the ip hash algorithm\n- **Web UI**: Thanks to WebSocket, we can easily render an auto-updating dashboard that provides real-time statistics about your servers\n\n## 👨‍💻 Installation\n\n### 📜  Prerequisites\n\n- **Go 1.25+**: WebWeaver is written in Go and requires a compatible version of Go for compilation.\n\n### 🧪 Installation Steps\n1. **Clone the Repository**\n\n    ```\n    git clone https://github.com/giovanni-iannaccone/WebWeaver\n    ```\n    ```sh\n    cd WebWeaver\n    ```\n\n2. **Run the Project**\n\n    - Run without compiling\n\n    ```go\n    go run ./cmd/main.go\n    ```\n\n    - Compile with golang\n    \n    ```go\n    go build ./cmd\n    ```\n\n    - Compile using makefile\n\n    ```\n    make WebWeaver\n    ```\n\n    - Run in docker\n\n    ```\n    docker build -t webweaver .\n    ```\n    ```\n    docker run -d -p 9000:9000 -p 9001:9001 --name webweaver webweaver\n    ```\n\n## ⚙️ Configuration\n\nWebWeaver configuration is managed through a JSON file. Here's an example configuration:\n\n```json\n{\n    \"algorithm\": \"rnd\",\n    \"host\": \"localhost:9000\",\n    \"dashboard\": 9001,\n\n    \"servers\": [\n        \"localhost:80\",\n        \"localhost:81\"\n    ],\n    \n    \"healthCheck\": 10,\n    \"logs\": \"./LB_LOG.txt\",\n\n    \"prohibited\": [\n        \"/.env\",\n        \"/secret/\"\n    ]\n}\n```\n\n- **algorithm**: rr for Round Robin, rnd for random choice, iph for ip hash\n- **host**: localhost, an ip or your domain\n- **dashboard**: the port dashboard will run on  \n- **servers**: write here your servers addresses and ports\n- **healthCheck**:  seconds of the healthCheck timeout, put less than or 0 if you don't want the server to do any\n- **logs**: file where to save logs, put nothing between quotes if you don't want to save logs \n- **prohibited**: file you don't want the server to show\n\n\n## 🎮 Usage\n\n\u003cimg src=\"assets/network.png\" alt=\"network scheme\" title=\"network scheme\"\u003e\n\n1. Write your configurations in the configs/configs.json file or give it as an argument with ```--config``` or  ```-c``` flag\n2. Run the main file with go\n3. WebWeaver will automatically synchronize with your servers and start sending them requests\n4. Open your browser and visit localhost on the dashboard port you specified in the configuration to see your server's status.\n\n## 🔭 Learn\nLet's encrypt: https://letsencrypt.org/docs/ \u003cbr\u003e\nGolang: https://go.dev/doc/ \u003cbr\u003e\nLoad Balancing: https://www.cloudflare.com/learning/performance/what-is-load-balancing/\n\n## 🧩 Contributing\nWe welcome contributing. See CONTRIBUTING.md file for details.\n\nPlease note that this project is released with a \u003ca href=\"CODE_OF_CONDUCT.md\"\u003eContributor Code of Conduct\u003c/a\u003e. By participating in this project, you agree to abide by its terms.\n\n## ⚖️ License\nThis project is licensed under the GPL-3.0 License. See the LICENSE file for details.\n\n## ⚔️ Contact\n- For any inquiries or support, please contact \u003ca href=\"mailto:iannacconegiovanni444@gmail.com\"\u003e iannacconegiovanni444@gmail.com \u003c/a\u003e.\n- Visit my site for more informations about me and my work \u003ca href=\"https://giovanni-iannaccone.gith\nub.io\" target=”_blank” rel=\"noopener noreferrer\"\u003e https://giovanni-iannaccone.github.io \u003c/a\u003e\n\n# 📸 Screenshots\n\u003cimg src=\"assets/dashboard.png\" alt=\"Dashboard screenshot\" title=\"Dashboard screenshot\"\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiovanni-iannaccone%2Fwebweaver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgiovanni-iannaccone%2Fwebweaver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiovanni-iannaccone%2Fwebweaver/lists"}