Public Expose
Publish a local HTTP service through a temporary HTTPS hostname without opening an inbound router port.
How a request reaches localhost
PUBLIC
HTTPS visitor
Requests the generated cli-free.d1v.dev hostname.
INGRESS
Host router
Resolves the active binding from the request hostname.
RELAY
Authenticated agent
Carries HTTP over the CLI outbound WebSocket connection.
LOCAL
127.0.0.1:5173
The local HTTP server receives the original request.
Expose a local server
First prove that the service works locally:
curl http://127.0.0.1:5173Then start the public relay:
d1v expose 5173The command prints an https://*.cli-free.d1v.dev URL and stays in the foreground. Open that URL from a second network or verify it with curl.
Binding lifecycle
d1v expose list
d1v expose close <binding_id>Pressing Ctrl-C stops the foreground relay and closes the binding. The generated URL should be treated as temporary unless your workflow explicitly recreates it.
Protocol and security boundaries
- CLI-free expose targets HTTP services.
- The local side uses an authenticated, outbound-only relay.
- The public hostname is internet-accessible while the binding is active; your application still needs its own authorization for sensitive routes.
- Relay traffic is not currently zero-knowledge. Platform metadata follows the normal d1v persistence model.
Troubleshooting
| Symptom | Check |
|---|---|
Local curl fails | Start the service and confirm the exact port. |
| Public URL stops working | Confirm the d1v expose foreground process is still running. |
| Device or relay offline | Re-authenticate and inspect CLI logs before recreating the binding. |
| HTML loads but assets fail | Check application base URLs, host validation, and absolute asset paths. |