(https://github.githubassets.com) (https://avatars.githubusercontent.com) (https://github-cloud.s3.amazonaws.com) (https://user-images.githubusercontent.com/) (https://github.githubassets.com) (https://avatars.githubusercontent.com) (https://github.githubassets.com/assets/react-e27d1b3e03961e68.js) (https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js) (https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js) (https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js) (https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js) (https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js) (https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js) (https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js) (../../github.githubassets.com/assets/light-3a3d2c708970e4e8.css) (../../github.githubassets.com/assets/light_high_contrast-9c7b506bdc5ea73f.css) (../../github.githubassets.com/assets/dark-c9dacb4ec19616db.css) (../../github.githubassets.com/assets/dark_high_contrast-5ef38214a3eabc7d.css) (../../github.githubassets.com/assets/primer-primitives-02e066689466a8cd.css) (../../github.githubassets.com/assets/primer-38ae573fa780d76a.css) (../../github.githubassets.com/assets/global-58d1122073b19732.css) (../../github.githubassets.com/assets/github-0b4a3ee3d18dc2f0.css) (../../github.githubassets.com/assets/repository-542ca59b4b92999d.css) (../../github.githubassets.com/assets/code-b25a4886e30e3e5f.css) (https://github.githubassets.com/assets/wp-runtime-3c0b6c1624dd4c1b.js) (https://github.githubassets.com/assets/app-foundation-71e74aca45a2c757.js) (https://github.githubassets.com/assets/app-runtime-5d9f0cd03820b5ec.js) (https://github.githubassets.com/assets/fetch-utilities-43615e4472226e80.js) (https://github.githubassets.com/assets/ser-bfcafe59f7bf19c3.js) (https://github.githubassets.com/assets/tp-4b19735107e17aad.js) (../../github.githubassets.com/assets/app-runtime.d15322f949822552.module.css) (https://github.githubassets.com/assets/catalyst-049dfc9f78005ba4.js) (https://github.githubassets.com/assets/selector-observer-7ae05416e4a383ae.js) (https://github.githubassets.com/assets/relative-time-element-bd833b2c55eec185.js) (https://github.githubassets.com/assets/by-473024a3f6cb3892.js) (https://github.githubassets.com/assets/ja9-b94de714266ba389.js) (https://github.githubassets.com/assets/3h-58b64de9cf94c187.js) (https://github.githubassets.com/assets/hk-0f7e7279bf741cc1.js) (https://github.githubassets.com/assets/jz-25e1d6339d2ac9a3.js) (https://github.githubassets.com/assets/hjg-55b6d77c48226433.js) (https://github.githubassets.com/assets/j0-e3c0cf644824069a.js) (https://github.githubassets.com/assets/runtime-helpers-b7e0a61126a143c7.js) (https://github.githubassets.com/assets/aria-live-5e29bcc254718030.js) (https://github.githubassets.com/assets/hotkey-a82e6cb07443fd1c.js) (https://github.githubassets.com/assets/react-core-c3ee6e402ae842d7.js) (https://github.githubassets.com/assets/a9-62b99c0e8869248c.js) (https://github.githubassets.com/assets/urv-515451075b174bab.js) (https://github.githubassets.com/assets/4t-f1181f796eb9ea15.js) (https://github.githubassets.com/assets/pb0-977f67e8af7fb3af.js) (https://github.githubassets.com/assets/6n-b72a71e2477d5d76.js) (https://github.githubassets.com/assets/zj-caa8129e3459fabe.js) (https://github.githubassets.com/assets/o6-ee4c29e10ceaa9cf.js) (https://github.githubassets.com/assets/h9a-2b97d607f57d1e8b.js) (https://github.githubassets.com/assets/466-442da31643aed28c.js) (https://github.githubassets.com/assets/kpw-1e0fe2fddb464aa2.js) (https://github.githubassets.com/assets/unc-02389c9418913605.js) (https://github.githubassets.com/assets/g9-3e0dac2ec3137ae3.js) (https://github.githubassets.com/assets/nu5-c95e9365197cdb2d.js) (../../github.githubassets.com/assets/react-core.dbbeaea518f4def6.module.css) (https://github.githubassets.com/assets/n9-c2c116f5b667d03a.js) (https://github.githubassets.com/assets/liv-5ba2be907eba37d2.js) (https://github.githubassets.com/assets/primer-react-40a30dafad7b00a3.js) (https://github.githubassets.com/assets/op-62eb80a0bb6d6b09.js) (https://github.githubassets.com/assets/nc-c6493acd4a9a53cb.js) (https://github.githubassets.com/assets/qmp-f0256da0d9a22116.js) (https://github.githubassets.com/assets/j6-1dc594fa7c0ceb36.js) (https://github.githubassets.com/assets/t7l-8b0d4f3655bf535e.js) (https://github.githubassets.com/assets/4u-bdd88d7cbfa8cd99.js) (https://github.githubassets.com/assets/s07-83e99be04123974b.js) (https://github.githubassets.com/assets/y5-d2d832f3e2866c5b.js) (https://github.githubassets.com/assets/n4-c5777d10c8b4e392.js) (https://github.githubassets.com/assets/j8-2e734c23896a33bb.js) (https://github.githubassets.com/assets/la-27ea91f01fa7ffcf.js) (https://github.githubassets.com/assets/ck-2cd9e0657d776458.js) (https://github.githubassets.com/assets/ftx-773ef6972adbb32c.js) (https://github.githubassets.com/assets/7r4-d39b13584de04b32.js) (https://github.githubassets.com/assets/ric-f7768b7aa01ff80e.js) (https://github.githubassets.com/assets/pd-f2cc51e4ddaf0303.js) (https://github.githubassets.com/assets/hbw-d4c11b2d06f79ef0.js) (https://github.githubassets.com/assets/86g-dffecec336e77800.js) (https://github.githubassets.com/assets/iq-3f67d87a47fa1c58.js) (https://github.githubassets.com/assets/p2-349d23ad8773a3d8.js) (https://github.githubassets.com/assets/v2-1c5630b7c622c640.js) (https://github.githubassets.com/assets/4d-f3ba374d5e38c119.js) (https://github.githubassets.com/assets/7u-7300dd006faafdbf.js) (https://github.githubassets.com/assets/lf-67a3dc224538080d.js) (https://github.githubassets.com/assets/2-cc8963f70f3f718e.js) (https://github.githubassets.com/assets/e3-f523c37ea2b7bd33.js) (https://github.githubassets.com/assets/p2u-86627fa9a1b4d6d6.js) (https://github.githubassets.com/assets/aci-ea20e0a34d2aa34f.js) (https://github.githubassets.com/assets/qo3-fc9cf9e2ba9e59da.js) (https://github.githubassets.com/assets/pu-23e6de5e22e00c9d.js) (https://github.githubassets.com/assets/ks-677d50bb54c29451.js) (https://github.githubassets.com/assets/0wl-c1f63d1faed81562.js) (https://github.githubassets.com/assets/cu-4a2218e987eb1d1c.js) (https://github.githubassets.com/assets/mt-f55d86e6a6c4c82c.js) (https://github.githubassets.com/assets/l1n-6c9687c92b7bf0b6.js) (https://github.githubassets.com/assets/dw-6055b378219b22ec.js) (https://github.githubassets.com/assets/47-118a870cc8a9335b.js) (https://github.githubassets.com/assets/lzs-e7339a5de2ba004e.js) (https://github.githubassets.com/assets/id-f71da2c3f1eacf7c.js) (https://github.githubassets.com/assets/qnb-59677c22ab566879.js) (https://github.githubassets.com/assets/w4k-3ae7362f0a251d18.js) (https://github.githubassets.com/assets/wh-bccd89394c03ff7e.js) (https://github.githubassets.com/assets/vz1-6157ee01cd61fdcd.js) (https://github.githubassets.com/assets/4s-329d06fe2adb226e.js) (../../github.githubassets.com/assets/primer-react-css.9b1bc6929077e45b.module.css) (../../github.githubassets.com/assets/0wl.e4a798931189690c.module.css) (../../github.githubassets.com/assets/wh.f8eaed9fb7187424.module.css) (../../github.githubassets.com/assets/code-view.5c558ead59079d35.module.css) GitHub - tunr-dev/tunr: Ship the apps your agent builds. One command (or one MCP call) turns localhost into a live HTTPS URL — tunnels, deploys, scale-to-zero. · GitHub (repo_source) (https://github.githubassets.com/) (https://github.com/opensearch.xml) (GitHub) (https://github.com/fluidicon.png) (GitHub) (https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg) (https://github.githubassets.com/favicons/favicon.png) (../../github.githubassets.com/favicons/favicon.svg) (../manifest.json) (tunr.html#start-of-content) Skip to content (https://github.githubassets.com/assets/keyboard-shortcuts-dialog-a2356e45b16c288c.js) (../../github.githubassets.com/assets/primer-react-css.9b1bc6929077e45b.module.css) (../../github.githubassets.com/assets/keyboard-shortcuts-dialog.276ef1a234c7f7f8.module.css) (https://github.githubassets.com/assets/y1-78cf720a055c0528.js) (https://github.githubassets.com/assets/app-install-banner-partial-33c6ca4556885046.js) (../../github.githubassets.com/assets/primer-react-css.9b1bc6929077e45b.module.css) (../../github.githubassets.com/assets/app-install-banner-partial.802cebaa458ec3cf.module.css) (https://github.githubassets.com/assets/et9-2279d628e7f40bd7.js) (https://github.githubassets.com/assets/7o-9f01ad99478baf00.js) (https://github.githubassets.com/assets/fz-b23f6138726ccc09.js) (https://github.githubassets.com/assets/c0-b09336246a674ec5.js) (https://github.githubassets.com/assets/i7-3a3a19294ad7bae4.js) (https://github.githubassets.com/assets/e4-d4469fe3db7b28ec.js) (https://github.githubassets.com/assets/1hi-0e7cb0730dcf738a.js) (https://github.githubassets.com/assets/marketing-header-3c9b75a4c81f10d1.js) (../../github.githubassets.com/assets/primer-react-css.9b1bc6929077e45b.module.css) (../../github.githubassets.com/assets/primer-react-brand-css.075720f2d87777ef.module.css) (../../github.githubassets.com/assets/marketing-header.72dbdd61e7715bf1.module.css) Navigation Menu (https://github.com/) (https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Ftunr-dev%2Ftunr) Sign in Appearance settings Platform AI CODE CREATION (https://github.com/features/copilot) GitHub Copilot Write better code with AI (https://github.com/features/ai/github-app) GitHub Copilot app Direct agents from issue to merge (https://github.com/mcp) MCP Registry Integrate external tools DEVELOPER WORKFLOWS (https://github.com/features/actions) Actions Automate any workflow (https://github.com/features/codespaces) Codespaces Instant dev environments (https://github.com/features/issues) Issues Plan and track work (https://github.com/features/code-review) Code Review Manage code changes (https://github.com/features/code-quality) Code Quality Enforce quality at merge APPLICATION SECURITY (https://github.com/security/advanced-security) GitHub Advanced Security Find and fix vulnerabilities (https://github.com/security/advanced-security/code-security) Code security Secure your code as you build (https://github.com/security/advanced-security/secret-protection) Secret protection Stop leaks before they start EXPLORE (https://github.com/why-github) Why GitHub (https://docs.github.com) Documentation (https://github.blog) Blog (https://github.blog/changelog) Changelog (https://github.com/marketplace) Marketplace (https://github.com/features) View all features Solutions BY COMPANY SIZE (https://github.com/enterprise) Enterprises (https://github.com/team) Small and medium teams (https://github.com/enterprise/startups) Startups (https://github.com/solutions/industry/nonprofits) Nonprofits BY USE CASE (https://github.com/solutions/use-case/app-modernization) App Modernization (https://github.com/solutions/use-case/devsecops) DevSecOps (https://github.com/solutions/use-case/devops) DevOps (https://github.com/solutions/use-case/ci-cd) CI/CD (https://github.com/solutions/use-case) View all use cases BY INDUSTRY (https://github.com/solutions/industry/healthcare) Healthcare (https://github.com/solutions/industry/financial-services) Financial services (https://github.com/solutions/industry/manufacturing) Manufacturing (https://github.com/solutions/industry/government) Government (https://github.com/solutions/industry) View all industries (https://github.com/solutions) View all solutions Resources EXPLORE BY TOPIC (https://github.com/resources/articles?topic=ai) AI (https://github.com/resources/articles?topic=software-development) Software Development (https://github.com/resources/articles?topic=devops) DevOps (https://github.com/resources/articles?topic=security) Security (https://github.com/resources/articles) View all topics EXPLORE BY TYPE (https://github.com/customer-stories) Customer stories (https://github.com/resources/events) Events & webinars (https://github.com/resources/whitepapers) Ebooks & reports (https://github.com/solutions/executive-insights) Business insights (https://skills.github.com) GitHub Skills SUPPORT & SERVICES (https://docs.github.com) Documentation (https://support.github.com) Customer support (https://github.com/orgs/community/discussions) Community forum (https://github.com/trust-center) Trust center (https://github.com/partners) Partners (https://github.com/resources) View all resources Open Source COMMUNITY (https://github.com/open-source/sponsors) GitHub Sponsors Fund open source developers PROGRAMS (https://securitylab.github.com) Security Lab (https://maintainers.github.com) Maintainer Community (https://stars.github.com) GitHub Stars (https://archiveprogram.github.com) Archive Program REPOSITORIES (https://github.com/topics) Topics (https://github.com/trending) Trending (https://github.com/collections) Collections Enterprise ENTERPRISE SOLUTIONS (https://github.com/enterprise) Enterprise platform AI-powered developer platform AVAILABLE ADD-ONS (https://github.com/security/advanced-security) GitHub Advanced Security Enterprise-grade security features (https://github.com/features/copilot/copilot-business) Copilot for Business Enterprise-grade AI features (https://github.com/enterprise/premium-support) Premium Support Enterprise-grade 24/7 support (https://github.com/pricing) Pricing Search / (https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Ftunr-dev%2Ftunr) Sign in (https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&source=header-repo&source_repo=tunr-dev%2Ftunr) Sign up Appearance settings You signed in with another tab or window. (tunr.html) Reload to refresh your session. You signed out in another tab or window. (tunr.html) Reload to refresh your session. You switched accounts on another tab or window. (tunr.html) Reload to refresh your session. Dismiss alert (https://github.githubassets.com/assets/cn-dad50312c0f02a2c.js) (https://github.githubassets.com/assets/kw-3befc41fae8dd086.js) (https://github.githubassets.com/assets/t5-9c946d3e6a9680f8.js) (https://github.githubassets.com/assets/mw5-455868509d7c9c4a.js) (https://github.githubassets.com/assets/x-8f11c21cfa103b23.js) (https://github.githubassets.com/assets/yzb-0785cf14fc5b801a.js) (https://github.githubassets.com/assets/a1-3c2cf8c5bb1679cc.js) (https://github.githubassets.com/assets/wzg-478e63886819091d.js) (https://github.githubassets.com/assets/5f-e5cb1e23f331a6e1.js) (https://github.githubassets.com/assets/4r-20565a437e50d31f.js) (https://github.githubassets.com/assets/jr1-0fece33c994893d7.js) (https://github.githubassets.com/assets/wq-6f5577196583f7bf.js) (https://github.githubassets.com/assets/5p-a61d8e776a581edd.js) (https://github.githubassets.com/assets/xfx-61ab109cb54a57d2.js) (https://github.githubassets.com/assets/rcn-e83a04c82714594f.js) (https://github.githubassets.com/assets/ri-85a579cb2097a235.js) (https://github.githubassets.com/assets/global-nav-bar-40a2e842913225b3.js) (../../github.githubassets.com/assets/primer-react-css.9b1bc6929077e45b.module.css) (../../github.githubassets.com/assets/0wl.e4a798931189690c.module.css) (../../github.githubassets.com/assets/global-nav-bar.6dbffc8cd41393a8.module.css) (https://github.com/tunr-dev) tunr-dev (tunr.html) tunr Repository navigation (tunr.html) Code (https://github.com/tunr-dev/tunr/issues) Issues (https://github.com/tunr-dev/tunr/pulls) Pull requests 6 (6) (https://github.com/tunr-dev/tunr/discussions) Discussions (https://github.com/tunr-dev/tunr/actions) Actions (https://github.com/tunr-dev/tunr/security) Security and quality (https://github.com/tunr-dev/tunr/pulse) Insights Moreitems (../../avatars.githubusercontent.com/u/333774422@s=60&v=4) (tunr.html) (tunr-dev) (tunr) (tunr.html) tunr Public (https://github.com/login?return_to=%2Ftunr-dev%2Ftunr) Notifications You must be signed in to change notification settings (https://github.com/login?return_to=%2Ftunr-dev%2Ftunr) Fork0 (0 ) (https://github.com/login?return_to=%2Ftunr-dev%2Ftunr) Star5 (5 ) You must be signed in to star a repository About Ship the apps your agent builds. One command (or one MCP call) turns localhost into a live HTTPS URL — tunnels, deploys, scale-to-zero. (https://tunr.sh) (https://tunr.sh) tunr.sh Topics (https://github.com/topics/ai-agents) ai-agents (https://github.com/topics/claude-code) claude-code (https://github.com/topics/cli) cli (https://github.com/topics/deploy) deploy (https://github.com/topics/developer-tools) developer-tools (https://github.com/topics/golang) golang (https://github.com/topics/localhost) localhost (https://github.com/topics/mcp) mcp (https://github.com/topics/model-context-protocol) model-context-protocol (https://github.com/topics/ngrok-alternative) ngrok-alternative (https://github.com/topics/paas) paas (https://github.com/topics/reverse-proxy) reverse-proxy (https://github.com/topics/self-hosted) self-hosted (https://github.com/topics/tunnel) tunnel (https://github.com/topics/websocket) websocket Resources (tunr.html#readme-ov-file) Readme (tunr.html#Apache-2.0-1-ov-file) Apache-2.0 license Code of conduct (tunr.html#coc-ov-file) Code of conduct Contributing (tunr.html#contributing-ov-file) Contributing Security policy (tunr.html#security-ov-file) Security policy (https://github.com/tunr-dev/tunr/activity) Activity (https://github.com/tunr-dev/tunr/custom-properties) Custom properties Stars 5 stars Watchers 0 watching Forks (https://github.com/tunr-dev/tunr/forks) 0 forks (https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Ftunr-dev%2Ftunr&report=tunr-dev+%28user%29) Report repository main (https://github.com/tunr-dev/tunr/branches) Branches (https://github.com/tunr-dev/tunr/tags) Tags (https://github.com/tunr-dev/tunr/branches) (https://github.com/tunr-dev/tunr/tags) (Go to file) () Go to file Code Open more actions menu Latest commit History (https://github.com/tunr-dev/tunr/commits/main/) 106 Commits (https://github.com/tunr-dev/tunr/commits/main/) 106 Commits Folders and files Name Name (Last commit message) Last commit message (Last commit date) Last commit date (.github) (https://github.com/tunr-dev/tunr/tree/main/.github) .github (.github) (https://github.com/tunr-dev/tunr/tree/main/.github) .github (assets) (https://github.com/tunr-dev/tunr/tree/main/assets) assets (assets) (https://github.com/tunr-dev/tunr/tree/main/assets) assets (This path skips through empty directories) (https://github.com/tunr-dev/tunr/tree/main/cmd/tunr) cmd/ tunr (This path skips through empty directories) (https://github.com/tunr-dev/tunr/tree/main/cmd/tunr) cmd/ tunr (docs) (https://github.com/tunr-dev/tunr/tree/main/docs) docs (docs) (https://github.com/tunr-dev/tunr/tree/main/docs) docs (internal) (https://github.com/tunr-dev/tunr/tree/main/internal) internal (internal) (https://github.com/tunr-dev/tunr/tree/main/internal) internal (relay) (https://github.com/tunr-dev/tunr/tree/main/relay) relay (relay) (https://github.com/tunr-dev/tunr/tree/main/relay) relay (scripts) (https://github.com/tunr-dev/tunr/tree/main/scripts) scripts (scripts) (https://github.com/tunr-dev/tunr/tree/main/scripts) scripts (sdk) (https://github.com/tunr-dev/tunr/tree/main/sdk) sdk (sdk) (https://github.com/tunr-dev/tunr/tree/main/sdk) sdk (vscode-tunr) (https://github.com/tunr-dev/tunr/tree/main/vscode-tunr) vscode-tunr (vscode-tunr) (https://github.com/tunr-dev/tunr/tree/main/vscode-tunr) vscode-tunr (.gitignore) (https://github.com/tunr-dev/tunr/blob/main/.gitignore) .gitignore (.gitignore) (https://github.com/tunr-dev/tunr/blob/main/.gitignore) .gitignore (.golangci.yml) (https://github.com/tunr-dev/tunr/blob/main/.golangci.yml) .golangci.yml (.golangci.yml) (https://github.com/tunr-dev/tunr/blob/main/.golangci.yml) .golangci.yml (.goreleaser.yaml) (https://github.com/tunr-dev/tunr/blob/main/.goreleaser.yaml) .goreleaser.yaml (.goreleaser.yaml) (https://github.com/tunr-dev/tunr/blob/main/.goreleaser.yaml) .goreleaser.yaml (CHANGELOG.md) (https://github.com/tunr-dev/tunr/blob/main/CHANGELOG.md) CHANGELOG.md (CHANGELOG.md) (https://github.com/tunr-dev/tunr/blob/main/CHANGELOG.md) CHANGELOG.md (CLAUDE.md) (https://github.com/tunr-dev/tunr/blob/main/CLAUDE.md) CLAUDE.md (CLAUDE.md) (https://github.com/tunr-dev/tunr/blob/main/CLAUDE.md) CLAUDE.md (CODE_OF_CONDUCT.md) (https://github.com/tunr-dev/tunr/blob/main/CODE_OF_CONDUCT.md) CODE_OF_CONDUCT.md (CODE_OF_CONDUCT.md) (https://github.com/tunr-dev/tunr/blob/main/CODE_OF_CONDUCT.md) CODE_OF_CONDUCT.md (Dockerfile) (https://github.com/tunr-dev/tunr/blob/main/Dockerfile) Dockerfile (Dockerfile) (https://github.com/tunr-dev/tunr/blob/main/Dockerfile) Dockerfile (LICENSE) (https://github.com/tunr-dev/tunr/blob/main/LICENSE) LICENSE (LICENSE) (https://github.com/tunr-dev/tunr/blob/main/LICENSE) LICENSE (Makefile) (https://github.com/tunr-dev/tunr/blob/main/Makefile) Makefile (Makefile) (https://github.com/tunr-dev/tunr/blob/main/Makefile) Makefile (NOTICE) (https://github.com/tunr-dev/tunr/blob/main/NOTICE) NOTICE (NOTICE) (https://github.com/tunr-dev/tunr/blob/main/NOTICE) NOTICE (README.md) (https://github.com/tunr-dev/tunr/blob/main/README.md) README.md (README.md) (https://github.com/tunr-dev/tunr/blob/main/README.md) README.md (SECURITY.md) (https://github.com/tunr-dev/tunr/blob/main/SECURITY.md) SECURITY.md (SECURITY.md) (https://github.com/tunr-dev/tunr/blob/main/SECURITY.md) SECURITY.md (docker-compose.runner.yml) (https://github.com/tunr-dev/tunr/blob/main/docker-compose.runner.yml) docker-compose.runner.yml (docker-compose.runner.yml) (https://github.com/tunr-dev/tunr/blob/main/docker-compose.runner.yml) docker-compose.runner.yml (docker-compose.yml) (https://github.com/tunr-dev/tunr/blob/main/docker-compose.yml) docker-compose.yml (docker-compose.yml) (https://github.com/tunr-dev/tunr/blob/main/docker-compose.yml) docker-compose.yml (go.mod) (https://github.com/tunr-dev/tunr/blob/main/go.mod) go.mod (go.mod) (https://github.com/tunr-dev/tunr/blob/main/go.mod) go.mod (go.sum) (https://github.com/tunr-dev/tunr/blob/main/go.sum) go.sum (go.sum) (https://github.com/tunr-dev/tunr/blob/main/go.sum) go.sum (install.sh) (https://github.com/tunr-dev/tunr/blob/main/install.sh) install.sh (install.sh) (https://github.com/tunr-dev/tunr/blob/main/install.sh) install.sh View all files Repository files navigation (tunr.html#) README (tunr.html#) Code of conduct (tunr.html#) Contributing (tunr.html#) Apache-2.0 license (tunr.html#) Security Moreitems (tunr) Ship the apps your agent builds. One command — or one MCP call — and the thing Claude Code just wrote stops living on localhost . (https://github.com/tunr-dev/tunr/releases) (Release) (https://github.com/tunr-dev/tunr/blob/main/LICENSE) (CLI: Apache 2.0) (https://github.com/tunr-dev/tunr/blob/main/relay/LICENSE) (Relay: PolyForm Shield) (https://github.com/tunr-dev/tunr/blob/main/go.mod) (Go Version) (https://github.com/tunr-dev/tunr/actions/workflows/ci.yml) (CI) (https://github.com/tunr-dev/tunr/stargazers) (Stars) (https://tunr.sh) tunr.sh · (https://tunr.sh/docs/) Docs · (https://app.tunr.sh) Dashboard · (https://github.com/tunr-dev/tunr/discussions) Discussions · (https://github.com/tunr-dev/tunr/blob/main/docs/CONTRIBUTING.md) Contributing (https://github.com/tunr-dev/tunr/blob/main/assets/demo.gif) (An agent calls tunr_deploy; the build streams and the app goes live at https://standup.tunr.sh) $ tunr deploy --name sprint ▲ Uploading 41 files, 210 KB ▲ building (nixpacks auto-detect) 🚀 Live: https://sprint.tunr.sh (sleeps when idle, wakes on request) Or don't type anything — tell your agent: "deploy this to tunr" …and it calls tunr_deploy over MCP and hands you back the URL. Why (tunr.html#why) Coding agents produce a lot of small software: the internal dashboard, the one-off scraper, the tool that does exactly one annoying thing for your team. Almost all of it dies on localhost , because the gap between "it works on my machine" and "my colleague can open it" is still an afternoon of Dockerfiles, DNS and IAM. tunr closes that gap to one command. The app builds with Nixpacks (no Dockerfile), gets an HTTPS URL, sleeps when nobody's using it and wakes on the next request — so hosting a dozen barely-used internal tools costs about what hosting one does. The 3-second tunnel tunr started as is still here, still free — and it's the safest way to demo work-in-progress to a client: read-only mode, crash protection and a feedback button, one flag each ((tunr.html#client-demos--for-freelancers-and-vibecoders) Client demos ). Install (tunr.html#install) # macOS / Linux — Homebrew brew install tunr-dev/tap/tunr # macOS / Linux — install script curl -fsSL https://raw.githubusercontent.com/tunr-dev/tunr/main/install.sh | sh # Go go install github.com/tunr-dev/tunr/cmd/tunr@latest # From source git clone https://github.com/tunr-dev/tunr.git && cd tunr && make build A single static binary. macOS, Linux and Windows, amd64 and arm64, no runtime dependencies. Verify it with tunr doctor . SDKs — for driving tunnels from code rather than the shell: pip install tunr # Python npm install @tunr/cli # Node.js Cloud — deploy & host (tunr.html#cloud--deploy--host) tunr login # magic-link, token goes to your OS keychain tunr deploy --name my-app # build + run; prints the live URL tunr apps # list your apps tunr apps logs my-app --follow # stream build + runtime logs tunr apps delete my-app # remove it, free the subdomain Build Nixpacks auto-detect — Node, Python, Go, Ruby, Rust, PHP, Java. A Dockerfile is used if present. Isolation Every app runs in its own gVisor sandbox with CPU, memory and disk quotas. Scale to zero Idle → paused with its memory reclaimed (~20 MB resident), then stopped. Wake p50 is ~150 ms. Secrets .env files are never uploaded. Pass them with --env KEY=VALUE . Stays up Close your laptop. The app keeps serving. tunr deploy --name sprint --port 3000 --env DATABASE_URL=postgres://… Status: preview. Deploy works end to end and is what the MCP tools drive. Role-based sharing, per-app SQLite and tunr rollback are not built yet — see (tunr.html#roadmap) Roadmap for what's real and what isn't. Agent-native (MCP) (tunr.html#agent-native-mcp) The CLI and the MCP server are two faces of the same control plane. Anything you can do in a terminal, your agent can do in a tool call. Claude Code: claude mcp add tunr -- tunr mcp Claude Desktop (~/.claude/claude_desktop_config.json ) / Cursor (.cursor/mcp.json ): { "mcpServers" : { "tunr" : { "command" : " tunr" , "args" : [" mcp" ] } } } Tools (tunr.html#tools) Tool What it does tunr_deploy Build & host a directory on the tunr cloud, return the live URL tunr_list_apps List deployed apps with URL and status tunr_app_logs Read an app's build + runtime logs (for debugging a bad deploy) tunr_delete_app Delete an app and free its subdomain tunr_share Open a temporary public tunnel to a running local port tunr_status List active tunnels tunr_inspect List HTTP requests captured by a tunnel tunr_replay Replay a captured request against your local server tunr_stop Close a tunnel tunr_deploy and tunr_share are deliberately distinct, and the tool descriptions say so: deploy means "host this, it should outlive my laptop", share means "expose what's running on :3000 right now". Cloud tools need tunr login first. Client demos — for freelancers and vibecoders (tunr.html#client-demos--for-freelancers-and-vibecoders) Showing a client something that still runs on your laptop? Three flags make the free tunnel safe to hand to someone who isn't a developer. (https://github.com/tunr-dev/tunr/blob/main/assets/client-demo.gif) (tunr share with --demo, --freeze and --inject-widget: a client's delete is intercepted, a crash is hidden, feedback arrives in the terminal) tunr share -p 3000 --demo --freeze --inject-widget --qr Flag What the client sees What actually happens --demo Buttons work — "Order deleted ✓" POST /PUT /PATCH /DELETE are answered by tunr with a fake success (JSON bodies are echoed back) and never reach your app. GraphQL queries still go through. Messages the visitor sends over WebSockets are dropped. Tune it with --demo-allow / --demo-block ((https://github.com/tunr-dev/tunr/blob/main/docs/VIBECODER_FEATURES.md#--demo-safe-read-only-mode) details ). --freeze The page, as it was a second ago Your dev server crashed or returned a 5xx; tunr serves the last good response (X-Tunr-Freeze-Cache: HIT ) while you fix it. --inject-widget A 💬 Feedback button on every page Their message, page URL and screen size land in your terminal. No code changes — tunr injects it into the HTML. --auto-login Already signed in to a demo account tunr adds your session cookie (or Bearer … header) to every request: --auto-login "session=demo-token" . --qr · --password · --ttl 1h A QR code to open it on their phone; a password; a link that expires Access control that takes one flag each. Tunnels (tunr.html#tunnels) Still free, still unlimited, still 3 seconds. tunr share --port 3000 # 🚀 https://abc1x2y3.tunr.sh HTTP/HTTPS with WebSocket (HMR works), plus experimental raw TCP , UDP and TLS tunnels — all multiplexed over one connection. Traffic is served from a single EU relay today; more regions are planned. Access control — password, bearer token, IP whitelist, TTL, QR # Basic auth (user optional) tunr share -p 8080 --password " secret" tunr share -p 8080 --password " client:secret" # Bearer token — Authorization: Bearer or ?token= tunr share -p 3000 --auth-token " my-super-secret-key" # IP whitelist (CIDR) tunr share -p 3000 --allow-ip " 203.0.113.0/24" tunr share -p 3000 --allow-ip " 10.0.0.0/8,172.16.0.0/12" # Auto-expire — the tunnel closes itself tunr share -p 3000 --ttl 1h30m # QR code, for opening it on a phone tunr share -p 3000 --qr Routing & headers — path routing, regions, header rewriting, CORS, proxies # Path routing — one public URL, several local ports tunr share --route /=3000 --route /api=8080 # Region hint — accepted today, takes effect once more regions launch # (tunr currently runs a single relay in the EU) tunr share --port 3000 --region ams # Header rewriting tunr share -p 3000 --header-add " X-Debug: true" tunr share -p 3000 --header-replace " Host: internal.local" tunr share -p 3000 --header-remove " X-Powered-By" # Forwarded headers — X-Forwarded-For (real client IP), X-Original-URL tunr share -p 3000 --x-forwarded-for --original-url # CORS preflight without touching your server tunr share -p 3000 --cors-origin " https://myapp.com" # Behind a corporate proxy tunr share -p 3000 --proxy http://proxy:8080 # Custom domain (Pro) tunr share -p 3000 --domain demo.client.com TCP / UDP / TLS — experimental raw tunnels tunr tcp --port 5432 tunr udp --port 53 tunr tls --port 8443 # a local TLS port over the same raw transport Experimental, and narrower than the names suggest. The relay exposes a raw tunnel only as a WebSocket stream at wss://.tunr.sh/tunnel/tcp (binary frames carry the bytes). There is no raw TCP/UDP port on the relay yet, so psql , ssh or a game client can't connect directly — you need a client that speaks that WebSocket. tunr tls is not SNI passthrough: the relay terminates TLS for *.tunr.sh . --allow-ip isn't enforced on raw tunnels, so it returns an error rather than silently leaving the port open. Daemon, service & multi-tunnel # Background daemon tunr start --port 3000 tunr status tunr stop # Several tunnels from .tunr.json tunr up tunr down # Install as a system service (systemd / launchd) — starts on boot tunr service install --port 3000 tunr service status tunr service uninstall Inspect & replay — the local HTTP inspector tunr open # dashboard at http://localhost:19842 tunr logs --follow # stream requests in the terminal tunr replay < id> # re-send a captured request to your local server Live request/response stream, headers, body, timing, one-click replay, export as a curl command. Everything stays on your machine. Full CLI reference Command Description Cloud tunr deploy [dir] Build & host a project; --name , --port , --env KEY=VAL tunr apps List your cloud apps tunr apps logs Stream logs; --follow , --tail N tunr apps delete Delete an app Tunnels tunr share -p PORT Expose a local port over HTTPS tunr share -p PORT -s NAME Custom subdomain (Pro) tunr share --route /PATH=PORT Map URL paths to local ports tunr share -p PORT --password PASS Basic authentication tunr share -p PORT --ttl 1h Auto-close after a duration tunr share -p PORT --demo Read-only demo mode tunr share -p PORT --freeze Serve last-good response on crash tunr share -p PORT --inject-widget Inject the feedback widget tunr share -p PORT --auto-login "Cookie: s=demo" Auto-inject an auth cookie tunr share -p PORT --domain HOST Custom domain tunr share -p PORT --qr Print a QR code for the URL tunr share -p PORT --auth-token TOKEN Bearer token protection tunr share -p PORT --allow-ip CIDR IP whitelist tunr share -p PORT --header-add/-replace/-remove Rewrite headers tunr share -p PORT --x-forwarded-for --original-url Proxy headers tunr share -p PORT --cors-origin ORIGIN CORS preflight tunr share -p PORT --proxy URL HTTP/SOCKS5 proxy tunr share -p PORT --region ams Relay region hint (single EU relay today) tunr share -p PORT --json JSON output for CI tunr tcp -p PORT / tunr udp -p PORT / tunr tls -p PORT Raw tunnels over WebSocket (experimental) tunr up / tunr down Start/stop everything in .tunr.json tunr start / tunr stop / tunr status Daemon mode tunr service install|status|uninstall System service Everything else tunr login / tunr logout Authentication tunr open / tunr logs / tunr replay Inspector tunr mcp Start the MCP server (stdio) tunr config init / tunr config show .tunr.json tunr doctor Diagnose your setup tunr update / tunr uninstall / tunr version Maintenance Global flags: --relay URL (point at your own relay), --verbose . SDKs (tunr.html#sdks) Python — pip install tunr from tunr import TunrClient , TunnelOptions client = TunrClient () tunnel = client .share (port = 3000 ) print (tunnel .public_url ) db_tunnel = client .tcp (port = 5432 ) dns_tunnel = client .udp (port = 53 ) tls_tunnel = client .tls (port = 8443 ) opts = TunnelOptions ( subdomain = "myapp" , password = "demo123" , allow_ips = ["10.0.0.0/8" ], freeze = True , inject_widget = True , proxy = "http://proxy:8080" , ttl = "2h" , ) tunnel = client .share (port = 8080 , opts = opts ) requests = client .get_requests (tunnel .subdomain ) client .replay_request (tunnel .subdomain , requests [0 ]["id" ], port = 3000 ) metrics = client .get_metrics () # Prometheus text health = client .health_check () # {"status": "ok"} tunnel .close () Node.js — npm install @tunr/cli import { TunrClient } from '@tunr/cli' const client = new TunrClient ( ) const tunnel = await client . share ( 3000 ) console . log ( tunnel . publicUrl ) const dbTunnel = await client . tcp ( 5432 ) const dnsTunnel = await client . udp ( 53 ) const tlsTunnel = await client . tls ( 8443 ) const appTunnel = await client . share ( 8080 , { subdomain : 'myapp' , password : 'demo123' , allowIps : [ '10.0.0.0/8' ] , freeze : true , injectWidget : true , proxy : 'http://proxy:8080' , ttl : '2h' , } ) tunnel . on ( 'ready' , ( ) => console . log ( 'Tunnel live' ) ) tunnel . on ( 'error' , ( err ) => console . error ( err ) ) tunnel . on ( 'exit' , ( ) => console . log ( 'Tunnel closed' ) ) const requests = await client . getRequests ( 'myapp' ) await client . replayRequest ( 'myapp' , requests [ 0 ] . id , 3000 ) await tunnel . close ( ) Configuration (.tunr.json ) (tunr.html#configuration-tunrjson) tunr config init { "$schema" : " https://tunr.sh/schema/.tunr.schema.json" , "port" : 3000 , "inspectorEnabled" : true , "dashboardPort" : 19842 , "mcp" : { "enabled" : true } } Architecture (tunr.html#architecture) Browser ──▶ relay.tunr.sh ──┬── [WebSocket] ──▶ tunr CLI ──▶ localhost:PORT (tunnel) │ └── control plane ──▶ tunr-runner ──▶ gVisor sandbox (cloud app) │ Postgres + route cache Tunnels. The CLI starts a local proxy with an embedded inspector and opens one WebSocket to the relay. The relay issues a *.tunr.sh subdomain and terminates HTTPS. HTTP, WebSocket, TCP, UDP and TLS all multiplex over that single connection — a typed message discriminator routes them. Cloud. tunr deploy uploads a tarball to the control plane, which hands it to tunr-runner . The runner builds with Nixpacks and runs the result in a gVisor sandbox with cgroup quotas. The relay routes the subdomain straight at the container, waking it if it's asleep. Scale to zero. Apps move HOT → WARM → STOPPED on an idle timer. WARM is a cgroup memory reclaim followed by a pause, which cuts real memory cost by ~55% while keeping wake latency around 150 ms. Health-check probes are answered at the edge so a monitored app can still fall asleep; search crawlers get the real page but can't keep the app awake. Observability. Prometheus metrics at /metrics , K8s probes at /healthz and /readyz on the inspector port. Self-hosting. docker-compose.yml runs the tunnel stack (relay + Caddy + Postgres); docker-compose.runner.yml adds the cloud runner. Point the CLI at it with --relay https://tunnel.yourcompany.com or TUNR_RELAY_URL . See (https://github.com/tunr-dev/tunr/blob/main/docs/SELF_HOSTING.md) docs/SELF_HOSTING.md . Security (tunr.html#security) Auth tokens live in the OS keychain , never in a dotfile All relay traffic over TLS 1.3 . HTTP tunnels terminate TLS at the relay, like any hosted tunnel; self-host the relay (--relay ) if that matters to you Cloud apps run under gVisor , not bare containers .env files are excluded from deploy uploads by default The CLI ships no telemetry, no analytics, no phone-home Supply chain: go mod verify + govulncheck in CI, cosign-signed checksums Found a vulnerability? Don't open a public issue — see (https://github.com/tunr-dev/tunr/blob/main/SECURITY.md) SECURITY.md . Roadmap (tunr.html#roadmap) Honest status. "Preview" means it works but the edges are sharp; "planned" means there is no code yet. Status HTTP/WS, TCP, UDP, TLS tunnels ✅ Stable Demo features (freeze, demo, widget, auto-login) ✅ Stable Access control (password, token, IP, TTL) ✅ Stable Inspector + replay, Prometheus, service install ✅ Stable Python / Node SDKs ✅ Stable Self-hosted tunnel relay ✅ Stable tunr deploy + tunr apps + logs (v0.6.1+) 🚧 Preview MCP cloud tools (tunr_deploy , tunr_app_logs , …) (v0.6.1+) 🚧 Preview Scale-to-zero (sleep/wake) 🚧 Preview Self-hosted cloud runner 🚧 Preview Role-based sharing (viewer/commenter/editor, --org acme.com ) 📋 Planned Per-app SQLite + snapshots 📋 Planned tunr rollback (code and data) 📋 Planned Multi-region relay (--region is accepted; one EU relay today) 📋 Planned Persistent TCP/UDP ports 📋 Backlog GUI desktop app 📋 Backlog Comparing tunr's tunnel against ngrok, Cloudflare Tunnel, LocalXpose and localtunnel: (https://github.com/tunr-dev/tunr/blob/main/docs/compare-tunnels.md) docs/compare-tunnels.md . Contributing (tunr.html#contributing) Contributions are welcome — read (https://github.com/tunr-dev/tunr/blob/main/docs/CONTRIBUTING.md) CONTRIBUTING.md first. Good places to start are issues labelled (https://github.com/tunr-dev/tunr/labels/good%20first%20issue) good first issue and (https://github.com/tunr-dev/tunr/labels/help%20wanted) help wanted . make check # vet + lint + test + govulncheck make pre-push # the above, plus a build The relay is a separate Go module and isn't covered by the Makefile: cd relay && go build ./cmd/server && go test ./... Community & support (tunr.html#community--support) Bugs & feature requests (https://github.com/tunr-dev/tunr/issues) GitHub Issues Questions & ideas (https://github.com/tunr-dev/tunr/discussions) GitHub Discussions Security reports (https://github.com/tunr-dev/tunr/security/advisories/new) Private advisory or (mailto:dev@tunr.sh) dev@tunr.sh Developer / contributor contact (mailto:dev@tunr.sh) dev@tunr.sh Everything else (billing, partnerships, press) (mailto:contact@tunr.sh) contact@tunr.sh Please follow our (https://github.com/tunr-dev/tunr/blob/main/CODE_OF_CONDUCT.md) Code of Conduct . License (tunr.html#license) This repository is dual-licensed by directory : Path Licence cmd/ , internal/ , sdk/ — the CLI and SDKs (https://github.com/tunr-dev/tunr/blob/main/LICENSE) Apache-2.0 OSI-approved open source. Use it, fork it, ship it commercially. relay/ — relay, control plane, runner (https://github.com/tunr-dev/tunr/blob/main/relay/LICENSE) PolyForm Shield 1.0.0 Source-available, not open source. Read it, modify it, run your own instance — but don't use it to compete with tunr. Running the whole stack yourself, for yourself or inside your company, is allowed under both. See (https://github.com/tunr-dev/tunr/blob/main/NOTICE) NOTICE for the exact boundary. (https://tunr.sh) tunr.sh · (https://tunr.sh/docs/) Docs · (https://discord.gg/tunr) Discord · (https://x.com/vural_met) Twitter/X Built with 💜 in Go About Ship the apps your agent builds. One command (or one MCP call) turns localhost into a live HTTPS URL — tunnels, deploys, scale-to-zero. (https://tunr.sh) (https://tunr.sh) tunr.sh Topics (https://github.com/topics/ai-agents) ai-agents (https://github.com/topics/claude-code) claude-code (https://github.com/topics/cli) cli (https://github.com/topics/deploy) deploy (https://github.com/topics/developer-tools) developer-tools (https://github.com/topics/golang) golang (https://github.com/topics/localhost) localhost (https://github.com/topics/mcp) mcp (https://github.com/topics/model-context-protocol) model-context-protocol (https://github.com/topics/ngrok-alternative) ngrok-alternative (https://github.com/topics/paas) paas (https://github.com/topics/reverse-proxy) reverse-proxy (https://github.com/topics/self-hosted) self-hosted (https://github.com/topics/tunnel) tunnel (https://github.com/topics/websocket) websocket Resources (tunr.html#readme-ov-file) Readme (tunr.html#Apache-2.0-1-ov-file) Apache-2.0 license Code of conduct (tunr.html#coc-ov-file) Code of conduct Contributing (tunr.html#contributing-ov-file) Contributing Security policy (tunr.html#security-ov-file) Security policy (https://github.com/tunr-dev/tunr/activity) Activity (https://github.com/tunr-dev/tunr/custom-properties) Custom properties Stars 5 stars Watchers 0 watching Forks (https://github.com/tunr-dev/tunr/forks) 0 forks (https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Ftunr-dev%2Ftunr&report=tunr-dev+%28user%29) Report repository Releases Packages Contributors Languages Footer (https://github.com) © 2026 GitHub, Inc. Footer navigation (https://docs.github.com/site-policy/github-terms/github-terms-of-service) Terms (https://docs.github.com/site-policy/privacy-policies/github-privacy-statement) Privacy (https://github.com/security) Security (https://www.githubstatus.com/) Status (https://github.community/) Community (https://docs.github.com/) Docs (https://support.github.com?tags=dotcom-footer) Contact Manage cookies Do not share my personal information You can’t perform that action at this time.