Quickstart
Get a local app online with a public HTTPS URL in under two minutes. Install the agent, connect your account, and start a tunnel.
Overview
devgate exposes a service running on your machine at a public URL, with TLS terminated for you. The devgate agent runs on your host and opens a secure tunnel back to our edge. You'll need a devgate account — sign up free to grab your authtoken.
1 · Install the agent
On macOS or Linux, install with Homebrew — this keeps the agent up to date via brew upgrade devgate:
$ brew install dmitryhawk/devgate/devgate Or use the install script, which drops a single binary on your PATH:
$ curl -fsSL devgate.online/install.sh | sh Prefer a raw binary? Grab it from the downloads page and put it on your PATH yourself.
2 · Connect your account
Run this once. It stores your authtoken in the default config file so every tunnel is tied to your account:
$ devgate config add-authtoken <YOUR_AUTHTOKEN> Your authtoken is on your dashboard.
3 · Start your first tunnel
Point the agent at any local port. devgate prints a public HTTPS URL you can share instantly — it stays up as long as the command is running:
$ devgate http 3000 4 · Reserve a static endpoint
Ephemeral tunnels get a fresh URL each run. For a stable address that survives restarts, reserve a static endpoint in the dashboard under Endpoints, then bring all your reserved endpoints online at once with a bare run:
$ devgate Your plan caps how many endpoints you can reserve and keep online at once. See pricing for the limits per plan.
5 · Serve a local vhost
If your site is served as a named vhost — a Herd, Valet or docker setup you open at http://myapp.test rather than http://localhost:8080 — you need two flags, not one.
--host is where the agent connects. --host-header is what your service sees in the Host header. The agent forwards raw TCP and never rewrites Host , so without the second flag your vhost receives the public devgate hostname, fails to match its server_name, and answers with the wrong site or a 404.
$ devgate http 80 --host=myapp.test --host-header=rewrite rewrite sends whatever --host points at, adding :port when the port is not 80. When your service listens on loopback but answers to a vhost name, name it directly instead:
$ devgate http 8080 --host-header=myapp.test Wrong page, a 404, or “blocked request” through the tunnel? Local vhosts explained walks through every symptom.
Leave the flag off for a plain server on localhost. Passing the public hostname through is the default, and it is what an app generating absolute URLs, redirects or e-mail links needs. The same setting is editable per endpoint in the dashboard under Endpoints.