[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5611":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},5611,"tunnelto","agrinman\u002Ftunnelto","agrinman","Expose your local web server to the internet with a public URL.","https:\u002F\u002Ftunnelto.dev",null,"Rust",6699,526,45,50,0,11,49,4,74.57,"MIT License",false,"master",true,[26,27,28,29,30],"async-io","expose","localhost","rust","tunnel","2026-06-12 04:00:25","\u003Cp align=\"center\" >\n\u003Cimg width=\"540px\" src=\"https:\u002F\u002Frepository-images.githubusercontent.com\u002F249120770\u002F7ea6d180-b4ba-11ea-96ab-6c3b987aac9d\" align=\"center\"\u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">    \n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagrinman\u002Ftunnelto\u002Factions?query=workflow%3A%22Build+and+Release%22\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fagrinman\u002Fwormhole\u002Fworkflows\u002FBuild%20and%20Release\u002Fbadge.svg\" alt=\"BuildRelease\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fwormhole-tunnel\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Ftunnelto\" alt=\"crate\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagrinman\u002Ftunnelto\u002Fpackages\u002F295195\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fv\u002Fagrinman\u002Fwormhole?label=Docker\" alt=\"GitHub Docker Registry\">\u003C\u002Fa> \n  \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Falexgrinman\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Falexgrinman?label=%40AlexGrinman\" alt=\"crate\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n# `tunnelto`\n`tunnelto` lets you expose your locally running web server via a public URL.\nWritten in Rust. Built completely with async-io on top of tokio.\n\n1. [Install](#install)\n2. [Usage Instructions](#usage)\n3. [Host it yourself](#host-it-yourself)\n\n# Install\n## Brew (macOS)\n```bash\nbrew install agrinman\u002Ftap\u002Ftunnelto\n```\n\n## Cargo\n```bash\ncargo install tunnelto\n```\n\n## Everywhere\nOr **Download a release for your target OS here**: [tunnelto\u002Freleases](https:\u002F\u002Fgithub.com\u002Fagrinman\u002Ftunnelto\u002Freleases)\n\n# Usage\n## Quick Start\n```shell script\ntunnelto --port 8000\n```\nThe above command opens a tunnel and forwards traffic to `localhost:8000`.\n\n## More Options:\n```shell script\ntunnelto 0.1.14\n\nUSAGE:\n    tunnelto [FLAGS] [OPTIONS] [SUBCOMMAND]\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n    -v, --verbose    A level of verbosity, and can be used multiple times\n\nOPTIONS:\n        --dashboard-address \u003Cdashboard-address>    Sets the address of the local introspection dashboard\n    -k, --key \u003Ckey>                                Sets an API authentication key to use for this tunnel\n        --host \u003Clocal-host>\n            Sets the HOST (i.e. localhost) to forward incoming tunnel traffic to [default: localhost]\n\n    -p, --port \u003Cport>\n            Sets the port to forward incoming tunnel traffic to on the target host\n\n        --scheme \u003Cscheme>\n            Sets the SCHEME (i.e. http or https) to forward incoming tunnel traffic to [default: http]\n\n    -s, --subdomain \u003Csub-domain>                   Specify a sub-domain for this tunnel\n\nSUBCOMMANDS:\n    help        Prints this message or the help of the given subcommand(s)\n    set-auth    Store the API Authentication key\n```\n\n# Host it yourself\n1. Compile the server for the musl target. See the `musl_build.sh` for a way to do this trivially with Docker!\n2. See `Dockerfile` for a simple alpine based image that runs that server binary.\n3. Deploy the image where ever you want.\n\n## Testing Locally\n```shell script\n# Run the Server: xpects TCP traffic on 8080 and control websockets on 5000\nALLOWED_HOSTS=\"localhost\" cargo run --bin tunnelto_server\n\n# Run a local tunnelto client talking to your local tunnelto_server\nCTRL_HOST=\"localhost\" CTRL_PORT=5000 CTRL_TLS_OFF=1 cargo run --bin tunnelto -- -p 8000\n\n# Test it out!\n# Remember 8080 is our local tunnelto TCP server\ncurl -H '\u003Csubdomain>.localhost' \"http:\u002F\u002Flocalhost:8080\u002Fsome_path?with=somequery\"\n```\nSee `tunnelto_server\u002Fsrc\u002Fconfig.rs` for the environment variables for configuration.\n\n## Caveats for hosting it yourself\nThe implementation does not support multiple running servers (i.e. centralized coordination).\nTherefore, if you deploy multiple instances of the server, it will only work if the client connects to the same instance\nas the remote TCP stream.\n\nThe [version hosted by us](https:\u002F\u002Ftunnelto.dev) is a proper distributed system running on the the fabulous [fly.io](https:\u002F\u002Ffly.io) service. \nIn short, fly.io makes this super easy with their [Private Networking](https:\u002F\u002Ffly.io\u002Fdocs\u002Freference\u002Fprivatenetwork\u002F) feature.\nSee `tunnelto_server\u002Fsrc\u002Fnetwork\u002Fmod.rs` for the implementation details of our gossip mechanism.\n","`tunnelto` 是一个能够将本地运行的Web服务器通过公网URL暴露出去的工具。它使用Rust语言编写，基于异步I\u002FO技术（如tokio）构建，确保了高效稳定的性能表现。用户可以通过简单的命令行操作快速启动服务，并支持自定义端口、子域名等高级选项，同时提供了Docker镜像便于部署。适用于需要临时或长期公开访问本地开发环境、测试API接口等场景。",2,"2026-06-11 03:04:21","top_language"]