{"id":31585065,"url":"https://github.com/j-jagger/tinyrp","last_synced_at":"2025-10-06T01:26:55.509Z","repository":{"id":314513901,"uuid":"1055817798","full_name":"j-jagger/TinyRP","owner":"j-jagger","description":"Pythonic Async-focused Reverse Proxy","archived":false,"fork":false,"pushed_at":"2025-09-12T22:04:50.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-12T23:46:55.163Z","etag":null,"topics":["flask","nginx","prototype","python","quart","reverseproxy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/j-jagger.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-09-12T21:21:03.000Z","updated_at":"2025-09-12T22:04:54.000Z","dependencies_parsed_at":"2025-09-12T23:46:59.996Z","dependency_job_id":null,"html_url":"https://github.com/j-jagger/TinyRP","commit_stats":null,"previous_names":["j-jagger/tinyrp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/j-jagger/TinyRP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-jagger%2FTinyRP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-jagger%2FTinyRP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-jagger%2FTinyRP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-jagger%2FTinyRP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/j-jagger","download_url":"https://codeload.github.com/j-jagger/TinyRP/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j-jagger%2FTinyRP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278547778,"owners_count":26004772,"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","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"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":["flask","nginx","prototype","python","quart","reverseproxy"],"created_at":"2025-10-06T01:26:49.754Z","updated_at":"2025-10-06T01:26:55.501Z","avatar_url":"https://github.com/j-jagger.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TinyRP\n\nTiny Reverse Proxy, built in Asynchronous Python.\n### Project State: INDEV\n\n\n\n[![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html/)\n\n## Features\n\n- Simple Configuration\n- Low Runtime Footprint (Highly debatable, however)\n- Fully asynchronous operations\n- Insanely easy route setup\n\n\n\n\n## Disclaimers\n\nThis has not been tested as thoroughly as it should've been. It is also very much not finished! While in theory, it may seem fairly safe to be thrown into the harsh winds of the internet, in practice, I would imagine any experienced bad actor could find some sort of crack in the url system.\n\nSpotted something I could improve? Leave an issue!\n\n\n## How does it work?\n\nFirstly, on boot, a file named 'settings.tiny' is read from. It's called .tiny, because it's fairly small.\n\nExample settings.tiny:\n\n```\n# Routes + Options File for TinyRP v1.0.0\n# Routes begin with \u003e, Settings begin with -.\n\n\n- port -\u003e 8000\n- host -\u003e 0.0.0.0\n\u003e http://localhost:8000 -\u003e 127.0.0.1:5500\n```\n\nComments can be created using # or /.\nAs the file says, routes begin with \u003e and settings begin with -. It follows a fairly simple 'structure' wherein, quite simply, 'key -\u003e value'.\n\nAfter the settings and routes are registered, the Quart-Uvicorn ASGI server starts. It runs a route on ``/`` and ``/\u003cpath:page\u003e``. \n\nWhen a user sends a request, the server checks if their host is inside the routes dictionary, and resolves it to a url. From there, it uses aiohttp to get the url using the exact(ish) same details as the client gave to the server. It then responds to the client's request with whatever the url responds with. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj-jagger%2Ftinyrp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fj-jagger%2Ftinyrp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj-jagger%2Ftinyrp/lists"}