

pyngrok
is a Python wrapper for ngrok
that manages its own binary, making ngrok
available via a convenient Python
API.
ngrok
is a reverse proxy that opens secure tunnels from public URLs to localhost. It's perfect
for rapid
development (test webhooks, demo local websites, enable SSH access), establishing ingress to external
networks and devices, building production APIs (traffic policies, OAuth, load balancing), and more. And
it's made even more powerful with native Python integration through the pyngrok
client.
Installation
pyngrok
is available on PyPI and can be installed
using pip
:
pip install pyngrok
or conda
:
conda install -c conda-forge pyngrok
That's it! pyngrok
is now available as a package to our Python projects, and ngrok
is now available from
the command line.
Basic Usage
Open a Tunnel
To open a tunnel, use the connect
method,
which returns a NgrokTunnel
, and this returned object has a reference to the public URL generated by ngrok
in its
public_url
attribute.
from pyngrok import ngrok
http_tunnel = ngrok.connect()
ssh_tunnel = ngrok.connect("22", "tcp")
named_tunnel = ngrok.connect(name="my-config-file-tunnel")
internal_endpoint = ngrok.connect(addr="9000",
domain="some-endpoint.internal",
pooling_enabled=True)
The connect
method takes kwargs
as well,
which allows
us to pass additional tunnel configurations that are supported by ngrok
(or the name
of a tunnel defined in
ngrok
's config file), as documented here.
ngrok
's API
The api
method allows us to use the local
ngrok
agent to make requests against the ngrok
API, if we
have set an API key.
For example, here we reserve a ngrok
domain, then create a Cloud Endpoint with an associated traffic policy:
from pyngrok import ngrok
domain = "some-domain.ngrok.dev"
ngrok.api("reserved-domains", "create",
"--domain", domain)
ngrok.api("endpoints", "create",
"--bindings", "public",
"--url", f"https://{domain}",
"--traffic-policy-file", "policy.yml")
ngrok
's Edges
ngrok
has deprecated Edges and will sunset Labeled Tunnels on December 31st, 2025. See
this issue for more details.
To use ngrok
's Edges with pyngrok
, first configure an Edge on
ngrok
's dashboard (with at least one Endpoint mapped to the Edge), and define a
labeled tunnel in the ngrok
config file
that points to the Edge.
tunnels:
some-edge-tunnel:
labels:
- edge=my_edge_id
addr: http://localhost:80
To start a labeled tunnel in pyngrok
, pass its name
to connect.
from pyngrok import ngrok
named_tunnel = ngrok.connect(name="some-edge-tunnel")
Once an Edge tunnel is started, it can be managed through ngrok
's dashboard.
Command Line Usage
This package puts the default ngrok
binary on our path, so all features of ngrok
are
available on the command line.
ngrok http 80
For details on how to fully leverage ngrok
from the command line,
see ngrok
's official documentation.
Documentation
For more advanced usage, pyngrok
's official documentation is available
at https://pyngrok.readthedocs.io.
Integration Examples
Contributing
If you would like to get involved, be sure to review
the Contribution Guide.
Want to contribute financially? If you've found pyngrok
useful, sponsorship
would also be greatly appreciated!