Building
Def object
The unit you author: a table, endpoint, function, agent or other Xano object, written as a plain TypeScript object passed to a factory such astable() or query(). A project registers its def
objects in xano/index.ts. How it works
Bundle
The JSON document the SDK compiles your def objects into, and the thing Xano imports.xanosdk export writes one; xanosdk deploy --bundle deploys one. A bundle can carry env values and
documentation tokens in cleartext. Bundle format
xano.lock
The committed file, at xano/xano.lock, that pins each object’s identity and public URL slug
across renames and environments. It also holds the landing records (landed) and the sync
baselines (synced). Every build writes it. Git and merges
Route manifest
xano/routes.gen.ts: the generated file a frontend imports instead of the backend’s defs. It
carries each endpoint’s verb and path, each realtime channel, and the request input types. It
imports no SDK code, so it adds nothing to a frontend bundle.
Typed frontend
Toolchain module
An installed add-on that extends the CLI rather than the workspace: it registers nothing inxano/index.ts, and instead contributes project files and runs hooks on export, deploy and
route-manifest writes. Its config lives in the package.json "xanosdk" block. The other kind,
a workspace module, ships def objects you register. Add-ons
Where a backend runs
Backend
A running Xano workspace-shaped thing a command can point at: your workspace, an ephemeral, a tenant, or a Xano Engine. A release is not a backend; it is an archive one can be stood up from. CLI overviewXano Engine
The Xano backend running on your machine. A barexanosdk deploy deploys to it, with no Xano
account. It runs the same imports, statements and tests as an ephemeral.
The Xano Engine
Ephemeral
A disposable Xano environment in Xano’s cloud, with its own URL and a lifetime of 1 to 24 hours.xanosdk deploy --ephemeral creates or replaces one. It is the usual source of a release.
Ephemerals
Workspace
Your real Xano workspace on your instance: the one your login is scoped to, which holds your Xano branches, your releases and your tables. Connect to XanoXano branch
A copy of a workspace’s logic: its endpoints, functions and other objects. Tables are not branched; every Xano branch shares the workspace’s one set of tables.promote lands a release on
a new Xano branch. Not the same thing as a git branch.
Where code goes
Live Xano branch
The Xano branch your workspace serves.promote --set-live and workspace branch set-live
switch it. Promote and go live
Tenant
A deployment under your workspace with its own URL and its own database, such asdev, stage
or prod. Tenants are created in Xano; xanosdk tenant deploy replaces what a tenant serves with
a release.
Tenants
Backend selector
How a backend is spelled on the command line:workspace, ephemeral[:name], local[:name],
tenant:<name>, or release:<name> where a command reads a release. One grammar for every
command. CLI overview
Tracked backend
The backend a project last deployed to, an ephemeral or a Xano Engine, recorded in.xano/deployed.json. A bare command follows it. A deploy to the workspace or a tenant never
becomes it, so a bare command cannot reach something real unasked.
CLI overview
Releases
Release
A stored, named record in your workspace holding the archive of a backend that came up and answered. It survives the environment it was cut from, and it is the only thing promote and tenant deploy land. ReleasesCut
Making a release from a running source (an ephemeral, a Xano branch of your workspace, or a throwaway tenant) withxanosdk release create. A cut writes nothing to the source.
Releases
Landing
Putting a release onto a real destination, through promote or a tenant deploy. A promote adds a Xano branch and never replaces what is live unless asked. A tenant deploy replaces what the tenant serves. Where code goesLanding record
For each destination, the objects this project actually wrote there: thelanded section of
xano.lock for a workspace or tenant, and the uncommitted .xano/ephemeral.json for an ephemeral.
It is the whole scope of --prune: an object the record does not name is never this project’s to
delete. Merge path
Release transfer
Copying a release’s archive to another workspace or instance withxanosdk release transfer. It
lands nothing; you promote the copy at the destination as a separate step.
Across workspaces
Embedded name
The release name recorded inside a release’s archive. An imported copy is stored under this name, so it is the key for finding a transferred release. Across workspacesContent digest
A release archive’s identity: a hash of its tar with every gzip layer removed. It is the one value every copy of a release shares, which is how a transfer decides a release is already there. Across workspacesName suffixing
What the platform does with a release name that is already taken: it stores the new release under that name plus a dash and four hex characters (v1.4.0-a019) and reports success. The CLI looks
under both spellings. Releases
Operation outcome
The three-valued answer a release write gives to “does what you asked for exist?”:yes, no or
unknown. Unknown means the write was sent and the answer was lost; it is settled by a read,
never a retry. Exit codes and outcomes
Keeping code and workspace in step
Sync baseline
One content digest per object, recorded inxano.lock under synced for each workspace and Xano
branch, each time the project and the workspace match (deploy --to workspace, a verified
promote, pull workspace, init --from workspace). workspace diff uses it to say which side
changed, and deploy --to workspace uses it to refuse overwriting an edit made in Xano.
Drift
Easily confused
Deploy, release, promote, tenant deploy
- Deploy writes your code to a backend: the Xano Engine (bare), an ephemeral
(
--ephemeral), or the workspace or a tenant (--to, the merge path). - Release (
release create) cuts a stored archive from a running backend. It changes nothing that serves traffic. - Promote lands a release on a new Xano branch of your workspace. It adds; it replaces nothing
live unless you pass
--set-live. - Tenant deploy lands a release on a tenant and replaces what the tenant serves.
Xano branch and git branch
A Xano branch lives in your workspace and holds logic only. A git branch lives in your repo and holds your source,xano.lock included. They are unrelated: promoting a release does not touch
git, and merging a pull request does not touch your workspace. These docs always say “Xano
branch” for the Xano kind.
Xano Engine and ephemeral
The same backend in two places: the Xano Engine on your machine, an ephemeral in Xano’s cloud. You develop on the Engine and cut releases from an ephemeral. The differences that change a command are listed once: where the Engine differs today.The agent skill and knowledge()
The agent skill (xanosdk agent-skill install) teaches your coding agent, on your machine,
how to build with the Xano SDK. Coding agents
A knowledge() item is a def object in your backend: markdown that Xano’s own AI reads
inside your workspace. It does not reach your coding agent.
AI agents and MCP servers
Next
- A symptom and its fix: Troubleshooting.
- How the pieces fit: How it works.