sipeed/picoclaw · warning

Launch at login is not supported on this platform.

Error message

Launch at login is not supported on this platform.

What it means

Thrown in handleSave (web/frontend/src/components/config/config-page.tsx:700, message from i18n key pages.config.autostart_unsupported) when the 'launch at login' toggle is dirty and the backend reports the platform cannot do autostart. autoStartSupported is derived from the autostart status query (autoStartStatus?.supported !== false), which reflects the launcher backend's OS integration capabilities.

Source

Thrown at web/frontend/src/components/config/config-page.tsx:700

        const result = await postLauncherDashboardSetup(password, confirm)
        if (!result.ok) {
          throw new Error(result.error)
        }

        const clearedLauncherForm = savedLauncherForm ?? {
          ...launcherForm,
          dashboardPassword: "",
          dashboardPasswordConfirm: "",
        }
        setLauncherForm(clearedLauncherForm)
        if (savedLauncherForm) {
          setLauncherBaseline(savedLauncherForm)
        }
      }

      if (autoStartDirty) {
        if (!autoStartSupported) {
          throw new Error(t("pages.config.autostart_unsupported"))
        }
        const status = await updateAutoStartEnabled(autoStartEnabled)
        setAutoStartEnabled(status.enabled)
        setAutoStartBaseline(status.enabled)
        queryClient.setQueryData(["system", "autostart"], status)
      }

      const gateway = await refreshGatewayState({ force: true })
      showSaveSuccessOrRestartToast(
        t,
        t("pages.config.save_success"),
        t("navigation.config"),
        gateway?.restartRequired === true,
      )
    } catch (err) {
      toast.error(
        err instanceof Error ? err.message : t("pages.config.save_error"),
      )

View on GitHub (pinned to 49183d7e8d)

Solutions

  1. Turn the 'launch at login' toggle back off and save — the toggle state is only persisted when supported
  2. If you need autostart anyway, use the OS's own mechanism (systemd user unit, cron @reboot, Task Scheduler) to start the launcher
  3. On desktop installs, update the launcher backend so its platform autostart integration reports supported:true
Defensive patterns

Strategy: validation

Validate before calling

// before enabling/saving the toggle
const { data: autoStartStatus } = useQuery({ queryKey: ["system", "autostart"], queryFn: getAutoStartStatus })
if (autoStartDirty && autoStartStatus?.supported === false) {
  setFieldError(t("pages.config.autostart_unsupported"))
  return
}

Type guard

function isAutoStartSupported(status: unknown): boolean {
  return !!status && (status as { supported?: boolean }).supported !== false
}

Try / catch

try {
  await handleSave()
} catch (err) {
  if (err instanceof Error) setError(err.message)
}

Prevention

When it happens

Trigger: Toggling 'launch at login' on a platform where the backend's autostart integration (login-item/desktop-file registration) is unavailable — e.g. a headless Linux server, an unsupported distribution without a desktop environment, or an OS the backend has no launcher integration for — then saving.

Common situations: Running the dashboard on a server/NAS where there is no login session to hook; running in a container; the autostart status endpoint returned supported:false after an OS update; UI rendered the toggle because the status query had not loaded yet (undefined is treated as supported).

Related errors


AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15). Data as JSON: /api/errors/8a28339622809171. Report an issue: GitHub.