diegosouzapw/OmniRoute · error

Failed to determine the Tailscale Funnel URL

Error message

Failed to determine the Tailscale Funnel URL

What it means

Funnel URL resolution failure: startTailscaleFunnel succeeded (or returned a tunnelUrl) but both funnelResult.tunnelUrl and a live query via getLiveTunnelUrl came back empty — the daemon is running yet no https://…ts.net funnel address can be determined. Typically Funnel just enabled but attrs/DNS haven't propagated, or the tailnet name isn't resolvable yet.

Solutions

  1. Retry after a few seconds — funnel DNS/attr propagation is often delayed
  2. Run `tailscale status`/`tailscale funnel status` to confirm Funnel is active
  3. Check MagicDNS + HTTPS cert provisioning on the tailnet
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/lib/tailscaleTunnel.ts:912 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25). Data as JSON: /api/errors/8102d48101747b60. Report an issue: GitHub.

Appendix: source

Thrown at src/lib/tailscaleTunnel.ts:912

        };
      }
    }

    const funnelResult = await startTailscaleFunnel(targetPort);
    if ("funnelNotEnabled" in funnelResult) {
      await updateStateFile({ lastError: null });
      return {
        success: false,
        funnelNotEnabled: true,
        enableUrl: funnelResult.enableUrl,
        status: await getTailscaleTunnelStatus(),
      };
    }

    const tunnelUrl =
      funnelResult.tunnelUrl || (await getLiveTunnelUrl((await resolveBinary()).binaryPath));
    if (!tunnelUrl) {
      throw new Error("Failed to determine the Tailscale Funnel URL");
    }

    await updateSettings({
      tailscaleEnabled: true,
      tailscaleUrl: tunnelUrl,
    });
    await updateStateFile({
      tunnelUrl,
      lastError: null,
    });

    return {
      success: true,
      tunnelUrl,
      apiUrl: getTailscaleApiUrl(tunnelUrl),
      status: await getTailscaleTunnelStatus(),
    };
  } catch (error) {

View on GitHub (pinned to a179ffed5b)