{"id":13405519,"url":"https://github.com/amalshaji/portr","last_synced_at":"2026-04-02T21:57:45.343Z","repository":{"id":230699288,"uuid":"721585564","full_name":"amalshaji/portr","owner":"amalshaji","description":"Expose local http, tcp or websocket connections to the public internet","archived":false,"fork":false,"pushed_at":"2025-09-12T20:52:25.000Z","size":27293,"stargazers_count":2928,"open_issues_count":2,"forks_count":94,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-09-12T22:56:07.355Z","etag":null,"topics":["cli","developer-tools","golang","http","ngrok-alternative","ngrok-replacement","open-source","python","reverse-tunnel","self-hosted","shadcn-svelte","shadcn-ui","ssh-tunnel","svelte","tcp","tunneling"],"latest_commit_sha":null,"homepage":"https://portr.dev","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/amalshaji.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/contributing.md","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":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["amalshaji"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":"amalshaji","buy_me_a_coffee":null,"custom":null}},"created_at":"2023-11-21T11:14:01.000Z","updated_at":"2025-09-12T14:22:17.000Z","dependencies_parsed_at":"2025-04-11T02:42:14.166Z","dependency_job_id":"a8a0e16b-e280-409c-bbb9-5f848dcf21f4","html_url":"https://github.com/amalshaji/portr","commit_stats":{"total_commits":414,"total_committers":4,"mean_commits":103.5,"dds":"0.036231884057971064","last_synced_commit":"6563b073461263bd28a6f0d0d0d43fcd900197ca"},"previous_names":["amalshaji/portr"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/amalshaji/portr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amalshaji%2Fportr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amalshaji%2Fportr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amalshaji%2Fportr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amalshaji%2Fportr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amalshaji","download_url":"https://codeload.github.com/amalshaji/portr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amalshaji%2Fportr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278621841,"owners_count":26017253,"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-06T02:00:05.630Z","response_time":65,"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":["cli","developer-tools","golang","http","ngrok-alternative","ngrok-replacement","open-source","python","reverse-tunnel","self-hosted","shadcn-svelte","shadcn-ui","ssh-tunnel","svelte","tcp","tunneling"],"created_at":"2024-07-30T19:02:04.478Z","updated_at":"2026-04-02T21:57:45.336Z","avatar_url":"https://github.com/amalshaji.png","language":"Go","funding_links":["https://github.com/sponsors/amalshaji","https://polar.sh/amalshaji"],"categories":["Go","Python","cli","TypeScript","Tools \u0026 Utilities"],"sub_categories":[],"readme":"\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs-v2/public/icon.png\" height=\"300px\"\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/amalshaji/portr\"\u003e\n  \u003cimg alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/amalshaji/portr\"\u003e\n  \u003ca href=\"https://portr.dev\" target=\"_blank\"\u003e\u003cimg alt=\"Docs\" src=\"https://img.shields.io/badge/Docs-portr.dev-0096FF\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\nPortr is a tunnel solution that allows you to expose local http, tcp or websocket connections to the public internet. It utilizes SSH remote port forwarding under the hood to securely tunnel connections.\n\nPortr is primarily designed for small teams looking to expose development servers on a public URL. It is not recommended for use alongside production servers.\n\n## Features\n\n- 🎉 Expose local HTTP, TCP, and WebSocket services on public URLs.\n- 🚨 Built-in local inspector on `http://localhost:7777` for request inspection, replay, and WebSocket session debugging. [Watch video](https://www.youtube.com/watch?v=_4tipDzuoSs).\n- 🤖 Agent-friendly local request logs with `portr logs`, backed by `~/.portr/db.sqlite`.\n- 👾 Admin dashboard for team, user, and connection management. [Watch video](https://www.youtube.com/watch?v=Wv5j3YQk3Ew).\n\n## Quick Start\n\n1. Set up a Portr server or use an existing one.\n2. Install the Portr client on your machine.\n3. Start a local service, then expose it:\n\n```bash\nportr http 9000\n```\n\nTo pin the tunnel to a subdomain:\n\n```bash\nportr http 9000 --subdomain amal-test\n```\n\nStarting an HTTP tunnel does three useful things immediately:\n\n- Creates a public HTTPS URL that forwards to your local service.\n- Starts the Portr inspector locally at [http://localhost:7777](http://localhost:7777).\n- Persists HTTP request logs locally so they can be queried from the CLI.\n\n## Inspector And Logs\n\nThe local inspector lets you:\n\n- inspect incoming HTTP requests and responses\n- replay stored requests\n- inspect headers and payloads\n- monitor upgraded WebSocket sessions and captured frames\n\nThe same stored request data is available from the CLI:\n\n```bash\n# Show the latest logs for a subdomain\nportr logs amal-test\n\n# Filter by URL substring\nportr logs amal-test /api/\n\n# Emit the full stored records as JSON\nportr logs amal-test --json\n```\n\n## Setup\n\n- [Server setup guide](https://portr.dev/docs/server)\n- [Client installation guide](https://portr.dev/docs/client/installation)\n- [HTTP tunnel guide](https://portr.dev/docs/client/http-tunnel)\n- [Getting started guide](https://portr.dev/docs/getting-started)\n\n## Contributing\n\nPlease read through [our contributing guide](.github/contributing.md) and set up your [development environment](https://portr.dev/docs/local-development).\n\n## License\n\nThis project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the  [LICENSE](/LICENSE) file for the full license text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famalshaji%2Fportr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famalshaji%2Fportr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famalshaji%2Fportr/lists"}