Install & Update
Manage the expose CLI lifecycle with these commands:
Install (macOS / Linux)
curl -sSL https://expose.host/install.sh | bash
Install (Windows PowerShell)
iwr -useb https://expose.host/install.ps1 | iex
Verify Installation: After installation, check the
version:
expose -version
Update: To update Expose to the latest version, run:
expose update
Uninstall: To uninstall Expose, run and confirm when
prompted:
expose uninstall
Expose a port
Start a tunnel to expose a local port to a public URL instantly.
expose -port 3000
Sticky tunnels
Always get the same subdomain for your applications across restarts.
expose -port 3000 -sticky
✨ Highlight: When you use the
-sticky flag, Expose ensures that the
same port on the same machine always receives the
same public URL. No more updating webhook URLs or sharing new links
every time you restart your tunnel.
Allow certain path(s)
Whitelist specific URL paths or patterns using wildcards. You can
specify the -allow flag multiple times to combine
filters.
expose -port 3000 -allow "/api/*" -allow "/webhooks/*"
✨ Pro Tip: Wildcards ending in /*
are inclusive. For example, /admin/*
matches both the /admin path exactly and everything
under it.
Deny certain path(s)
Block access to sensitive paths at the edge. Like allow rules,
you can specify -deny multiple times.
Note: Deny rules are computed after
allow rules. A request must pass the allow whitelist before
being checked against the deny blacklist.
expose -port 3000 -allow "/api/*" -deny "/api/v1/internal/*"
Allow certain method(s)
Filter incoming traffic to permit only specific HTTP methods like POST
or GET.
expose -port 3000 -allow "POST /*"
Deny certain method(s)
Reject requests that use unauthorized or unwanted HTTP methods at the
edge.
expose -port 3000 -deny "DELETE /*"
Webhook Testing
Testing webhooks (GitHub, Stripe, Twilio) locally used to be a pain.
With Expose, it's a 4-step process:
1
Start your Local Server: Make sure your
application is running on a local port (e.g., 3000).
2
Expose it: Run expose -port 3000.
Copy the public URL provided (e.g.,
https://abc12.expose.host).
3
Configure the Provider: Go to your GitHub or
Stripe webhook settings and paste the Expose URL as the Payload
URL.
4
Test & Debug: Trigger a test event from the
provider. You'll see the request hit your local server instantly.
Shield your local server (Pro Tip)
To avoid exposing your entire local app, you can restrict access to
just the webhook endpoint:
expose -port 3000 -allow "POST /api/webhooks/*"
Why this matters: Expose will instantly reject any
request that isn't a POST or doesn't match your webhook
path, blocking bots and unauthorized probes at the edge before they
even reach your machine.
Service Limits
Expose is a completely free service. To ensure
stability and reliability for everyone, fair-use limits apply.
-
Unlimited Session Duration: Tunnels stay active as
long as your client is connected.
-
5 Active Tunnels: You can run up to 5 concurrent
tunnels per machine.
Support & Feedback
Expose is community-focused, and we welcome your feedback. If you
encounter any bugs or have ideas for new features, please reach out.
Terms & Privacy
By using Expose, you agree to these simple rules designed to keep the
service fast and free for everyone.
Terms of Service
-
Fair Use: Do not use Expose for any illegal
activities, hosting malware, or bypassing security controls.
-
No Guarantees: The service is provided "as is"
without warranties. While we strive for 100% uptime, tunnels may
disconnect due to network conditions.
-
Resource Limits: Excessive bandwidth usage or
attempts to circumvent session limits may result in temporary IP
bans.
Privacy Policy
-
No Logs: We do not log the content of the traffic
passing through your tunnels.
-
Metadata: We only process transient metadata (like
IP addresses) for rate limiting and DDoS protection. This data is
not stored long-term.
-
No Signups: We explicitly don't want or need your
email address to provide this service.