On this page
- Loopback is local to one network stack
- Draw the devices separately
- What address should the phone use?
- The server also has to listen on that interface
- 0.0.0.0 is a bind address, not usually a client destination
- IPv6 follows the same principle
- Simulator behavior can be misleading
- Containers add another meaning of localhost
- Virtual machines behave similarly
- Reverse proxies can give you a stable address
- localhost is still useful
- Why does a browser on the Mac work but the iPhone fail?
- Why does the Mac’s IP still fail?
- Private Wi-Fi addresses do not change this rule
- DHCP can make raw IPs change
- Do not replace localhost with a public IP casually
- A simple mental model
- Practical example: LM Studio on Mac, iPhone client
- Practical example: Ollama on Mac, iPhone client
- Remote access uses a different route
- Where BYOKchat fits
- Further reading
localhost does not mean “my main computer.”
It means:
this device itself.
So if an AI server runs on your Mac at:
http://localhost:1234
that URL works from the Mac because the Mac is the current device.
If you type the same URL into an iPhone app, localhost means the iPhone.
Unless the AI server is also running on the iPhone, the connection fails.
Loopback is local to one network stack
Operating systems reserve loopback addresses for communication inside the same host.
Common loopback addresses are:
127.0.0.1 IPv4
::1 IPv6
The name:
localhost
normally resolves to loopback.
Packets sent there do not travel across your Wi-Fi network to another computer.
Draw the devices separately
The mistake becomes obvious when you stop thinking of “the local network” as one computer.
The iPhone’s loopback and the Mac’s loopback are unrelated endpoints.
What address should the phone use?
Use an address that identifies the Mac from the phone’s network perspective.
On a home LAN that may look like:
http://192.168.1.25:1234
http://10.0.0.42:11434
Or a local hostname:
http://my-mac.local:1234
Or a private overlay-network name:
https://my-mac.example-tailnet.ts.net
The exact choice depends on your network.
The server also has to listen on that interface
Changing the URL on the iPhone is only half the fix.
If the Mac server binds only to loopback:
127.0.0.1:1234
then requests to:
192.168.1.25:1234
will not reach it.
The server must listen on an address accessible from the LAN or private network.
Depending on the runtime, the setting may be called:
Listen on network
Bind address
Host
Serve on LAN
Follow that server’s documentation.
0.0.0.0 is a bind address, not usually a client destination
Developers often see:
0.0.0.0:1234
in server configuration.
That usually means:
Listen on all IPv4 interfaces.
It does not mean the iPhone should connect to http://0.0.0.0:1234.
The client still needs the Mac’s actual reachable address, such as 192.168.1.25.
IPv6 follows the same principle
::1 is IPv6 loopback.
A real IPv6 address assigned to the Mac can be reachable from another device if routing/firewall policy permits it.
Do not confuse:
::1
with the Mac’s LAN IPv6 address.
Simulator behavior can be misleading
A simulator runs on the Mac and can share aspects of the Mac’s networking environment.
A URL that seems convenient in Simulator may not represent how a physical iPhone reaches the server.
Always test device-to-Mac networking on a real phone before shipping a local-network feature.
Containers add another meaning of localhost
Suppose your AI server runs inside Docker.
Then there can be several network namespaces:
Mac host localhost
container localhost
iPhone localhost
A service bound inside the container also needs the correct container port exposure to become reachable from the Mac and then from the LAN.
Debug the layers in order:
container → Mac → LAN → iPhone
Virtual machines behave similarly
A VM can have its own network stack and loopback interface.
If the model server runs in a VM, the iPhone may need:
- the VM’s bridged address;
- a host-forwarded port;
- a proxy on the Mac.
Again, localhost is relative to the process making the request.
Reverse proxies can give you a stable address
Instead of exposing the inference server directly, you can run a proxy on the Mac:
iPhone
→ https://my-mac.local/ai/
→ reverse proxy
→ http://127.0.0.1:1234/
The AI runtime can stay loopback-only while the proxy handles:
- TLS;
- authentication;
- stable paths;
- access policy.
This is often safer than making every local runtime listen on all interfaces.
localhost is still useful
Loopback is a security feature, not a limitation to remove by default.
Binding a development server to localhost means other devices cannot reach it directly.
That is exactly what you want for services that should remain private to one machine.
Only expand reachability when the use case requires cross-device access.
Why does a browser on the Mac work but the iPhone fail?
Because these are different clients:
Mac browser → Mac localhost → server
iPhone app → iPhone localhost → nothing listening
The success on the Mac proves the server works locally. It does not prove it is reachable over the LAN.
Why does the Mac’s IP still fail?
If you switch to:
http://192.168.1.25:1234
and it still fails, check:
- server binding;
- Mac firewall;
- both devices on the same routable network;
- guest Wi-Fi isolation;
- iOS local-network permission;
- transport-security policy;
- correct port and base path.
See How to Debug Local AI Connection Failures.
Private Wi-Fi addresses do not change this rule
Modern phones can use randomized/private Wi-Fi MAC addresses.
That affects how the router identifies the phone, not the meaning of localhost.
The server is still reached through the server machine’s network address.
DHCP can make raw IPs change
A Mac may be 192.168.1.25 today and receive a different address later.
More stable options include:
- router DHCP reservation;
- local hostname / mDNS;
- private overlay network with stable DNS;
- reverse proxy under a stable private name.
A production app should let users edit the base URL without losing chats or credentials.
Do not replace localhost with a public IP casually
If you search “what is my IP” and paste the router’s public address into the iPhone, that is a completely different networking path.
It may require NAT/port forwarding and can expose the service to the internet.
For a personal AI server, prefer LAN or a private VPN/overlay.
A simple mental model
When you see a URL, ask:
Who is making the request?
What does this hostname mean to that device?
Where is the server actually listening?
Is there a route between them?
That mental model solves far more networking bugs than memorizing special-case URLs.
Practical example: LM Studio on Mac, iPhone client
Mac server:
LM Studio listens on LAN port 1234
Mac address = 192.168.1.25
Mac-only URL:
http://localhost:1234/v1
Phone URL:
http://192.168.1.25:1234/v1
The model ID remains whatever LM Studio exposes.
Practical example: Ollama on Mac, iPhone client
Mac-only compatibility URL:
http://localhost:11434/v1
After correctly enabling network listening, a phone might use:
http://192.168.1.25:11434/v1
Do not assume LAN listening is enabled by default; configure the runtime intentionally.
Remote access uses a different route
When the phone leaves home Wi-Fi, 192.168.x.x is no longer routable from cellular.
A private overlay network can give both devices a private route across the internet without publishing the AI server publicly.
See How to Run a Private AI API Over Tailscale.
Where BYOKchat fits
A local-server connection UI should reject or warn about localhost when configured on an iPhone for a server expected to run elsewhere, while still allowing it on macOS for same-device servers. Showing the resolved endpoint and network scope makes the mistake easy to understand.