{"id":20910920,"url":"https://github.com/wufe/polo","last_synced_at":"2026-03-06T20:02:18.053Z","repository":{"id":42886524,"uuid":"331742648","full_name":"wufe/Polo","owner":"wufe","description":"Git-based reverse proxy for spawning staging environments","archived":false,"fork":false,"pushed_at":"2024-01-19T21:27:40.000Z","size":1630,"stargazers_count":16,"open_issues_count":11,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-30T03:39:37.079Z","etag":null,"topics":["branches","development","git","qa","reverse-proxy","staging"],"latest_commit_sha":null,"homepage":"https://polo.bembi.dev","language":"Go","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/wufe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2021-01-21T20:12:08.000Z","updated_at":"2023-06-06T14:39:26.000Z","dependencies_parsed_at":"2024-01-17T22:40:13.392Z","dependency_job_id":"3a8de6d6-ca09-4bfa-8f3d-310e370f8e7a","html_url":"https://github.com/wufe/Polo","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/wufe/Polo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wufe%2FPolo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wufe%2FPolo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wufe%2FPolo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wufe%2FPolo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wufe","download_url":"https://codeload.github.com/wufe/Polo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wufe%2FPolo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30195544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","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":["branches","development","git","qa","reverse-proxy","staging"],"created_at":"2024-11-18T14:18:27.622Z","updated_at":"2026-03-06T20:02:18.001Z","avatar_url":"https://github.com/wufe.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/Wufe/Polo/main/.assets/logo.svg\" width=\"50%\" /\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ch1 align=\"center\"\u003ePolo\u003c/h1\u003e\n    \u003cp align=\"center\"\u003eServe your application development branches\u003c/p\u003e\n    \u003cbr /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/Wufe/Polo/main/.assets/polo.jpg\" /\u003e\n    \u003cbr /\u003e\u003cbr /\u003e\n\u003c/p\u003e\n\n[![CodeQL](https://github.com/Wufe/Polo/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/Wufe/Polo/actions/workflows/codeql-analysis.yml)\n[![Tests](https://github.com/Wufe/Polo/actions/workflows/go.yml/badge.svg)](https://github.com/Wufe/Polo/actions/workflows/go.yml)\n\n## What is Polo  \n\nPolo is a **git-based reverse proxy**.\n\nAllows you to create a web server which provides the ability to serve your web application in a specific time/branch/tag in history, using git.  \n\nYou just need to specify the git commit or the branch. A new session will be created for you to navigate into.\n\nAlthough it provides HTTPS support, it is not intended to be used in production.  \n\n***\n\n## Use cases\n\nIt can be used for serving your staging / QA environment.  \n\nInstead of having one application on a single host, you can let the user select which git branch to serve.  \n\nPolo will then start the application and provide a reverse proxy feature for navigation.\n\n***\n\n## Getting started\n\n- Download Polo from the release page  \n\n- Create one or more configuration files for your application and place them next to the application executable  \n    There's a minimal example configuration file called [testserver.yml](./testserver.yml) which contains instructions to start a little demo project.\n\n- Start Polo from command line\n\nMore info about the installation process and the configuration file in [the documentation](https://polo.bembi.dev).\n\n***\n\n## Configuration\n\nYou must provide at least one yaml configuration file describing your application remote and how to build and run it.  \nThe configuration file must be put next to the Polo executable file.  \nYou can find an example of a configuration file with all the options in the folder *examples*.  \n\n***\n\n## State diagram\n\nThis diagram represents the states walked since the request of a session to its destruction.\n\n[![](https://mermaid.ink/svg/eyJjb2RlIjoic3RhdGVEaWFncmFtLXYyXG4gICAgcmV0cnk6IFJldHJ5IGxvZ2ljXG4gICAgbm90ZSByaWdodCBvZiByZXRyeVxuICAgICAgICBUaGVyZSdzIGFsd2F5cyBhIGxpbWl0XG4gICAgICAgIGZvciByZXRyaWVzIGNvdW50XG4gICAgZW5kIG5vdGVcblxuICAgIFsqXSAtLT4gYnVpbGQ6IFVzZXIgcmVxdWVzdGVkIGEgc2Vzc2lvblxuICAgIHN0YXRlIGJ1aWxkIHtcbiAgICAgICAgWypdIC0tPiB2YWxpZGF0ZV9yZXF1ZXN0XG4gICAgICAgIHZhbGlkYXRlX3JlcXVlc3QgLS0-IHByb3Zpc2lvbl9mb2xkZXJzXG4gICAgICAgIHByb3Zpc2lvbl9mb2xkZXJzIC0tPiBnaXRfY2hlY2tvdXRcbiAgICAgICAgZ2l0X2NoZWNrb3V0IC0tPiBleGVjdXRlX2NvbW1hbmRzXG4gICAgICAgIGV4ZWN1dGVfY29tbWFuZHMgLS0-IHdhcm11cFxuICAgICAgICB3YXJtdXAgLS0-IFsqXVxuICAgIH1cbiAgICBidWlsZCAtLT4gaGVhbHRoY2hlY2sgOiBzdWNjZWVkZWRcbiAgICBcbiAgICBmYWlsOiBGYWlsIHJlYXNvblxuICAgIG5vdGUgcmlnaHQgb2YgZmFpbFxuICAgICAgICBDb21tYW5kIGZhaWx1cmUgL1xuICAgICAgICB0aW1lb3V0IHJlYWNoZWRcbiAgICBlbmQgbm90ZVxuXG4gICAgaGVhbHRoY2hlY2sgLS0-IHN0YXJ0IDogc3VjY2VlZGVkXG4gICAgaGVhbHRoY2hlY2sgLS0-IGJ1aWxkIDogZmFpbGVkIChyZXRyeSlcbiAgICBoZWFsdGhjaGVjayAtLT4gZGVzdHJveSA6IGZhaWxlZFxuXG5cbiAgICBidWlsZCAtLT4gYnVpbGQgOiBmYWlsZWQgKHJldHJ5KVxuICAgIGJ1aWxkIC0tPiBjbGVhbiA6IGZhaWxlZFxuXG4gICAgc3RhcnQgLS0-IHJ1bm5pbmdcbiAgICBub3RlIGxlZnQgb2Ygc3RhcnRcbiAgICAgICAgSGVyZSB0aGUgc2Vzc2lvbiBtYXggYWdlXG4gICAgICAgIHN0YXJ0cyB0byBkZWNyZW1lbnRcbiAgICBlbmQgbm90ZVxuXG4gICAgcnVubmluZyAtLT4gZGVzdHJveSA6IHJlcXVlc3RlZCBraWxsXG5cbiAgICBkZXN0cm95IC0tPiBjbGVhbiA6IGZhaWxlZFxuICAgIGRlc3Ryb3kgLS0-IGNsZWFuIDogc3VjY2VlZGVkXG5cbiAgICBjbGVhbiAtLT4gYnVpbGQgOiBzdGFydHVwIHJldHJ5XG5cbiAgICBjbGVhbiAtLT4gWypdIiwibWVybWFpZCI6eyJ0aGVtZSI6ImJhc2UiLCJ0aGVtZVZhcmlhYmxlcyI6eyJiYWNrZ3JvdW5kIjoiI2Y5ZmFmYiIsInByaW1hcnlDb2xvciI6InRyYW5zcGFyZW50IiwicHJpbWFyeUJvcmRlckNvbG9yIjoiI0NDRCIsInNlY29uZGFyeUNvbG9yIjoiIzAwMCIsImxpbmVDb2xvciI6IiM0NjgyQjQiLCJtYWluQmtnIjoiI2Q4ZGVlOSIsInByaW1hcnlUZXh0Q29sb3IiOiIjMmUzNDQwIiwic2Vjb25kYXJ5VGV4dENvbG9yIjoiIzk5OSIsInRlcnRpYXJ5VGV4dENvbG9yIjoiIzQ3ODJiNCIsIm5vdGVCa2dDb2xvciI6IiM0NjgyQjQiLCJub3RlVGV4dENvbG9yIjoiI2VjZWZmNCIsImZvbnRTaXplIjoiMTRweCIsImZvbnRGYW1pbHkiOiJhcmlhbCJ9LCJ0aGVtZUNTUyI6InJlY3QuaW5uZXIge3k6IDQwO30gLmNsdXN0ZXItbGFiZWw-Zm9yZWlnbk9iamVjdCB7IGhlaWdodDogMzA7IH0gLmNsdXN0ZXItbGFiZWwgLm5vZGVMYWJlbCB7IGxpbmUtaGVpZ2h0OiAzMHB4OyB9IC5ub2RlLnN0YXRlZGlhZ3JhbS1ub3RlID4gcmVjdCB7IHJ4OiA1cHg7IHJ5OiA1cHg7IH0gLm5vZGUuc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7IGZvbnQtc2l6ZTogMTRweDt9In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic3RhdGVEaWFncmFtLXYyXG4gICAgcmV0cnk6IFJldHJ5IGxvZ2ljXG4gICAgbm90ZSByaWdodCBvZiByZXRyeVxuICAgICAgICBUaGVyZSdzIGFsd2F5cyBhIGxpbWl0XG4gICAgICAgIGZvciByZXRyaWVzIGNvdW50XG4gICAgZW5kIG5vdGVcblxuICAgIFsqXSAtLT4gYnVpbGQ6IFVzZXIgcmVxdWVzdGVkIGEgc2Vzc2lvblxuICAgIHN0YXRlIGJ1aWxkIHtcbiAgICAgICAgWypdIC0tPiB2YWxpZGF0ZV9yZXF1ZXN0XG4gICAgICAgIHZhbGlkYXRlX3JlcXVlc3QgLS0-IHByb3Zpc2lvbl9mb2xkZXJzXG4gICAgICAgIHByb3Zpc2lvbl9mb2xkZXJzIC0tPiBnaXRfY2hlY2tvdXRcbiAgICAgICAgZ2l0X2NoZWNrb3V0IC0tPiBleGVjdXRlX2NvbW1hbmRzXG4gICAgICAgIGV4ZWN1dGVfY29tbWFuZHMgLS0-IHdhcm11cFxuICAgICAgICB3YXJtdXAgLS0-IFsqXVxuICAgIH1cbiAgICBidWlsZCAtLT4gaGVhbHRoY2hlY2sgOiBzdWNjZWVkZWRcbiAgICBcbiAgICBmYWlsOiBGYWlsIHJlYXNvblxuICAgIG5vdGUgcmlnaHQgb2YgZmFpbFxuICAgICAgICBDb21tYW5kIGZhaWx1cmUgL1xuICAgICAgICB0aW1lb3V0IHJlYWNoZWRcbiAgICBlbmQgbm90ZVxuXG4gICAgaGVhbHRoY2hlY2sgLS0-IHN0YXJ0IDogc3VjY2VlZGVkXG4gICAgaGVhbHRoY2hlY2sgLS0-IGJ1aWxkIDogZmFpbGVkIChyZXRyeSlcbiAgICBoZWFsdGhjaGVjayAtLT4gZGVzdHJveSA6IGZhaWxlZFxuXG5cbiAgICBidWlsZCAtLT4gYnVpbGQgOiBmYWlsZWQgKHJldHJ5KVxuICAgIGJ1aWxkIC0tPiBjbGVhbiA6IGZhaWxlZFxuXG4gICAgc3RhcnQgLS0-IHJ1bm5pbmdcbiAgICBub3RlIGxlZnQgb2Ygc3RhcnRcbiAgICAgICAgSGVyZSB0aGUgc2Vzc2lvbiBtYXggYWdlXG4gICAgICAgIHN0YXJ0cyB0byBkZWNyZW1lbnRcbiAgICBlbmQgbm90ZVxuXG4gICAgcnVubmluZyAtLT4gZGVzdHJveSA6IHJlcXVlc3RlZCBraWxsXG5cbiAgICBkZXN0cm95IC0tPiBjbGVhbiA6IGZhaWxlZFxuICAgIGRlc3Ryb3kgLS0-IGNsZWFuIDogc3VjY2VlZGVkXG5cbiAgICBjbGVhbiAtLT4gYnVpbGQgOiBzdGFydHVwIHJldHJ5XG5cbiAgICBjbGVhbiAtLT4gWypdIiwibWVybWFpZCI6eyJ0aGVtZSI6ImJhc2UiLCJ0aGVtZVZhcmlhYmxlcyI6eyJiYWNrZ3JvdW5kIjoiI2Y5ZmFmYiIsInByaW1hcnlDb2xvciI6InRyYW5zcGFyZW50IiwicHJpbWFyeUJvcmRlckNvbG9yIjoiI0NDRCIsInNlY29uZGFyeUNvbG9yIjoiIzAwMCIsImxpbmVDb2xvciI6IiM0NjgyQjQiLCJtYWluQmtnIjoiI2Q4ZGVlOSIsInByaW1hcnlUZXh0Q29sb3IiOiIjMmUzNDQwIiwic2Vjb25kYXJ5VGV4dENvbG9yIjoiIzk5OSIsInRlcnRpYXJ5VGV4dENvbG9yIjoiIzQ3ODJiNCIsIm5vdGVCa2dDb2xvciI6IiM0NjgyQjQiLCJub3RlVGV4dENvbG9yIjoiI2VjZWZmNCIsImZvbnRTaXplIjoiMTRweCIsImZvbnRGYW1pbHkiOiJhcmlhbCJ9LCJ0aGVtZUNTUyI6InJlY3QuaW5uZXIge3k6IDQwO30gLmNsdXN0ZXItbGFiZWw-Zm9yZWlnbk9iamVjdCB7IGhlaWdodDogMzA7IH0gLmNsdXN0ZXItbGFiZWwgLm5vZGVMYWJlbCB7IGxpbmUtaGVpZ2h0OiAzMHB4OyB9IC5ub2RlLnN0YXRlZGlhZ3JhbS1ub3RlID4gcmVjdCB7IHJ4OiA1cHg7IHJ5OiA1cHg7IH0gLm5vZGUuc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7IGZvbnQtc2l6ZTogMTRweDt9In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)\n\n***\n\n## Known issues / missing features\n- Add support to command concatenations (; and \u0026\u0026)\n- Admin interface with  \n    - Control over manual trigger of fetch in a git application folder  \n    - Application configuration CRUD UI\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwufe%2Fpolo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwufe%2Fpolo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwufe%2Fpolo/lists"}