Documentation

Home / WSL node

Use this when the panel cannot open http://YOUR_IP:8080 — residential NAT, CGNAT, or WSL with no public address.

When to use this

connect-home-node.sh installs the same daemon as ubuntu-node.sh, then publishes port 8080 through a Cloudflare quick tunnel.

  • Heartbeat still goes daemon → panel
  • Start / stop / files / console go panel → tunnel URL → daemon

Create the node in Admin first (location, name, copy the flt_ token). Same steps as Game node (VPS).

What you need

  • Ubuntu with systemd (plain Ubuntu 24.04, or WSL with systemd enabled)
  • Docker running (on WSL: Docker Desktop → Settings → Resources → WSL integration)
  • Root (sudo)
  • The Flutter Panel repo on that Ubuntu host
  • Port 8080 free — stop Windows npm run dev:daemon if it is bound to the same port

WSL notes

  1. 1

    Open Ubuntu as root or use sudo

  2. 2

    Enable Docker Desktop WSL integration

    Then docker info should work inside Ubuntu.
  3. 3

    Strip Windows line endings

    If the checkout lives on the Windows drive, do this every time you copy or edit the scripts from Windows:
    bash
    cd "/mnt/c/Users/YOU/path/to/Flutter Panel"
    sed -i 's/\r$//' install/*.sh
  4. 4

    Stop the Windows daemon

    Leave npm run dev / npm run dev:daemon stopped on this machine so they do not fight the Ubuntu daemon for port 8080.

Install

bash
cd /path/to/Flutter-Panel
sed -i 's/\r$//' install/*.sh

sudo bash install/connect-home-node.sh \
  --panel-url https://panel.example.com \
  --token flt_PASTE_THE_TOKEN \
  --node PASTE_THE_NODE_ID

--panel-url defaults to https://panel.flutter.software if you omit it.

The script will:

  • Run ubuntu-node.sh (daemon only, no panel)
  • Install cloudflared if needed
  • Start flutter-node-tunnel.service
  • Wait for a https://….trycloudflare.com URL
  • Write daemon config with that URL as --listen-url
  • Enable and start flutter-daemon

A successful run prints the node id, the tunnel URL, and systemctl status flutter-daemon.

After a reboot

For a stable URL, use a named Cloudflare tunnel, Tailscale, or a VPS with a public IP, and pass --listen-url / --no-tunnel.

Flags

FlagMeaning
--token TOKENflt_… token (required)
--node IDNode id (required)
--panel-url URLPanel URL (default https://panel.flutter.software)
--listen-url URLSkip Cloudflare; use this URL (public IP or Tailscale)
--no-tunnelDo not start Cloudflare; you must pass --listen-url
--port PORTDaemon port (default 8080)