Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vale.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
StylesPath = .vale/styles
MinAlertLevel = suggestion
Vocab = ngrok
Packages = Google, MDX
[*.mdx]
BasedOnStyles = Google
BasedOnStyles = Google
2 changes: 1 addition & 1 deletion .vale/styles/Google/Headings.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
extends: capitalization
message: "'%s' should use sentence-style capitalization."
link: "https://developers.google.com/style/capitalization#capitalization-in-titles-and-headings"
level: warning
level: error
scope: heading
match: $sentence
indicators:
Expand Down
10 changes: 3 additions & 7 deletions .vale/styles/Google/WordList.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
extends: substitution
message: "Use '%s' instead of '%s'."
link: "https://developers.google.com/style/word-list"
level: warning
level: error
ignorecase: false
action:
name: replace
swap:
"(?:API Console|dev|developer) key": API key
"(?:cell ?phone|smart ?phone)": phone|mobile phone
"(?:e-mail|Email|E-mail)": email
"(?:e-mail|E-mail)": email
"(?:ok|Okay)": OK|okay
"(?:WiFi|wifi)": Wi-Fi
'[\.]+apk': APK
'3\-D': 3D
"tap (?:&|and) hold": touch and hold
"un(?:check|select)": clear
action bar: app bar
Ajax: AJAX
a\.k\.a|aka: or|also known as
Expand All @@ -30,18 +29,15 @@ swap:
in order to: to
long press: touch and hold
network IP address: internal IP address
Ngrok: ngrok
omnibox: address bar
regex: regular expression
SHA1: SHA-1|HAS-SHA1
sign into: sign in to
sign-?on: single sign-on
static IP address: static external IP address
stylesheet: style sheet
synch: sync
tablename: table name
tablet: device
touch: tap
url: URL

vs\.: versus
World Wide Web: web
116 changes: 116 additions & 0 deletions .vale/styles/config/vocabularies/ngrok/accept.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
(API|api)(s)?
(SDK|sdk)(s)?
[Dd]ogfood(ing)?
[Dd]oglab(bing)?
[Hh]omefooding
[Hh]omelab(s)?
[Hh]ostname(s)?
[Ii]ngress(ed|ing)?
[Oo]llama
[Pp]roxying
[Rr]insed
[Ss]imple[Ll]ogin
[Ss]mithery
[Vv]ijil
agentic
anonymized
authtoken
automations
Bazel
Buildkite
CloudFront
config
configs
coreruleset
CR[Ss]
CRD(s)?
datacenter(s)?
Datadog
DeepSeek
dev
devs
Docusaurus
doxx(ing)?
exfiltrate
footguns
freshrss
[Gg]eo
gists
GPU(s)?
Groq
HAProxy
hardcoded
immich
internet's
(IP|ip)(s)?
LLM(s)?
Lua
masse
MCP(s)?
middleware
monorepo
multicloud
multicluster
MySQL
nd
(nginx|NGINX)
ngrok
ngrokker(s)?
(OAuth|oauth)
operationalize
Postgre(s|SQL)
protonmail
[Pp]rox(y|ied)
proxmox
reframed
[Rr]epo
rollout
shortener
smidge
subcommand
toolset
Twilio
umami
uncopyable
upstreams
Vercel
Vin
VM(s)?
(VPN|vpn)(s)?
WIP(s)?
Wireguard
workshopping
shortener
[Ss]erverless
onboarded
Webflow
allowlist(s)?
pluggability
[Ff]ailover(s)?
[Dd]ataplane(s)?
[Cc]ontrolplane(s)?
[Ss]hinobi
[Pp]entest(s)?
[Cc]leartext
RPC(s)?
GPTBot
papercut(s)?
[Cc]omposable
architected
[Rr]untime(s)?
unregister
WAF(s)?
Uppal
[Pp]laintext
ASN(s)?
blocklist
namespace
GitHhub
livestream
[Kk]ubernetes
kube
kubectl
CIDR(s)?
discoverability
minikube
healthmed
Empty file.
2 changes: 1 addition & 1 deletion agent/cli.mdx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file is generated so the main repo is going to put this back.

Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ ngrok http 80 --url https://api.example.com --pooling-enabled
ngrok http 80 --url https://svc.internal
ngrok tcp 5432 --url tcp://postgres.internal:5432

# make your endpoint url addressable only from k8s clusters
# make your endpoint URL addressable only from k8s clusters
# where you've installed the ngrok k8s operator
ngrok http 80 --url https://example.namespace --binding kubernetes

Expand Down
4 changes: 2 additions & 2 deletions agent/config/v3.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -684,7 +684,7 @@ Below are a collection of different agent configurations to serve as examples fo

Here is a basic example configuration file, in this example we are authenticating
using our authtoken and defining a single HTTPS endpoint named `basic` with a
endpoint url `basic.ngrok.app` and an upstream url of `localhost:8080`.
endpoint URL `basic.ngrok.app` and an upstream URL of `localhost:8080`.

```yaml
# Version of the ngrok Agent Configuration file. Required.
Expand Down Expand Up @@ -802,7 +802,7 @@ agent:
# Endpoint Definitions
endpoints:
# Endpoint with no endpoint url defined to get a randomly assigned ngrok address.
# Endpoint with no endpoint URL defined to get a randomly assigned ngrok address.
- name: my_endpoint_name
#url: http:// # uncomment this line if you want your endpoint to be HTTP, by default it's HTTPS
upstream:
Expand Down
2 changes: 1 addition & 1 deletion agent/diagnose.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Internet Connectivity
TLS [ OK ]
Localhost Connectivity
Name Resolution [ OK ]
Ngrok Connectivity - Region: Auto (lowest latency)
ngrok Connectivity - Region: Auto (lowest latency)
Name Resolution [ OK ]
TCP [ OK ]
TLS [ OK ]
Expand Down
2 changes: 1 addition & 1 deletion agent/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ tolerance window, it terminates the connection and begins reconnecting.
ngrok's heartbeat mechanism allows it to recover from any type of network
outage, even those caused by packet loss, dynamic IP changes, interface changes
(for example, WiFi to LTE) or complete network outages.
(for example, Wi-Fi to LTE) or complete network outages.
The ngrok service also sends its own heartbeats to the agent which it uses to detect
liveness and terminate dead connections.
Expand Down
2 changes: 1 addition & 1 deletion api-reference/kubernetes-operators.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ Returns a 200 response on success
| `edge` | [Ref](#ref-fields) | the edge serving requests to this endpoint, if this is an edge endpoint |
| `upstream_url` | string | the local address the tunnel forwards to |
| `upstream_protocol` | string | the protocol the agent uses to forward with |
| `url` | string | the url of the endpoint |
| `url` | string | the URL of the endpoint |
| `principal` | [Ref](#ref-fields) | The ID of the owner (bot or user) that owns this endpoint |
| `traffic_policy` | string | The traffic policy attached to this endpoint |
| `bindings` | List<string> | the bindings associated with this endpoint |
Expand Down
2 changes: 1 addition & 1 deletion errors/err_ngrok_702.mdx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file is generated so the main repo is going to put this back.

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Too many connections! The tunnel session `SESSION` has violated the rate-limit p
### Additional Info

- ngrok limits the number of inbound connections to your tunnels.
- Limits are imposed on connections, not requests. If your HTTP clients use persistent connections aka HTTP keep-alive (most modern ones do), you'll likely never hit this limit.
- Limits are imposed on connections, not requests. If your HTTP clients use persistent connections such as HTTP keep-alive (most modern ones do), you'll likely never hit this limit.
- ngrok will return a `429` response to HTTP connections that exceed the rate limit.
- Connections to TCP and TLS tunnels violating the rate limit will be closed without a response.

Expand Down
2 changes: 1 addition & 1 deletion faq/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ configurable](/universal-gateway/tcp-addresses/#address-assignment).

## Will the ngrok agent work if my network changes?

Yes. The ngrok agent is robust to all network changes. If you switch wifi
Yes. The ngrok agent is robust to all network changes. If you switch Wi-Fi
networks or your modem restarts and you have a dynamic IP that changes, the
ngrok agent will automatically detect this condition and re-establish
connectivity with the ngrok cloud service. You don't need to take any manual
Expand Down
2 changes: 1 addition & 1 deletion getting-started/javascript.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ const ngrok = require('@ngrok/ngrok');
traffic_policy: '{"on_http_request": [{"actions": [{"type": "oauth","config": {"provider": "google"}}]}]}'
});

// Output ngrok url to console
// Output ngrok URL to console
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a passing question, is there any way to make this ignore code snippets? In this case, it's a good change, but I think it'd be weird if you got a vale error for a variable name

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do need to look into how to fine-tune it that way - I had to remove a rule enforcing lowercase "ngrok" because sometimes it appears in the code as NgrokFooBar 🙃

console.log(`Ingress established at ${listener.url()}`);
})();

Expand Down
2 changes: 1 addition & 1 deletion getting-started/kubernetes/endpoints.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ When you use Kubernetes Endpoints, you can:

- View changes to your local services immediately by [projecting your local development environment](https://ngrok.com/blog-post/kubernetes-dev-loop-projection) into a remote development or staging cluster.
- Allow services in multiple clusters to communicate over a service mesh that doesn't require firewalls, VPNs, or port forwarding.
- Securely access your customer's APIs or databases (aka [site-to-site connectivity](/guides/site-to-site-connectivity/)).
- Securely access your customer's APIs or databases (via [site-to-site connectivity](/guides/site-to-site-connectivity/)).
- Allow your Kubernetes-deployed services to call a webhook URL exposed with ngrok to speed up local development or CI jobs.

You also don't need to expose your local services to the public internet or modify the ingress rules to remote clusters.
Expand Down
2 changes: 1 addition & 1 deletion getting-started/python.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ listener = ngrok.forward(
traffic_policy='{"on_http_request": [{"actions": [{"type": "oauth","config": {"provider": "google"}}]}]}'
)

# Output ngrok url to console
# Output ngrok URL to console
print(f"Ingress established at {listener.url()}")

# Keep the listener alive
Expand Down
2 changes: 1 addition & 1 deletion getting-started/rust.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
.listen_and_forward(Url::parse("http://localhost:8080").unwrap())
.await?;

println!("Ngrok tunnel established at {}", domain);
println!("ngrok tunnel established at {}", domain);

// Wait indefinitely
tokio::signal::ctrl_c().await?;
Expand Down
6 changes: 3 additions & 3 deletions guides/api-gateway/monitor-ngrok.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ To see more details about a request or to replay it, you need to enable full cap
![Enable full capture settings](./img/monitor-ngrok/enableFullCaptureAccount.png)

- Then, return to your published API URL and refresh the browser page a few times to send fresh requests through ngrok.
- In the ngrok Traffic Inspector, click on the event at the top of the list.
- In the ngrok Traffic Inspector, click the event at the top of the list.

The event should now show all the request and response details and content.
If the full capture details don't appear, you may need to restart your ngrok agent in the terminal.
Expand Down Expand Up @@ -100,7 +100,7 @@ Now you can observe what happens to rate-limited requests and also use Traffic I

- Edit the `policy.yml` file and change `capacity` to `100` or another threshold you deem appropriate and restart your agent based on your form factor.

- In the Traffic Inspector, click on one of the `429` events, then click **Replay**.
- In the Traffic Inspector, click one of the `429` events, then click **Replay**.
Note that the request now responds without error because you increased the rate limit for the given IP address of that request.

![Replay after rate limit adjustment](./img/monitor-ngrok/replayLimit.png)
Expand Down Expand Up @@ -167,7 +167,7 @@ Your new widget will be available in the dashboard, allowing your support staff
Since the sample API never returns errors, an easy way to test the `Errors in the last hour` widget is to stop the sample API Docker container and then try to browse to the site on the public ngrok endpoint.
If you want to create widgets for other log information, you can see which fields are available by reading the JSON of any event you click on in the log inspector.
If you want to create widgets for other log information, you can see which fields are available by reading the JSON of any event you click in the log inspector.
### Create a notification
Expand Down
4 changes: 2 additions & 2 deletions guides/device-gateway/agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ wildcard domain for that factory's telemetry API.
## Create cloud endpoints for always-on API and database access

Since the telemetry API and database must be always accessible, create permanent cloud endpoints that route traffic to their
internal endpoints. Create an HTTPs cloud endpoint for the API using the ngrok platform API.
internal endpoints. Create an HTTPS cloud endpoint for the API using the ngrok platform API.

```curl
curl -X POST https://api.ngrok.com/endpoints \
Expand Down Expand Up @@ -234,7 +234,7 @@ curl -X POST \
```

<Note>
Ensure your chosen domain has the proper TLS/SSL certs provisioned in order to create a secure, working connection.
Ensure your chosen domain has the proper TLS/SSL certs provisioned to create a secure, working connection.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice. "in order to" is the bane of my existence

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

once we turn Vale back on in the dashboard "in order to" should fail the CI check and force you to delete it before merging 😈

</Note>

Now, `app.factory.com` is live—only for this session.
Expand Down
2 changes: 1 addition & 1 deletion guides/identity-aware-proxy/securing-with-oauth.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Secure your applications with OAuth 2.0
sidebarTitle: Secure with OAuth 2.0
---

Ngrok simplifies networking by creating secure ingress to any app, device, or service with a single command or line of code. It's an ingress-as-a-service platform that decouples ingress from infrastructure, removing the hassle of getting code online without provisioning proxies or VPNs.
ngrok simplifies networking by creating secure ingress to any app, device, or service with a single command or line of code. It's an ingress-as-a-service platform that decouples ingress from infrastructure, removing the hassle of getting code online without provisioning proxies or VPNs.

If you're exposing endpoints with ngrok, it's important to keep them safe and secure. One way to protect them is by using OAuth, which requires visitors to sign in to view your app or webpage. This guide will walk you through the process of securing your ngrok endpoints with OAuth 2.0.

Expand Down
6 changes: 3 additions & 3 deletions guides/running-behind-firewalls.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: Learn some troubleshooting and configuration tips for run ngrok beh

When you need to deploy ngrok behind a corporate firewall, there may be additional steps that you will need to take to make sure ngrok is working properly.

As background, this is usually not an issue. Firewalls usually allow outbound connections, which is what an ngrok Agent makes in order to establish a session with the ngrok service and subsequently your tunnel.
As background, this is usually not an issue. Firewalls usually allow outbound connections, which is what an ngrok Agent makes to establish a session with the ngrok service and subsequently your tunnel.

However, certain corporate firewalls have more restrictions around outbound connections. For example, we've seen that ngrok may be blocked on Fortinet firewalls.

Expand All @@ -20,7 +20,7 @@ $ ngrok diagnose
Name Resolution [ OK ]
TCP [ OK ]
TLS [ OK ]
Ngrok Connectivity
ngrok Connectivity
Name Resolution [ OK ]
TCP [ OK ]
TLS [ OK ]
Expand Down Expand Up @@ -86,7 +86,7 @@ kubectl logs -l "job-name=ngrok-diagnose"
TLS [ OK ]
Localhost Connectivity
Name Resolution [ OK ]
Ngrok Connectivity - Region: Auto (lowest latency)
ngrok Connectivity - Region: Auto (lowest latency)
Name Resolution [ OK ]
TCP [ OK ]
TLS [ OK ]
Expand Down
2 changes: 1 addition & 1 deletion guides/security-dev-productivity/hipaa-compliance.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Read ngrok's recommendations for setting up ngrok services in a HIP
---

The Health Insurance Portability and Accountability Act (HIPAA) is the US federal law enacted to protect patient health information.
The law sets stringent standards in order to secure electronic protected health information (ePHI/PHI).
The law sets stringent standards to secure electronic protected health information (ePHI/PHI).

This page contains ngrok's recommendations for setting up ngrok services in a HIPAA-compliant manner.

Expand Down
2 changes: 1 addition & 1 deletion guides/security-dev-productivity/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Create a tunnel authtoken for each developer. This authtoken will be specific to

## Developer installs ngrok agent and defines an internal endpoint in ngrok.yml

Have the developer [install the ngrok agent](https://dashboard.ngrok.com/get-started/setup/) and then have them run the command below in order to ensure their agent uses the proper authtoken you provisioned for them in the previous step.
Have the developer [install the ngrok agent](https://dashboard.ngrok.com/get-started/setup/) and then have them run the command below to ensure their agent uses the proper authtoken you provisioned for them in the previous step.

```bash
ngrok config add-authtoken <AUTHTOKEN_CREATED_ABOVE>
Expand Down
Loading