# grpctunnel-py
A Python port of [grpctunnel](https://github.com/jhump/grpctunnel) - a library for carrying gRPC over gRPC.
## About
This library enables tunneling gRPC connections through other gRPC connections. This provides two primary use cases:
1. **Forward Tunnels**: Pin multiple RPC calls to a single server backend, providing session affinity even when
connecting through load balancers.
2. **Reverse Tunnels**: Allow servers to send RPC requests back to connected clients, enabling rich "server push"
capabilities and allowing servers behind NAT/firewalls to be accessed.
## Attribution
This is a Python port of the original Go implementation created by **Joshua Humphries**.
- **Original Author**: Joshua Humphries ([@jhump](https://github.com/jhump))
- **Original Repository**: https://github.com/jhump/grpctunnel
- **License**: Apache License 2.0
This Python port maintains compatibility with the original Go implementation, allowing Python and Go clients/servers to
interoperate seamlessly.
## Installation
```bash
pip install grpctunnel
```
Or with uv:
```bash
uv add grpctunnel
```
## Requirements
- Python 3.11+
- grpcio
- protobuf
## License
Copyright 2025 Daniel Valdivia
Ported from the original Go implementation by Joshua Humphries.
Original: https://github.com/jhump/grpctunnel
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## Links
- [Original Go implementation](https://github.com/jhump/grpctunnel)
- [gRPC Python](https://grpc.io/docs/languages/python/)
- [Protocol Buffers](https://protobuf.dev/)
- [uv - Python package manager](https://github.com/astral-sh/uv)
## Acknowledgments
Special thanks to **Joshua Humphries** ([@jhump](https://github.com/jhump)) for creating the original grpctunnel library
and for the excellent design that made this port possible.
Raw data
{
"_id": null,
"home_page": null,
"name": "grpctunnel-py",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "grpc, reverse-tunnel, rpc, tunnel",
"author": "Daniel Valdivia",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/d0/79/9386322fbb38a74f68acc7d96c45400c342f6039c8903ec656944cdec527/grpctunnel_py-0.1.0.tar.gz",
"platform": null,
"description": "# grpctunnel-py\n\nA Python port of [grpctunnel](https://github.com/jhump/grpctunnel) - a library for carrying gRPC over gRPC.\n\n## About\n\nThis library enables tunneling gRPC connections through other gRPC connections. This provides two primary use cases:\n\n1. **Forward Tunnels**: Pin multiple RPC calls to a single server backend, providing session affinity even when\n connecting through load balancers.\n\n2. **Reverse Tunnels**: Allow servers to send RPC requests back to connected clients, enabling rich \"server push\"\n capabilities and allowing servers behind NAT/firewalls to be accessed.\n\n## Attribution\n\nThis is a Python port of the original Go implementation created by **Joshua Humphries**.\n\n- **Original Author**: Joshua Humphries ([@jhump](https://github.com/jhump))\n- **Original Repository**: https://github.com/jhump/grpctunnel\n- **License**: Apache License 2.0\n\nThis Python port maintains compatibility with the original Go implementation, allowing Python and Go clients/servers to\ninteroperate seamlessly.\n\n## Installation\n\n```bash\npip install grpctunnel\n```\n\nOr with uv:\n\n```bash\nuv add grpctunnel\n```\n\n## Requirements\n\n- Python 3.11+\n- grpcio\n- protobuf\n\n## License\n\nCopyright 2025 Daniel Valdivia\n\nPorted from the original Go implementation by Joshua Humphries.\nOriginal: https://github.com/jhump/grpctunnel\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n## Links\n\n- [Original Go implementation](https://github.com/jhump/grpctunnel)\n- [gRPC Python](https://grpc.io/docs/languages/python/)\n- [Protocol Buffers](https://protobuf.dev/)\n- [uv - Python package manager](https://github.com/astral-sh/uv)\n\n## Acknowledgments\n\nSpecial thanks to **Joshua Humphries** ([@jhump](https://github.com/jhump)) for creating the original grpctunnel library\nand for the excellent design that made this port possible.\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Python port of grpctunnel - carry gRPC over gRPC",
"version": "0.1.0",
"project_urls": {
"Documentation": "https://github.com/dvaldivia/grpctunnel-py/blob/main/README.md",
"Homepage": "https://github.com/dvaldivia/grpctunnel-py",
"Original Go Implementation": "https://github.com/jhump/grpctunnel",
"Repository": "https://github.com/dvaldivia/grpctunnel-py"
},
"split_keywords": [
"grpc",
" reverse-tunnel",
" rpc",
" tunnel"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ccc8702a8404107a793bbca5d16e463bc8f0ffc9242d5ad1e590219fac037b60",
"md5": "aaf1fc50229302cf9d1359c2289129e2",
"sha256": "d3945f0366939a675e89ded1396034608e51438fcabc2053f2d0f61a0d5f0678"
},
"downloads": -1,
"filename": "grpctunnel_py-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "aaf1fc50229302cf9d1359c2289129e2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 57221,
"upload_time": "2025-10-21T06:26:43",
"upload_time_iso_8601": "2025-10-21T06:26:43.603997Z",
"url": "https://files.pythonhosted.org/packages/cc/c8/702a8404107a793bbca5d16e463bc8f0ffc9242d5ad1e590219fac037b60/grpctunnel_py-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d0799386322fbb38a74f68acc7d96c45400c342f6039c8903ec656944cdec527",
"md5": "bc4eb7f09bc2be562ab40b795a40318c",
"sha256": "21f7c045494d8132773f860202ad3ba71716dddeb08ab3eaf9a090da8e595121"
},
"downloads": -1,
"filename": "grpctunnel_py-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "bc4eb7f09bc2be562ab40b795a40318c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 22994619,
"upload_time": "2025-10-21T06:26:47",
"upload_time_iso_8601": "2025-10-21T06:26:47.764947Z",
"url": "https://files.pythonhosted.org/packages/d0/79/9386322fbb38a74f68acc7d96c45400c342f6039c8903ec656944cdec527/grpctunnel_py-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-21 06:26:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dvaldivia",
"github_project": "grpctunnel-py",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "grpctunnel-py"
}