{"record":{"id":"0790db7001e3961c","repo":"Mintplex-Labs/anything-llm","slug":"could-not-find-onboarding-information","errorCode":null,"errorMessage":"Could not find onboarding information.","messagePattern":"Could not find onboarding information\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"frontend/src/models/system.js","lineNumber":43,"sourceCode":"    return await fetch(url.toString(), {\n      headers: baseHeaders(),\n    })\n      .then((res) => {\n        if (!res.ok) throw new Error(\"Could not find indexes.\");\n        return res.json();\n      })\n      .then((res) => res.vectorCount)\n      .catch(() => 0);\n  },\n\n  /**\n   * Checks if the onboarding is complete.\n   * @returns {Promise<boolean>}\n   */\n  isOnboardingComplete: async function () {\n    return await fetch(`${API_BASE}/onboarding`)\n      .then((res) => {\n        if (!res.ok) throw new Error(\"Could not find onboarding information.\");\n        return res.json();\n      })\n      .then((res) => res.onboardingComplete)\n      .catch(() => false);\n  },\n  /**\n   * Marks the onboarding as complete.\n   * @returns {Promise<boolean>}\n   */\n  markOnboardingComplete: async function () {\n    return await fetch(`${API_BASE}/onboarding`, {\n      method: \"POST\",\n      headers: baseHeaders(),\n    })\n      .then((res) => res.ok)\n      .catch(() => false);\n  },\n  keys: async function () {","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/526360e320da9d1b36074be5ed64fe76e5bbfbbd/frontend/src/models/system.js#L25-L61","documentation":"Thrown by System.isOnboardingComplete on a non-2xx GET to /api/onboarding. The function drives the onboarding gate in the UI. The .catch() returns false, which means a server error forces the user back into the onboarding flow rather than surfacing the failure.","triggerScenarios":"Calling isOnboardingComplete() when the backend is not fully booted (503), when the onboarding route is blocked by a reverse proxy, or when an unauthenticated request hits a multi-user-mode guard.","commonSituations":"First-run after upgrade where migrations have not completed; the onboarding table/collection is missing from the database; a CDN/proxy strips the /onboarding path.","solutions":["Hit /api/onboarding directly in the browser and read the status/body.","Confirm the backend finished startup (check /api/ping returns {online:true}).","If on a reverse proxy, verify the /onboarding path is forwarded (note: no baseHeaders() is sent, so it must be reachable without auth).","Ensure database migrations ran so the onboarding state table exists."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// Ensure backend is up before probing onboarding state.\nif (!(await System.ping())) { /* skip onboarding check */ }","typeGuard":"/** @param {any} v @returns {v is boolean} */\nfunction isBool(v) { return typeof v === \"boolean\"; }","tryCatchPattern":"const complete = await System.isOnboardingComplete();\n// false can mean 'not complete' OR 'request failed' — treat defensively.","preventionTips":["Call System.ping() first to confirm reachability.","Treat a false result as 'show onboarding' since that path is safe.","Cache the resolved value for the session."],"tags":["network","onboarding","bootstrap"],"backgroundTag":null,"analyzedSha":"526360e320da9d1b36074be5ed64fe76e5bbfbbd","analyzedAt":"2026-08-13T01:45:47.170Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}