Overview
Local domains let you reach a local app at a name like myapp.local instead of localhost:3000. LocalCan advertises the name on your network over mDNS (Bonjour) and, when you want it, serves it through a built-in reverse proxy so the name works on standard ports and over HTTPS.
Linux
The Linux build doesn't publish mDNS, so .local domains won't resolve automatically. Use a real DNS entry, an /etc/hosts line, or a Public URL instead. See Installation.
How it works
LocalCan's reverse proxy sits between the browser and your app, forwarding each request to the right host and port. It handles HTTP on port 80 and HTTPS on port 443, including the WebSocket connections that dev servers like Vite and Next.js use for hot reload.
Running through the proxy gives you:
- Standard ports.
https://myapp.localworks with no port number, because the proxy listens on 80 and 443. - Any target. Forward a domain to any host and port, even another device, for example
https://myapp.localtohttp://192.168.50.5:3000. - Automatic HTTPS. The proxy terminates TLS with an auto-generated certificate. See Certificates.
- Traffic inspection. Watch requests between the browser and your app. See Inspect traffic.
- Host header rewrites. Present a production hostname to your app. See Headers.
- Basic auth. Put a password on a local domain during development. See Basic auth.
You can also skip the proxy and have LocalCan advertise the name only. The two setups follow.
Domain with proxy
With a proxy, LocalCan terminates HTTPS and forwards requests to the target IP or hostname you specify, even on a different port. This is the flexible default for local development.
To set one up in the desktop app:
- Click Add project in the sidebar and give it a name.
- Click Add App and set a name and the target, for example
http://localhost:3000. LocalCan creates a proxied.localdomain for the app automatically. - To add another name to the same app, click Add .local domain on the app's card.
- Trust the root certificate so the browser doesn't warn that the connection is not private.
The same setup as a project file:
services:
web:
target: http://localhost:3000
endpoints:
- url: my-app.local
scheme: https
Run localcan reload after dropping the file into ~/.localcan/projects/. See Configuration → Projects.
Domain only
Without a proxy, LocalCan only advertises the mDNS name, so you reach the app at its original port. A server on localhost:3000 answers at my-app.local:3000. Set proxy: false and requests skip the LocalCan proxy entirely.
In the desktop app, create the domain as above, then open the endpoint and set Routing Mode to Direct. In a project file, set proxy: false:
services:
web:
target: http://localhost:3000
endpoints:
- url: my-app.local
proxy: false
Run localcan reload to pick up the file. See Configuration → Projects.
© 2026 LocalCan™. All rights reserved.