-
Notifications
You must be signed in to change notification settings - Fork 0
Reaching Your RomM Server
Lodor-NextUI never requires exposing RomM on the open internet. It supports three paths:
| Path | Best for | How |
|---|---|---|
| Home network / public URL | RomM reachable by IP/hostname on the same Wi-Fi (or an endpoint you already publish) | Enter the address in onboarding |
| Tailscale | Remote access over your own private network — no ports opened, no public endpoint | Built into onboarding: sign in by scanning a QR code |
| Cloudflare Access | A public endpoint protected by a machine (service) token | Pre-seed a cf_access block, then onboard |
Whichever path, your RomM must be 4.8.0 or newer (device pairing shipped in stock RomM at 4.8.0).
If RomM is reachable at a host IP:port from the device's Wi-Fi, this is the simplest path.
- Connect the device to the same Wi-Fi (NextUI Settings).
- In onboarding, choose Home network / public URL, pick
http(orhttpsif the endpoint has TLS), enter the address — e.g. host192.168.1.50, port8080— and pair.
A LAN address only works on the same network, and requires RomM to actually be reachable there.
The pak bundles its own userspace Tailscale client — no root, no kernel module, no store pak, and still no NextUI modification. Your RomM server sits on your private Tailscale network; the handheld joins it and reaches RomM through the tunnel.
- In onboarding, at "How will you reach RomM?", choose Tailscale (sign in with QR).
- The device shows a QR code (and the raw sign-in URL as a fallback). Scan it with your phone, sign in to your Tailscale account, and approve the new device.
- When the tunnel is up, the wizard continues to the server address. Enter your RomM node's Tailscale name.
tailscale serveis HTTPS-only. If your RomM is published withtailscale serve, the server must be entered ashttps://romm.your-tailnet.ts.net— pickhttpsat the protocol step. Plainhttp://to atailscale servehost is refused by Tailscale and shows up as a network error at pairing.
After onboarding, the tunnel comes up automatically whenever Lodor syncs — you don't manage it. Three maintenance entries live in the Lodor menu:
- Tailscale status — is the tunnel connected right now.
- Tailscale: Reconnect — restarts the tunnel using your saved sign-in; the first thing to try if the tunnel is wedged.
- Tailscale: Reset & forget — wipes the saved Tailscale login for a clean re-sign-in (the device also disappears from your Tailscale admin's device list once you remove it there).
The sign-in is interactive and yours: no auth-key files on the card, and the device appears in your Tailscale admin console like any other machine, where you can revoke it.
Your RomM sits behind a Cloudflare Tunnel at a public hostname, protected by Cloudflare Access. The device authenticates non-interactively with a service token — two headers on every request — so there's no browser login.
You'll need from your Cloudflare Zero Trust setup:
- your public RomM URL, e.g.
https://romm.example.com - a service-token Client ID and Client Secret
The onboarding wizard has no service-token field (a Cloudflare-gated endpoint would just show the login page to a plain URL). So for CF Access you pre-seed the cf_access block before onboarding. The wizard's server + pairing steps preserve any cf_access you've already written — so pairing then flows through Cloudflare correctly.
On the card, create .userdata/shared/Lodor/config.json (make the folders if absent) with:
{
"hosts": [
{
"root_uri": "https://romm.example.com",
"cf_access": {
"client_id": "<CF-Access-Client-Id>",
"client_secret": "<CF-Access-Client-Secret>"
}
}
]
}Then boot, connect Wi-Fi, and open Tools → Lodor (choose Home network / public URL at the reach step):
- At the server step, enter the same
https://romm.example.com(the wizard rewritesroot_uribut keeps yourcf_accessintact — it'll tell you: "Cloudflare Access config found — pairing will use it"). - Enter a RomM pairing code. The pairing request goes through Cloudflare — Lodor sends
CF-Access-Client-Id/CF-Access-Client-Secreton every request; Cloudflare validates them and forwards to RomM, which still authenticates with its own paired token independently (different headers, no collision).
Keep this
config.jsonprivate — the client secret and the RomM token are credentials. Lodor stores them here at rest and never prints them.
- Transport auth — the Cloudflare service token proves the device may reach the endpoint.
- RomM auth — the RomM token you pair proves the device to RomM itself.
Both live on the card and are treated as secrets. See Troubleshooting if pairing or sync fails.