Custom addresses
Click the ✎ button next to any detected port in the workspace header to give it its own address. The dialog has two tabs. Either choice replaces what the port chip opens (custom address wins over direct and share links).
dg.run name
Pick any free label and the port is live at https://<name>.dg.run/ within seconds.
- First come, first served — one name per port, one port per name. If it's taken, try another.
- The dialog waits for worldwide DNS — after saving you'll see a checklist that flips green by itself; the link unlocks once it resolves. Opening it early lands on a retry page, not an error.
- Temporary — the name is deleted automatically when the session stops. There is nothing to clean up.
- Public — like share links, anyone with the URL can open it.
- To release early, reopen the dialog and click Remove.
Use this for demos and quick shares where a clean URL matters more than permanence.
Own domain
Serve a port on a domain you control — app.mydomain.com, mydomain.com, anything you own. Your DNS stays entirely yours: we never touch your zone; you only add records.
- Open the
✎dialog, switch to the Own domain tab, and type your domain (e.g.mydomain.com). - The dialog shows the session IP to point at. Create
Arecord(s) for your domain pointing at that IP:
- For an apex like
mydomain.com, we check bothmydomain.comandwww.mydomain.com— point both A records at the IP. The dialog bundles them automatically. - For a subdomain like
app.mydomain.com, oneArecord for that exact host is enough.
- Click save. Status shows pending with a per-name checklist (
A host → IP,✓or…). The dialog re-checks every ~5 seconds — leave it open and it flips to active by itself once DNS propagates (can take minutes to hours depending on your DNS provider's TTL). - When active, the port chip opens your domain.
Apex vs www
Apex input bundles www automatically. When both names resolve you pick the default address (preselected: non-www):
- The default serves your app.
- The other address 301-forwards to it. Note: websocket upgrades tunnel through — browsers can't follow redirects on sockets, so point realtime clients at the default host directly.
Deeper subdomains (app.mydomain.com) are single-host — no bundling, no forwarding choice.
TLS
Certificates are issued automatically once DNS resolves. Expect a short Securing connection... phase the first time — reload if the browser cached the pre-cert response. (.dg.run names usually secure faster; fully custom domains can take a little longer.)
Cleanup
- Removing the domain in the dialog drops our side immediately.
- Delete your A records yourself — your zone is untouched by us, and stale records would point at a recycled cloud IP after the session ends.
- Stopping the session also drops our side; your records still need manual deletion.
Limits
- One custom address per port: setting a
dg.runname replaces a BYO domain on the same port and vice versa. dg.runnames share one global namespace across all sessions — short, generic names go fast.- Certificates are rate-limited, so don't create and delete names/domains in a loop.
- Custom addresses need direct connections enabled. If the
✎button only offers share links, direct connections aren't available right now.