Skip to main content
npx @xano/sdk init my-app writes one project with two halves: a Xano backend in xano/ and a Vite frontend in frontend/, under a single package.json. This page walks through the React scaffold. The Svelte one has the same backend half.

The layout

xano/index.ts starts empty but already compiles and deploys. Everything you author is a def object (a table(), a query(), an apiGroup()) registered on the workspace("my-app") it default-exports. How it works explains the model, and Your first change adds a table and an endpoint.

What to commit

Commit the whole project except what .gitignore already leaves out. Three files are easy to get wrong: The Engine pin looks like this:
The pin moves only when you say so: a deploy offers a newer Engine and never applies it without a yes, and npx xanosdk local update moves it on purpose. See Xano Engine. Two backend files are never committed: xano/.env holds the values of your backend’s environment variables, and xano/.secrets.json holds documentation tokens. .env.local holds the VITE_XANO_HOST the Engine deploy writes, and is per machine.

Which script deploys where

Your workspace is reached through a release, never through a script: deploy to an ephemeral with tests, cut a release, then promote it. Deploy to Xano covers that path.

Next