{"id":35078068,"url":"https://github.com/mostlygeek/ts-plug","last_synced_at":"2026-04-04T18:49:09.841Z","repository":{"id":320611752,"uuid":"1082255064","full_name":"mostlygeek/ts-plug","owner":"mostlygeek","description":"one line to plug any server into your tailnet!","archived":false,"fork":false,"pushed_at":"2026-01-15T19:31:44.000Z","size":101,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-25T11:37:16.842Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mostlygeek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2025-10-24T01:03:22.000Z","updated_at":"2026-01-08T18:54:02.000Z","dependencies_parsed_at":"2025-10-24T20:26:35.540Z","dependency_job_id":"5925e554-74ad-44e5-ba66-db52cbe9bbe6","html_url":"https://github.com/mostlygeek/ts-plug","commit_stats":null,"previous_names":["mostlygeek/ts-plug"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mostlygeek/ts-plug","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mostlygeek%2Fts-plug","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mostlygeek%2Fts-plug/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mostlygeek%2Fts-plug/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mostlygeek%2Fts-plug/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mostlygeek","download_url":"https://codeload.github.com/mostlygeek/ts-plug/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mostlygeek%2Fts-plug/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31409470,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: 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":[],"created_at":"2025-12-27T12:32:20.935Z","updated_at":"2026-04-04T18:49:09.804Z","avatar_url":"https://github.com/mostlygeek.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [!WARNING]\n\u003e Lots of Work in Progress stuff here!\n\n# What's in this repo?\n\nOne-liner tools to expose things to/from your tailnet!\n\n| Binary | Purpose | Use Case |\n|--------|---------|----------|\n| **ts-plug** | Expose localhost to your tailnet | Share your dev server to your tailnet, deploy without sidecars |\n| **ts-unplug** | Bring tailnet services to localhost | Access tailnet-based databases/APIs as if they were local |\n\n## Quick Start\n\n**Build:**\n```sh\nmake                    # Build both binaries\nmake install            # Install to $GOPATH/bin\n```\n\n**ts-plug** - Share a local service:\n```sh\n./build/ts-plug -hostname myapp -- python -m http.server 8080\n# Access at https://myapp.tailnet-name.ts.net\n```\n\n**ts-unplug** - Access a remote service:\n```sh\n./build/ts-unplug -dir ./state -port 8080 api.tailnet-name.ts.net\n# Access at http://localhost:8080\n```\n\n## Key Features\n\n**ts-plug** automatically:\n- Starts your upstream server\n- Joins your tailnet with TLS and DNS\n- Reverse proxies to localhost:8080\n- Optional public access with `-public`\n- Supports HTTP, HTTPS, and DNS protocols\n\n**ts-unplug** provides:\n- Reverse proxy from tailnet to localhost\n- Access to services requiring localhost URLs\n- Simple port mapping\n\n## Examples\n\nRun servers in any language:\n```sh\nmake examples\n\n# Try different languages with ts-plug\n./build/ts-plug -hn hello -- ./build/hello        # Go\n./build/ts-plug -hn hello -- cmd/examples/hello/hello.js   # Node\n./build/ts-plug -hn hello -- cmd/examples/hello/hello.py   # Python\n```\n\nSee [cmd/examples/](./cmd/examples/) for more.\n\n## Docker Integration\n\nUse ts-plug as an entrypoint to eliminate sidecar containers:\n\n```dockerfile\nCOPY ts-plug /usr/local/bin/\nENTRYPOINT [\"ts-plug\", \"-hostname\", \"myapp\", \"--\"]\nCMD [\"npm\", \"start\"]\n```\n\nSee [docker/](./docker/) for Pi-hole, Open WebUI, and Audiobookshelf examples.\n\n## Documentation\n\n- **[Complete Documentation](./docs/)** - Guides, use cases, and detailed examples\n- **[ts-plug Guide](./docs/ts-plug.md)** - Full ts-plug documentation\n- **[ts-unplug Guide](./docs/ts-unplug.md)** - Full ts-unplug documentation\n- **[Use Cases](./docs/use-cases.md)** - Real-world scenarios\n- **[Docker Guide](./docs/docker.md)** - Container integration\n\n**Quick help:**\n```sh\n./build/ts-plug -h\n./build/ts-unplug -h\n```\n\n## License\n\nBSD-3-Clause - See [LICENSE](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmostlygeek%2Fts-plug","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmostlygeek%2Fts-plug","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmostlygeek%2Fts-plug/lists"}