Troubleshooting
Common issues and solutions for the cloud compiler and CLI.
401 Unauthorized
Your session may have expired (sessions last 7 days). Re-authenticate:
quickback logout
quickback loginCompilation timeout
Large projects may take longer to compile. The cloud compiler uses Cloudflare Containers to run compilation in isolated environments. If you hit timeouts, try running the compiler locally.
Compiler stays on loading
The cloud gateway checks the compiler container with a five-second deadline.
A container that is warming or does not answer reports status: "loading";
status: "ready" requires the compiler itself to report readiness. The CLI
limits each health request to ten seconds and retries within a four-minute
elapsed-time budget before reporting an error. These limits include response
body reads, so a stalled connection cannot leave the CLI waiting indefinitely.
A successful container lifecycle check alone does not prove compilation works.
After restarting or replacing an unhealthy instance, check /health and compile
an example project. If HTTP remains unresponsive, inspect Cloudflare container
logs and networking rather than repeatedly restarting the same instance. You
can use the local Docker compiler while
the hosted service is unavailable.
"Command not found: quickback"
Make sure the CLI is installed globally:
npm install -g @quickback-dev/cliOr use npx:
npx @quickback-dev/cli create cloudflare my-appCompile errors
- Check your
quickback.config.tsexists and is valid - Ensure all tables in
quickback/features/have valid exports - Run
quickback buildwith--verbosefor detailed output
Drizzle rename prompts in CI/headless compile
Run quickback build with the updated Quickback CLI. SQLite migration targets
automatically select create for new tables and columns when their migration
plan enables auto-create; explicit rename hints take precedence. The CLI handles
repeated prompts without user input. PostgreSQL targets require rename hints.
If compilation fails with an interactive Drizzle message like:
drizzle-kit requested interactive rename input, but Quickback compile is running headlessMissing rename hint for table/column ...
then add explicit rename hints in quickback.config.ts:
export default defineConfig({
// ...
compiler: {
migrations: {
renames: {
tables: {
events_v2: "events",
},
columns: {
events: {
summary_text: "summary",
},
},
},
},
},
});tables and columns mappings are always new_name -> old_name.
If a hint is missing, compile now fails loudly with the exact key path to add, for example:
Expected hint key: compiler.migrations.renames.tables["events_v2"]Expected hint key: compiler.migrations.renames.columns["events"]["summary_text"]
If the CLI already selected create but generation still failed, inspect the
end of the reported Drizzle output for the unfinished prompt or process error.
A failed generate or postprocessor leaves existing migration history untouched.
Do not use raw drizzle-kit generate as an equivalent workaround for an auth
upgrade: it skips Quickback's OAuth client backfills and resource-grant cleanup.
Critical command failed: Generate features database migrations
drizzle-kit could not load the generated features schema. The usual cause on
D1 (splitDatabases: true) is a feature column that .references() a Better
Auth table:
userId: q.text().required().references(() => users.id, { onDelete: 'cascade' }) // illegalusers / user / organization / member live in AUTH_DB. Features live in
DB. SQLite cannot FK across them, and drizzle-kit cannot resolve users when
generating features migrations.
A Start chat compile (complete=false) still succeeds — it never runs
drizzle-kit. The complete compile (complete=true — Generated Backend, or
quickback compile) is the first time that command runs.
complete compile: wrangler bundle failed
The complete compile bundles the generated Worker with
wrangler deploy --dry-run. A typical cause is a named import the generated
define-action helper does not re-export:
No matching export in "src/features/tables/.quickback/define-action.ts" for import "reservations"The helper re-exports every table in that feature only. If reservations
is another table inside tables, import it from the action's own
../.quickback/define-action helper. If it belongs to a separate
reservations feature, keep defineAction from the action's own feature and
import only the external table from
../../reservations/.quickback/define-action (or the generated
../../reservations/reservations table module). Import query operators as q
from project ../../../lib/q; neither feature helper owns them. This is the
same rule for any waitlist/reservations-style cross-feature action: the local
helper supplies the bound action context, and each external feature supplies
its own tables.
Current compilers validate named imports from generated action helpers before
code generation. Start's definition-validation build (complete=false)
therefore rejects this source immediately with Invalid generated action-helper import(s) and names the owning feature, available table exports,
and corrective import. If an older compiler or an already-generated project
reaches Wrangler first, apply the same fix above and rebuild Generated Backend
before Deploy.
The compile sandbox has no network and bundles against the compiler image's
own dependencies, so anything you declare in
build.dependencies is not installed there.
Rather than fail on Could not resolve "yjs", the compiler skips the
bundle check for those projects and says so in the compile warnings:
Skipped the Worker bundle check — build.dependencies not installed in the
compiler image: yjs, y-prosemirrorThe compile still succeeds and the generated output is unchanged; unresolved
imports and missing named exports surface at wrangler deploy instead.
Store the Better Auth id as plain text:
userId: q.text().required().references() is only for another feature table in DB. See
Schema → References.
"Could not load organizations"
This can happen if your session token expired or if the API is temporarily unavailable. Re-login:
quickback logout
quickback login