paperclipai/paperclip · error · Error

Unsupported bind preset for onboard

Error message

Unsupported bind preset for onboard: ${opts.bind}. Use loopback, lan, or tailnet.

What it means

quickstartDefaultsFromEnv rejected the --bind option because onboard only supports the loopback, lan, and tailnet bind presets.

Solutions

  1. Pass --bind with one of: loopback, lan, tailnet.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cli/src/commands/onboard.ts:354 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@5716fe907e (2026-08-18). Data as JSON: /api/errors/60666289644b54eb. Report an issue: GitHub.

Appendix: source

Thrown at cli/src/commands/onboard.ts:354

    });
  }
  if (deploymentMode === "local_trusted" && process.env.PAPERCLIP_BIND !== undefined) {
    ignoredEnvKeys.push({
      key: "PAPERCLIP_BIND",
      reason: "Ignored because deployment mode local_trusted always uses loopback reachability",
    });
  }
  if (deploymentMode === "local_trusted" && process.env.PAPERCLIP_BIND_HOST !== undefined) {
    ignoredEnvKeys.push({
      key: "PAPERCLIP_BIND_HOST",
      reason: "Ignored because deployment mode local_trusted always uses loopback reachability",
    });
  }
  if (deploymentMode === "local_trusted" && process.env.HOST !== undefined) {
    ignoredEnvKeys.push({
      key: "HOST",
      reason: "Ignored because deployment mode local_trusted always uses loopback reachability",
    });
  }

  const ignoredKeySet = new Set(ignoredEnvKeys.map((entry) => entry.key));
  const usedEnvKeys = ONBOARD_ENV_KEYS.filter(
    (key) => process.env[key] !== undefined && !ignoredKeySet.has(key),
  );
  return { defaults, usedEnvKeys, ignoredEnvKeys };
}

function canCreateBootstrapInviteImmediately(config: Pick<PaperclipConfig, "database" | "server">): boolean {
  return config.server.deploymentMode === "authenticated" && config.database.mode !== "embedded-postgres";
}

export function isEphemeralNpxExecution(entrypoint = process.argv[1]): boolean {
  if (!entrypoint) return false;
  const normalized = entrypoint.replaceAll("\\", "/");
  return normalized.includes("/_npx/") || normalized.includes("/npm/_npx/");
}

View on GitHub (pinned to 5716fe907e)