Skip to main content
Most of what the CLI prints when it stops is a refusal, not a crash: it checked something, did not like the answer, and wrote nothing rather than doing damage quietly. Find your symptom below. For what each exit code means, see Exit codes and outcomes.
Set XANOSDK_DEBUG=1 to append the untouched server response to any failure message.

The first deploy fails on this platform

The Xano Engine runs on macOS (Apple silicon) and Linux (x64, arm64). On Windows or an Intel Mac, a deploy to the Engine is refused before anything compiles:
Deploy the same code to an ephemeral in Xano’s cloud instead. It needs a Xano account, so connect to Xano first:
Use that script wherever a page says npm run xano:deploy. See where the Engine differs today.

The frontend shows no backend

A deploy that publishes no static site writes the backend’s URL into .env.local as VITE_XANO_HOST. Vite reads that file only when the dev server starts.
  • The dev server was already running. Stop npm run dev and start it again.
  • Your repo does not gitignore .env.local. The deploy refuses to write a per-machine URL into a file git would commit, and warns instead:
    Add .env.local to .gitignore, deploy again, and restart the dev server.
  • You deployed with --no-dev-env. Set VITE_XANO_HOST in .env.local yourself.
See The backend URL.

A release is refused from the Engine

A release is cut on your Xano instance, which cannot reach an Engine on your machine. Naming the Engine is refused, and so is a bare release create right after a deploy to the Engine, because a bare command follows the backend you last deployed to:
Deploy to an ephemeral, then cut the release from it:
See Releases.

Promote is refused

Each of these exits 2, lands nothing (except where noted), and is not waived by --yes. Full detail: What promote refuses.

SDK_WORKSPACE_CHANGED

deploy --to workspace refuses to overwrite objects that someone changed in Xano since the last sync:
Bring the edit into your code, commit it, and deploy again:
Pass --overwrite only when you mean to discard the edit made in Xano. See Drift.

Exit 9: the outcome is unknown

A write was sent and the answer was lost: a timeout, a dropped connection, a server error, or Ctrl-C mid-write. It may have landed. Do not run the same command again: run the resolveWith command it printed, and treat “absent” as proof only after resolveNotBefore. See Operation outcome.

SDK_RELEASE_NAME_TAKEN, or a release with a suffix

Release names are used once. You meet this code in two ways:
  • The name was already taken. Nothing was cut. Cut a new name, such as v1.4.1.
  • The name was taken while the cut ran. The platform stored your cut as v1.4.0- plus four hex characters and reported success. release create catches that, refuses rather than report success, and prints the release delete that removes the stray copy. Anything that addresses v1.4.0 does not reach it.
After an exit 9, look for both spellings in npx xanosdk release list before you cut again. See Name a release.

xano.lock has conflict markers

Every command that reads the lock refuses a file with unresolved merge markers:
Keep both sides’ entries, delete the markers, and run npm run xano:check. The full recipe is in Git and merges.

An ephemeral expired (exit 8)

An ephemeral lives 1 hour by default (--expires-hours sets 1 to 24 when a deploy creates it). A bare command that follows an expired one exits 8 and clears the project’s record of it:
Deploy a new one:
A release cut from an ephemeral survives its expiry, so cut what you want to keep before it goes. See Ephemerals.

Ephemerals are turned off on this instance

Not every instance has ephemerals enabled. A deploy to one says so:
The Engine, npx xanosdk export and npx xanosdk preflight still work. To ship without an ephemeral, stage on a Xano branch of your workspace and cut the release from it: When ephemerals are off.

The Engine restarted empty after local update

Rows on the Engine do not survive an update, a version change or a restart:
Deploy again to seed it:
Treat rows on the Engine as scratch data. See where the Engine differs today.

Still stuck

Then run the failing command again with XANOSDK_DEBUG=1 for the raw server response.

Next