Skip to main content

Download & Install

The fastest way to put anything on the internet.

PythonSDK

1

Get started with Python

Clone the ngrok Python SDK example and install dependencies:

git clone git@github.com:ngrok/python-sdk-example.git && cd python-sdk-example
pip install -r requirements.txt

Install the ngrok Python SDK:

pip install ngrok

Add ngrok to your app:

main.py

1import ngrok2 3def connect_ngrok():4    forwarder = ngrok.forward("localhost:8085", authtoken_from_env=True)5    print(f"Available at: {forwarder.url()}")6 7connect_ngrok()
2

Run your app

NGROK_AUTHTOKEN="<YOUR_AUTHTOKEN>" python main.py

Don’t have an authtoken? for a free account.

Open your ngrok URL in a browser to see it working!

You’re all set. What’s next?

1tp = """2on_http_request:3  # redirect users to Google to log in4  - actions:5    - type: oauth6      config:7        provider: google8 9  # allow logins *only* from acme.com10  - expressions:11    - "!actions.ngrok.oauth.identity.email.endsWith('@acme.com')"12    actions:13    - type: deny14"""15 16forwarder = ngrok.forward("localhost:8085", authtoken_from_env=True, traffic_policy=tp)
1tp = """2on_http_request:3  # verify webhook signatures from your provider4  - actions:5    - type: verify-webhook6      config:7        provider: github8        # access your signing key from a secure ngrok vault9        # no cleartext secrets in your policy, friend10        secret: ${secrets.get('webhook-vault', 'github-secret')}11"""12 13forwarder = ngrok.forward("localhost:8085", authtoken_from_env=True, traffic_policy=tp)
1tp = """2on_http_request:3  # redirect users to your OpenID provider to log in4  - actions:5    - type: openid-connect6      config:7        issuer_url: https://accounts.google.com8        # access your OIDC details from a secure ngrok vault9        client_id: ${secrets.get('auth-vault', 'oidc-client-id')}10        client_secret: ${secrets.get('auth-vault', 'oidc-client-secret')}11        scopes:12          - openid13          - email14"""15 16forwarder = ngrok.forward("localhost:8085", authtoken_from_env=True, traffic_policy=tp)
1tp = """2on_http_request:3  - actions:4    - type: basic-auth5      config:6        credentials:7          # add up to 10 username:password pairs, all stored safely in a vault8          - user01:${secrets.get('basic-auth-vault', 'password01')}9          - user02:${secrets.get('basic-auth-vault', 'password02')}10"""11 12forwarder = ngrok.forward("localhost:8085", authtoken_from_env=True, traffic_policy=tp)

Inspect every detail of your traffic

Watch the flow in real time, then dig into the headers, body, latency, response, and more for every request.

Peruse the Python SDK quickstart

Follow along to embed ngrok into your app and use Traffic Policy for auth and traffic transformation.

Bring your own domain

Paid feature

Create a DNS CNAME record to use your own domain name for your endpoint URL.

1forwarder = ngrok.forward(2  "localhost:8085",3  authtoken_from_env=True,4  domain="app.acme.com",5)

Add load balancing

Endpoint Pooling lets you automatically distribute traffic among any number of replicas of your app.

1import asyncio2 3import ngrok4 5async def forward_to_app():6    session = await ngrok.SessionBuilder().authtoken_from_env().connect()7    listener = await (8        session.http_endpoint()9        .domain("app.acme.com")10        # Endpoint pooling is currently only supported through the builder API, not ngrok.forward().11        .pooling_enabled(True)12        .listen_and_forward("http://localhost:8085")13    )14    print(f"Available at: {listener.url()}")15 16asyncio.run(forward_to_app())