@xano/sdk 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/CHANGELOG.md +30 -4
  2. package/README.md +232 -334
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-MQKCS7QZ.js → agent-file-refresh-KVLR7M5Y.js} +13 -13
  5. package/dist/{answer-shape-LVV2SVBK.js → answer-shape-XGR2DGWY.js} +5 -5
  6. package/dist/{backend-dir-DGAQL4K5.js → backend-dir-IE4RMUFH.js} +12 -12
  7. package/dist/{backend-slot-NSCTWCUX.js → backend-slot-6HBWG5FN.js} +3 -3
  8. package/dist/bin.js +52 -52
  9. package/dist/{branch-ONWPJ4V6.js → branch-T2APKPVG.js} +9 -9
  10. package/dist/{branch-commands-R4PPN3Z7.js → branch-commands-HXXTCSOO.js} +26 -26
  11. package/dist/{capture-3JNUA6C2.js → capture-HBXFXZEW.js} +4 -4
  12. package/dist/{chunk-A6QTTJUI.js → chunk-3BJYQGAZ.js} +2 -2
  13. package/dist/{chunk-5W7DOMIU.js → chunk-3IYVHVM6.js} +2 -2
  14. package/dist/{chunk-ANHOEBTJ.js → chunk-3VX7VAQT.js} +4 -4
  15. package/dist/{chunk-FWXSTFN2.js → chunk-3WHWOKU4.js} +4 -4
  16. package/dist/{chunk-LXNQWHZM.js → chunk-44CWK6YC.js} +3 -3
  17. package/dist/{chunk-KCAL4QYP.js → chunk-4GDEEY2U.js} +4 -4
  18. package/dist/{chunk-KTGRGWZW.js → chunk-4NEBBKOP.js} +7 -7
  19. package/dist/{chunk-UKUIUS3E.js → chunk-4QBGE3EO.js} +5 -5
  20. package/dist/{chunk-IVKRT476.js → chunk-4QFBEKXI.js} +2 -2
  21. package/dist/{chunk-OOXWYAA4.js → chunk-57A5ZKPO.js} +1 -1
  22. package/dist/{chunk-A4KBHTMK.js → chunk-57B56I4B.js} +29 -29
  23. package/dist/{chunk-OPHB5ORL.js → chunk-57HMNJGB.js} +120 -76
  24. package/dist/{chunk-JTM5D7CT.js → chunk-5D6DGF3W.js} +8 -8
  25. package/dist/{chunk-E65QIWOO.js → chunk-5RLAF6RL.js} +4 -4
  26. package/dist/{chunk-MEE5RZ6G.js → chunk-5XVBT6CQ.js} +2 -2
  27. package/dist/{chunk-RX3EMQGN.js → chunk-5YBNXNKU.js} +2 -2
  28. package/dist/{chunk-NA3PXMEF.js → chunk-64WWE3EF.js} +1 -1
  29. package/dist/{chunk-2LVTBPW2.js → chunk-65SW2BA5.js} +3 -3
  30. package/dist/{chunk-D3XOH7E7.js → chunk-7DBM6XHR.js} +8 -8
  31. package/dist/{chunk-DIG3NITC.js → chunk-A4NNCI4O.js} +3 -3
  32. package/dist/{chunk-4APOHK7Y.js → chunk-AESE434J.js} +2 -2
  33. package/dist/{chunk-ERJNHEFV.js → chunk-AGD7F7YI.js} +3 -3
  34. package/dist/{chunk-K3LE5B5E.js → chunk-AGSCOISO.js} +139 -139
  35. package/dist/{chunk-NPXM6ZQY.js → chunk-AMBEITWL.js} +4 -4
  36. package/dist/{chunk-5T2CTWTB.js → chunk-BBPAXOU6.js} +5 -5
  37. package/dist/{chunk-WGA25EV5.js → chunk-BMCZQZMI.js} +4 -4
  38. package/dist/{chunk-CJPLBFFY.js → chunk-CJ76PSJT.js} +9 -9
  39. package/dist/{chunk-6NYLVUSZ.js → chunk-CV54PASI.js} +53 -50
  40. package/dist/{chunk-XCPF7BEJ.js → chunk-DEVGLLNZ.js} +5 -5
  41. package/dist/{chunk-JTUKLCXS.js → chunk-DXUICABI.js} +1 -1
  42. package/dist/{chunk-LAKHO2B7.js → chunk-ES5A66IH.js} +8 -8
  43. package/dist/{chunk-UDE5C2XN.js → chunk-F3557PVM.js} +3 -3
  44. package/dist/{chunk-HHFPIJGL.js → chunk-F6IKWAIU.js} +21 -17
  45. package/dist/{chunk-II747OWE.js → chunk-FV55SRQU.js} +7 -7
  46. package/dist/{chunk-SEUCZZCP.js → chunk-G57RYMKB.js} +3 -3
  47. package/dist/{chunk-MNVDVR3M.js → chunk-GMVW6ZZK.js} +4 -4
  48. package/dist/{chunk-MN2PB6WB.js → chunk-HLQH3AXB.js} +3 -3
  49. package/dist/{chunk-HSEQYBDO.js → chunk-HOOOOJJP.js} +3 -3
  50. package/dist/{chunk-IXUPUFCG.js → chunk-I5VEROXW.js} +2 -2
  51. package/dist/{chunk-UI4OPTYR.js → chunk-IV446ZLJ.js} +2 -2
  52. package/dist/{chunk-CYB7UQA2.js → chunk-JQOX6HW4.js} +5 -5
  53. package/dist/{chunk-OPG4DYX2.js → chunk-JSEVKRVJ.js} +3 -3
  54. package/dist/{chunk-46TUUNM3.js → chunk-JXKO6JT7.js} +36 -36
  55. package/dist/{chunk-FPBGAT5D.js → chunk-JZWUAEMO.js} +3 -3
  56. package/dist/{chunk-6R7S775T.js → chunk-K6CB5TKM.js} +2 -2
  57. package/dist/{chunk-OO63ZU46.js → chunk-K6PRKPFX.js} +8 -8
  58. package/dist/{chunk-W5ONYLOP.js → chunk-KQLACS4Q.js} +4 -4
  59. package/dist/{chunk-SEATQLFB.js → chunk-KUU7T4ZE.js} +31 -31
  60. package/dist/{chunk-KXYW3DRR.js → chunk-L3BDO2BI.js} +9 -9
  61. package/dist/{chunk-IRQCV3OT.js → chunk-LLS2WO2K.js} +4 -4
  62. package/dist/{chunk-7KLAMYMS.js → chunk-LZDA6SVD.js} +46 -45
  63. package/dist/{chunk-UCQ2VUTG.js → chunk-M6ZFSTIZ.js} +2 -2
  64. package/dist/{chunk-DYG5D3FD.js → chunk-M7GJ6YUF.js} +2 -2
  65. package/dist/{chunk-XXZZGXW2.js → chunk-MEIJDRHU.js} +2 -2
  66. package/dist/{chunk-QXTKSOFI.js → chunk-MF4W6FHU.js} +1 -1
  67. package/dist/{chunk-FSYVOCS7.js → chunk-MYLPOVX6.js} +12 -13
  68. package/dist/{chunk-ZH5R7NKN.js → chunk-N6BWB35H.js} +3 -3
  69. package/dist/{chunk-PWIXETG7.js → chunk-NGAODDLX.js} +5 -5
  70. package/dist/{chunk-Z5UCPWGU.js → chunk-NNB7VUCH.js} +23 -23
  71. package/dist/{chunk-QEZL5MPJ.js → chunk-NUU76247.js} +3 -3
  72. package/dist/{chunk-2CGPQ7IM.js → chunk-OGUMHW2X.js} +6 -6
  73. package/dist/{chunk-I2BGYNHD.js → chunk-OJPZEUPH.js} +7 -7
  74. package/dist/{chunk-OOGXZL7Z.js → chunk-OKNE3TWU.js} +2 -2
  75. package/dist/{chunk-KUTFFHUM.js → chunk-OVV2HXJ6.js} +2 -2
  76. package/dist/{chunk-7KGASMCE.js → chunk-PIPIA7K7.js} +8 -8
  77. package/dist/{chunk-AM4FKL4J.js → chunk-PL7AIAWS.js} +12 -12
  78. package/dist/{chunk-WL2DSNJV.js → chunk-Q22BMRPF.js} +2 -2
  79. package/dist/{chunk-AMTJ4G32.js → chunk-QOLOQ35F.js} +6 -6
  80. package/dist/{chunk-BUECLQXK.js → chunk-QZTJ2556.js} +4 -4
  81. package/dist/{chunk-O7QOWS6M.js → chunk-RXCT3OCU.js} +12 -12
  82. package/dist/{chunk-F5KILDDO.js → chunk-S5KQIFKJ.js} +122 -98
  83. package/dist/{chunk-CBYQ2ZN3.js → chunk-S5TEJIGP.js} +2 -2
  84. package/dist/{chunk-HMLGM2MW.js → chunk-SF2B7MZK.js} +3 -3
  85. package/dist/{chunk-FURLOAUM.js → chunk-SNGFEESM.js} +3 -3
  86. package/dist/{chunk-VD32O6KZ.js → chunk-SQPIECXD.js} +3 -3
  87. package/dist/{chunk-5YL5OC2G.js → chunk-SRX6B544.js} +5 -5
  88. package/dist/{chunk-CFSFBKHP.js → chunk-TEBS7FE6.js} +2 -2
  89. package/dist/{chunk-TTVAHCWP.js → chunk-TM5LRSBB.js} +2 -2
  90. package/dist/{chunk-ZZEIC5PT.js → chunk-TUEFTRC2.js} +5 -5
  91. package/dist/{chunk-EWCDPFW5.js → chunk-U6DR6464.js} +4 -4
  92. package/dist/{chunk-7TXBKK5G.js → chunk-UIEFE6FU.js} +7 -7
  93. package/dist/{chunk-3H3EPMFY.js → chunk-UJ6ZZJDD.js} +2 -2
  94. package/dist/{chunk-YTPGQV5C.js → chunk-V4IBHDIY.js} +11 -11
  95. package/dist/{chunk-XNCP4KYO.js → chunk-VQPDATQT.js} +1 -1
  96. package/dist/{chunk-4PQHO74B.js → chunk-VZ22VUAS.js} +2 -2
  97. package/dist/{chunk-BUJRS7XB.js → chunk-WYS6XVZ3.js} +2 -2
  98. package/dist/{chunk-QV3GXQRE.js → chunk-XIABDKFQ.js} +2 -2
  99. package/dist/{chunk-EESV6NU2.js → chunk-XJU6UAFV.js} +2 -2
  100. package/dist/{chunk-SBR2WZXG.js → chunk-XNZURZ7T.js} +59 -52
  101. package/dist/{chunk-WFG67AYS.js → chunk-Y6NO3DLQ.js} +3 -3
  102. package/dist/{chunk-37AHZ7JX.js → chunk-Y76ERHLK.js} +5 -5
  103. package/dist/{chunk-HHW5AWVD.js → chunk-YI76TURL.js} +30 -30
  104. package/dist/{chunk-ZVYN4FXD.js → chunk-YSLMMR2U.js} +14 -14
  105. package/dist/{chunk-ZTUNCVAR.js → chunk-Z2BRSQ6M.js} +49 -49
  106. package/dist/{chunk-D64XUF5Q.js → chunk-Z3SNX45M.js} +16 -16
  107. package/dist/{chunk-FMOEVAGT.js → chunk-Z4VN347O.js} +3 -3
  108. package/dist/{chunk-UWY3R4TS.js → chunk-ZHGWR45B.js} +22 -22
  109. package/dist/cli.d.ts +20 -18
  110. package/dist/cli.js +50 -50
  111. package/dist/{codegen-command-SW2AP7KR.js → codegen-command-L2OO6OTE.js} +63 -63
  112. package/dist/{commands-CVFYC4GK.js → commands-2E4JB3DB.js} +2 -2
  113. package/dist/{completion-AUEQC4XJ.js → completion-LPJIH5VQ.js} +11 -11
  114. package/dist/{config-JU6OQC77.js → config-QDCRKEWD.js} +4 -4
  115. package/dist/{deploy-command-RD6W7PXN.js → deploy-command-HJZNYCUY.js} +57 -57
  116. package/dist/{deploy-source-ULSWF2V7.js → deploy-source-5COWTBOC.js} +34 -34
  117. package/dist/{dev-env-sync-E2GFIVC5.js → dev-env-sync-GZ4QQJGV.js} +51 -51
  118. package/dist/{display-name-hint-DMORHANO.js → display-name-hint-AHCNH6TF.js} +11 -11
  119. package/dist/{emit-hOFbgzde.d.ts → emit-DqG6qddr.d.ts} +2 -2
  120. package/dist/env-example-refresh-DWQIOQYR.js +127 -0
  121. package/dist/{env-pull-command-QYQEOUE3.js → env-pull-command-Z4RLVEGJ.js} +46 -46
  122. package/dist/{env-target-KUWQYHZ7.js → env-target-ZHQUS5BO.js} +13 -13
  123. package/dist/{env-var-command-2ZAVIPNY.js → env-var-command-FKQ4VVQ6.js} +47 -47
  124. package/dist/{ephemeral-BMFY55BQ.js → ephemeral-L4KUOGEU.js} +9 -9
  125. package/dist/{ephemeral-command-UKHBT3OW.js → ephemeral-command-GRPFI3TD.js} +47 -47
  126. package/dist/{ephemeral-state-6TY4JIPA.js → ephemeral-state-VLYU2BXR.js} +11 -11
  127. package/dist/{generate-command-YN3HZWHG.js → generate-command-XNODJFDQ.js} +68 -68
  128. package/dist/{gitignore-AU5X5F3I.js → gitignore-VWRSZX5F.js} +16 -16
  129. package/dist/{guards-EJU2ONAX.js → guards-OPSGB6LG.js} +5 -5
  130. package/dist/{hosted-file-PSHJB3HX.js → hosted-file-S7YUQAH6.js} +2 -2
  131. package/dist/{impersonate-command-ZKE77GFT.js → impersonate-command-AEKIZHHK.js} +40 -40
  132. package/dist/{import-TBTOTU52.js → import-PHSSFFLA.js} +5 -5
  133. package/dist/index.d.ts +4 -4
  134. package/dist/index.js +10 -10
  135. package/dist/{init-command-NPXBMJNG.js → init-command-TI3HCKXZ.js} +55 -55
  136. package/dist/{init-modules-5TSTLGH5.js → init-modules-SGSX7XEY.js} +9 -9
  137. package/dist/{init-web-Y2PBNJTQ.js → init-web-6HX3YLQP.js} +2 -2
  138. package/dist/internal.d.ts +4 -4
  139. package/dist/internal.js +24 -25
  140. package/dist/{io-ZUKAGFVE.js → io-TAF4WXYQ.js} +5 -5
  141. package/dist/{keep-data-merge-TDSELE5U.js → keep-data-merge-GUGF7MVZ.js} +28 -28
  142. package/dist/{lambda-config-reconcile-OUZ4OYAB.js → lambda-config-reconcile-65U6I4KU.js} +3 -3
  143. package/dist/{landed-6VO7CX5P.js → landed-QA6PRTV2.js} +4 -4
  144. package/dist/{landing-record-W7VQ4KV4.js → landing-record-FCAWLCZU.js} +22 -22
  145. package/dist/{live-diff-2S7E3SBZ.js → live-diff-IM4W3ELT.js} +5 -5
  146. package/dist/local-engine-choice-FPJAZSSD.js +79 -0
  147. package/dist/{local-engine-command-5MTGZIZ4.js → local-engine-command-73NHWD6V.js} +92 -92
  148. package/dist/{local-engine-config-5U3SC434.js → local-engine-config-W3KB7RWM.js} +2 -2
  149. package/dist/{local-engine-deploy-TXAOYRGF.js → local-engine-deploy-Y4OAWL7K.js} +16 -16
  150. package/dist/{local-engine-process-6VZ7JJBP.js → local-engine-process-6YPJHKYM.js} +11 -11
  151. package/dist/{local-engine-state-TJWPWCC4.js → local-engine-state-OCW5YDD7.js} +3 -3
  152. package/dist/{local-engine-update-check-R5SPDVEJ.js → local-engine-update-check-X7TZGRFL.js} +7 -7
  153. package/dist/{lock-TS465GVY.js → lock-WXXC3QHL.js} +3 -3
  154. package/dist/{lock-commands-OBXAUSZX.js → lock-commands-PKDBNRSD.js} +55 -55
  155. package/dist/{login-command-CB3O3UDZ.js → login-command-V4U4FA5G.js} +27 -27
  156. package/dist/{logout-command-J5CP5HZZ.js → logout-command-TV3P545Z.js} +16 -16
  157. package/dist/{loop-UFHKSOQ4.js → loop-VKHGQ6MP.js} +6 -6
  158. package/dist/{marketplace-command-A5S25ZHF.js → marketplace-command-LEFOAEAV.js} +31 -31
  159. package/dist/{marketplace-resolve-GRXMK5YD.js → marketplace-resolve-ME7O7JBJ.js} +7 -7
  160. package/dist/{meta-client-FB73643X.js → meta-client-TEEECA5W.js} +14 -14
  161. package/dist/{module-manifest-GIKFNXPE.js → module-manifest-7YLGIRCY.js} +3 -3
  162. package/dist/node.d.ts +4 -4
  163. package/dist/node.js +56 -56
  164. package/dist/operation-outcome-GNDD35WL.js +51 -0
  165. package/dist/{output-target-6HNPK6KC.js → output-target-5FWX3NGZ.js} +17 -17
  166. package/dist/{plan-disclosure-BHYG7TZ7.js → plan-disclosure-QGL5UYQR.js} +16 -16
  167. package/dist/{plugin-contributions-X4V22PJQ.js → plugin-contributions-GNFTWDEB.js} +4 -4
  168. package/dist/{plugin-prompt-DKNQHW6Y.js → plugin-prompt-VEQGMZ4T.js} +4 -4
  169. package/dist/{plugin-questions-CQRVOWFK.js → plugin-questions-BGRL23GO.js} +3 -3
  170. package/dist/{preflight-command-NZ75PSRL.js → preflight-command-VKJKXRRI.js} +63 -63
  171. package/dist/{profile-command-KIRI4GA4.js → profile-command-P7A3BH26.js} +29 -29
  172. package/dist/{profile-pointer-UOO7JNFG.js → profile-pointer-HG7IXE4I.js} +4 -4
  173. package/dist/{profile-select-74TRDEPD.js → profile-select-45G5VPJK.js} +2 -2
  174. package/dist/{project-dependency-JGCJZ26H.js → project-dependency-Z4CKOCJI.js} +8 -8
  175. package/dist/{project-sdk-FOR4IOXL.js → project-sdk-JWZWGXXR.js} +3 -3
  176. package/dist/promote-command-KHTIK44I.js +141 -0
  177. package/dist/{prompt-5GUQTCSP.js → prompt-SURZOUUW.js} +3 -3
  178. package/dist/{publish-command-74HMEZ7E.js → publish-command-HGAB3H4A.js} +131 -60
  179. package/dist/{pull-command-VO5RRGZ5.js → pull-command-EUEWBRXZ.js} +66 -66
  180. package/dist/{pull-superseded-GGURV5J3.js → pull-superseded-TOT5S4QU.js} +3 -3
  181. package/dist/{release-command-ZHM5FA4M.js → release-command-WOVQAMUY.js} +64 -64
  182. package/dist/{release-ns-command-2TL26YOM.js → release-ns-command-WOQE2BDQ.js} +87 -87
  183. package/dist/{retry-command-Y5YJGOH3.js → retry-command-JRGMZZAC.js} +8 -8
  184. package/dist/{routes-manifest-3BNZIVST.js → routes-manifest-URFMAWJE.js} +5 -5
  185. package/dist/scaffold.js +2 -2
  186. package/dist/{secrets-file-NBBR6DYS.js → secrets-file-YWZWVJ52.js} +16 -16
  187. package/dist/{secrets-fill-command-X3HQ4JYN.js → secrets-fill-command-HIHK3VH2.js} +54 -54
  188. package/dist/{seed-GJHJSEUE.js → seed-24DTEY5S.js} +7 -7
  189. package/dist/{source-resolve-NTI3JFO6.js → source-resolve-OWD3MIEO.js} +23 -23
  190. package/dist/{static-host-WM24RG25.js → static-host-UIR2OLPQ.js} +9 -9
  191. package/dist/{status-command-RVMOLYPR.js → status-command-JKTHH5QE.js} +53 -53
  192. package/dist/{store-MR7IKXKK.js → store-5YAQS6KU.js} +6 -6
  193. package/dist/{store-CfgPaVPO.d.ts → store-zxw2go0f.d.ts} +3 -3
  194. package/dist/sveltekit.d.ts +5 -5
  195. package/dist/sveltekit.js +1 -1
  196. package/dist/{sync-contributions-KGCVRH2J.js → sync-contributions-RBB6JVOL.js} +9 -9
  197. package/dist/{table-ZBDPKMNH.js → table-MQFVYA4K.js} +8 -8
  198. package/dist/{tables-command-GAOXJPMA.js → tables-command-5Q4BSUNO.js} +39 -39
  199. package/dist/{tenant-GKXMOYLK.js → tenant-Q3LPVSSM.js} +10 -10
  200. package/dist/{tenant-command-FAJ7WZTH.js → tenant-command-BFVU2PEX.js} +84 -84
  201. package/dist/{test-command-53FRDZ32.js → test-command-F4VUU4QR.js} +40 -40
  202. package/dist/{tests-C55M5EQS.js → tests-5ZSDFVIJ.js} +6 -6
  203. package/dist/{token-44CKLYWD.js → token-TERSTNU4.js} +12 -12
  204. package/dist/{toolchain-hooks-BGZBDFAT.js → toolchain-hooks-QVUZ6HZ4.js} +2 -2
  205. package/dist/{toolchain-modules-MPPH633S.js → toolchain-modules-FD5ANV2U.js} +5 -5
  206. package/dist/tracked-backend-B4HTME4S.js +80 -0
  207. package/dist/{update-check-Q4HJHHL5.js → update-check-O4C2LCZH.js} +53 -53
  208. package/dist/{upgrade-command-C63HIBVH.js → upgrade-command-NVFWLMTA.js} +56 -56
  209. package/dist/{whoami-command-WC5EKB4W.js → whoami-command-YKNTISIV.js} +15 -15
  210. package/dist/{workspace-EJVWTIWX.js → workspace-GGVGE2S5.js} +5 -5
  211. package/dist/{workspace-binding-BRPPUSWG.js → workspace-binding-OS4ZOX4S.js} +14 -14
  212. package/dist/{workspace-command-Y6STVPYO.js → workspace-command-GTUNVN7K.js} +77 -77
  213. package/dist/{workspace-env-SIINWNMP.js → workspace-env-467C5KHM.js} +13 -13
  214. package/dist/{workspace-export-AIGM6LC7.js → workspace-export-3XTVGQVM.js} +5 -5
  215. package/dist/{writable-FYJBTJOU.js → writable-7SSWUQJ3.js} +3 -3
  216. package/dist/{xano-BSHYVFSE.js → xano-6RS5XQZE.js} +7 -7
  217. package/dist/{xanosdk-import-UKEO7R7O.js → xanosdk-import-E3WSIYUE.js} +9 -9
  218. package/dist/{xanosdk-project-MQTZKITV.js → xanosdk-project-KH5TZ2KI.js} +14 -14
  219. package/guides/README.md +1 -0
  220. package/guides/authoring.md +3 -5
  221. package/guides/bundle.md +45 -0
  222. package/guides/cli.md +32 -30
  223. package/guides/codegen.md +5 -4
  224. package/guides/codes.md +9 -9
  225. package/guides/deploying.md +63 -58
  226. package/guides/environment.md +14 -14
  227. package/guides/marketplace.md +7 -4
  228. package/guides/project-structure.md +14 -0
  229. package/llms/client.md +3 -4
  230. package/llms/errors.md +1 -1
  231. package/llms/tests.md +2 -2
  232. package/llms-full.txt +14 -15
  233. package/llms.txt +8 -8
  234. package/manifest.json +110 -107
  235. package/package.json +4 -4
  236. package/dist/env-example-refresh-WFKGILLY.js +0 -127
  237. package/dist/local-engine-choice-OXULXWEP.js +0 -79
  238. package/dist/operation-outcome-V4FUJI7V.js +0 -51
  239. package/dist/promote-command-IPDH5OBT.js +0 -141
  240. package/dist/tracked-backend-AJLHRGLF.js +0 -80
package/guides/cli.md CHANGED
@@ -41,44 +41,46 @@ xanosdk login --scope "<list>" # request these OAuth scopes instead
41
41
  xanosdk login --profile staging # sign in as a second named credential, leaving the others alone
42
42
  xanosdk <command> --profile staging # act as that profile for one run (-p is the short form)
43
43
  xanosdk workspace details # which instance/workspace am I bound to, and via which credential?
44
- xanosdk deploy ./xano/index.ts # compile + import into a live ephemeral (the dev loop) → URL
45
- xanosdk deploy ./xano/index.ts --static ./frontend/dist # also deploy a static frontend (onto the ephemeral)
46
- xanosdk deploy ./xano/index.ts --static ./frontend/dist --static-env PK=pk_live_1 # + extra public config
44
+ xanosdk deploy ./xano/index.ts # compile + import into the Xano Engine on this machine (the dev loop) → URL; no account needed
45
+ xanosdk deploy ./xano/index.ts --ephemeral # …or into a live ephemeral on Xano's cloud → URL
46
+ xanosdk deploy ./xano/index.ts --ephemeral --static ./frontend/dist # also deploy a static frontend (onto the ephemeral)
47
+ xanosdk deploy ./xano/index.ts --ephemeral --static ./frontend/dist --static-env PK=pk_live_1 # + extra public config
47
48
  xanosdk deploy --bundle ws.json # deploy an already-exported bundle
48
49
  xanosdk deploy ./xano/index.ts --open # …and open the deployed URL in your browser
49
- xanosdk deploy ./xano/index.ts --expires-hours 8 # the ephemeral's TTL when this deploy creates it: 1–24 hours (default: 1)
50
- xanosdk deploy ./xano/index.ts --keep-data --static ./frontend/dist --static-host docs # publish to a named static host — merge only: a replace deletes it, and a deploy creates only `default` (create `docs` in the dashboard first)
51
- xanosdk deploy ./xano/index.ts --static ./frontend/dist --static-routing spa # override URL resolution, spa|multipage (inferred from the bundle; rarely needed)
50
+ xanosdk deploy ./xano/index.ts --ephemeral --expires-hours 8 # the ephemeral's TTL when this deploy creates it: 1–24 hours (default: 1)
51
+ xanosdk deploy ./xano/index.ts --ephemeral --keep-data --static ./frontend/dist --static-host docs # publish to a named static host — merge only: a replace deletes it, and a deploy creates only `default` (create `docs` in the dashboard first)
52
+ xanosdk deploy ./xano/index.ts --ephemeral --static ./frontend/dist --static-routing spa # override URL resolution, spa|multipage (inferred from the bundle; rarely needed)
52
53
  xanosdk deploy ./xano/index.ts --keep-data # redeploy but keep table rows (merge instead of replace; seeds aren't re-written)
53
54
  xanosdk env set STRIPE_KEY --to workspace --yes # set ONE env var on a running backend, value piped on stdin (no deploy; never printed)
54
- xanosdk env unset STRIPE_KEY --to local-engine # clear one (--to workspace|ephemeral[:<name>]|local-engine[:<name>]|tenant:<name>, default: last deployed)
55
+ xanosdk env unset STRIPE_KEY --to local # clear one (--to workspace|ephemeral[:<name>]|local[:<name>]|tenant:<name>, default: last deployed)
55
56
  xanosdk publish ./frontend/dist # publish a built frontend alone — no compile, no backend import (default: last deployed)
56
- xanosdk publish ./frontend/dist --to ephemeral # …after a local-engine deploy: publish does not reach a local engine
57
- xanosdk deploy ./xano/index.ts --local-engine --static ./frontend/dist # the engine serves the build at http://<prefix>.localhost:<port>
57
+ xanosdk publish ./frontend/dist --to ephemeral # …or onto an ephemeral instead (after a local deploy, bare publish goes to the engine)
58
+ xanosdk deploy ./xano/index.ts --static ./frontend/dist # on the Xano Engine, the engine serves the build at http://<prefix>.localhost:<port>
58
59
  xanosdk publish ./frontend/dist --to workspace --branch v2 --yes # …onto the workspace, refused unless branch v2 is live
59
- xanosdk deploy ./xano/index.ts --local-engine # deploy to a local engine on this machine instead of an ephemeral (runs the version pinned in package.json)
60
- xanosdk deploy ./xano/index.ts --local-engine=~/Downloads/engine.tar.gz # override: run this archive, URL or version (v0.1.8), never touching the pin
61
- XANOSDK_LOCAL_ENGINE_OVERRIDE=v0.1.8 npm run xano:deploy:local-engine # the same override for every deploy in the shell
62
- xanosdk local-engine list # local engines on this machine, marking the ones xanosdk started
63
- xanosdk local-engine token # print its meta API bearer: XANO_META_TOKEN=$(xanosdk local-engine token)
64
- xanosdk local-engine stop <name> # stop one (--all: every one xanosdk started, and what a crashed one left running)
65
- xanosdk local-engine update # move this project's pinned engine to the latest (--version <v>: that one) and restart it — commit package.json
66
- xanosdk local-engine cache list # each cached engine version, its size, and the engines running on it
67
- xanosdk local-engine cache clear # remove every cached engine and its unpacked runtime (--version <v>: just that one); running ones are stopped first
60
+ xanosdk deploy ./xano/index.ts --local # the default, spelled out: the Xano Engine on this machine (runs the version pinned in package.json)
61
+ xanosdk deploy ./xano/index.ts --local=~/Downloads/engine.tar.gz # override: run this archive, URL or version (v0.1.8), never touching the pin
62
+ XANOSDK_ENGINE_OVERRIDE=v0.1.8 npm run xano:deploy # the same override for every deploy in the shell
63
+ xanosdk local list # Xano Engines on this machine, marking the ones xanosdk started
64
+ xanosdk local token # print its meta API bearer: XANO_META_TOKEN=$(xanosdk local token)
65
+ xanosdk local stop <name> # stop one (--all: every one xanosdk started, and what a crashed one left running)
66
+ xanosdk local update # move this project's pinned engine to the latest (--version <v>: that one) and restart it — commit package.json
67
+ xanosdk local cache list # each cached engine version, its size, and the engines running on it
68
+ xanosdk local cache clear # remove every cached engine and its unpacked runtime (--version <v>: just that one); running ones are stopped first
68
69
  xanosdk ephemeral list # list your ephemeral environments (--all-workspaces spans every workspace; --json: { ephemerals: [...] })
69
70
  xanosdk ephemeral get <name> # base URL, state, and expiry for one (<name> = the tenant name, e.g. ewap-8wz9-9e13, NOT the display name — `ephemeral list` shows it in bold)
70
71
  xanosdk ephemeral delete <name> --yes # destroy one
71
72
  xanosdk tables # the last-deployed backend's tables: id, guid, name (for release create --seed)
72
73
  xanosdk tables tenant:acme # …or name one
73
74
  xanosdk test run-all # run the tests the last-deployed backend carries (exits 5 on a failure)
74
- xanosdk test run-all --on local-engine # …or name one (--on ephemeral:<name>|tenant:<name>|workspace)
75
+ xanosdk test run-all --on local # …or name one (--on ephemeral:<name>|tenant:<name>|workspace)
75
76
  xanosdk test list # list the tests a backend carries, without running any
77
+ xanosdk test run "<name>" # run one test by its name
76
78
  xanosdk test run-all --kind unit # only one family (unit|workflow; default: both) — also on test list
77
79
  xanosdk test run-all --concurrency 4 # run 4 at once (default: 1); tests share the backend's database, so only when yours don't share state
78
80
  xanosdk impersonate # open what this project last deployed to in the builder (--guest = read-only; --url-only prints the URL; the URL is a session — treat it as a credential)
79
- xanosdk impersonate ephemeral:<tenant> # …or name one: local-engine[:<name>] or tenant:<name> (open your workspace from the Xano dashboard)
81
+ xanosdk impersonate ephemeral:<tenant> # …or name one: local[:<name>] or tenant:<name> (open your workspace from the Xano dashboard)
80
82
  xanosdk deploy ./xano/index.ts --test # THE RELEASE FLOW, step 1: stand it up and run its tests
81
- xanosdk release create v1 # …2: cut a release from the ephemeral this project last deployed to (after a local-engine deploy: --from ephemeral)
83
+ xanosdk release create v1 # …2: cut a release from the ephemeral this project last deployed to (after a local deploy: --from ephemeral)
82
84
  xanosdk release create v1 --from ephemeral:e4f2-9ab1 --description "what shipped" # …from a named source
83
85
  xanosdk release create v1 --from workspace --branch staging # …or from a branch of your workspace (default: what it serves)
84
86
  xanosdk release list # every release in this workspace, newest first, a description cut to one line (--json: { releases: [...] }, each with the origin show names)
@@ -94,7 +96,7 @@ xanosdk tenant list # every tenant under this workspace
94
96
  xanosdk tenant get acme # base URL and state for one
95
97
  xanosdk tenant deploy acme v1 # …or 3: land it on a customer tenant instead
96
98
  xanosdk tenant delete acme --yes # destroy one (by its NAME — a display name fails with exit 8 and names the tenant it belongs to)
97
- xanosdk pull release:v1 # refresh xano/ from a release: rewrites decoded files, keeps and names files you added, lists and confirms (also workspace, ephemeral[:<name>], local-engine, tenant:<name>)
99
+ xanosdk pull release:v1 # refresh xano/ from a release: rewrites decoded files, keeps and names files you added, lists and confirms (also workspace, ephemeral[:<name>], local, tenant:<name>)
98
100
  xanosdk pull release:v1 --yes # …skip the confirmation and the dirty-tree refusal (CI)
99
101
  xanosdk pull workspace --backend-dir ./backend # …when this project keeps its backend somewhere other than xano/ and nothing on disk says so (also on env pull)
100
102
  xanosdk generate release:v1 --out ./backend # write ONLY the decoded xano/ tree, no project around it (any source above, or a bundle path; --force replaces the files an earlier generate wrote, asks first when that loses your edits (--yes answers), and keeps and lists any others)
@@ -155,7 +157,7 @@ Every command that reads, writes or opens a running backend names it with one gr
155
157
  |---|---|
156
158
  | `workspace` | Your real workspace — the one your login is scoped to |
157
159
  | `ephemeral` / `ephemeral:<name>` | The ephemeral this project deployed to, or a named one — by its name (`e4f2-9ab1`, from `xanosdk ephemeral list`), not its display name |
158
- | `local-engine` / `local-engine:<name>` | The engine this project deployed to, or a named one from `xanosdk local-engine list`. Needs no Xano account |
160
+ | `local` / `local:<name>` | The engine this project deployed to, or a named one from `xanosdk local list`. Needs no Xano account |
159
161
  | `tenant:<name>` | A tenant on your instance |
160
162
  | `release:<name>` | A stored release — where a command reads one (`deploy`, `pull`, `generate`, `init --from`) |
161
163
  | a bundle path | Where a command takes a file (`deploy`, `generate`, `init --from`) |
@@ -166,20 +168,20 @@ takes **`--on`**, and a command whose subject IS the backend takes it positional
166
168
  `pull`, `generate`, `tables`, `impersonate`).
167
169
 
168
170
  **Leave it off and a command follows the backend this project last deployed to** — recorded
169
- in `.xano/deployed.json` by an ephemeral or local-engine deploy, and never by a deploy to your
171
+ in `.xano/deployed.json` by an ephemeral or local deploy, and never by a deploy to your
170
172
  workspace or a tenant, so a bare command cannot reach something real unasked. With no record,
171
173
  it falls back to the ephemeral recorded under your current credential, then to the engine
172
174
  recorded for this directory, and otherwise refuses naming the flag, `xanosdk deploy` and
173
- `xanosdk deploy --local-engine`.
175
+ `xanosdk deploy --local`.
174
176
  `deploy` is the exception: bare, it compiles the project and stands it up on an ephemeral
175
- unless `--to` or `--local-engine` says otherwise, so it writes that record rather than
177
+ unless `--to` or `--local` says otherwise, so it writes that record rather than
176
178
  reading it. `generate` and `init --from` need a backend named.
177
179
 
178
180
  A command that cannot serve a backend refuses it, whether you typed it or it came from the
179
- record, with the reason and the spellings it does take: `publish` refuses a local engine (no
181
+ record, with the reason and the spellings it does take: `publish` refuses a Xano Engine (no
180
182
  static host — pass `--to ephemeral`), and so does `release create` (the cut runs on the
181
183
  instance — pass `--from ephemeral`). A write to your workspace or a tenant confirms first,
182
- or needs `--yes` off a terminal; an ephemeral or local engine never asks.
184
+ or needs `--yes` off a terminal; an ephemeral or Xano Engine never asks.
183
185
 
184
186
  ## Bundle key names vs. the names everything else uses
185
187
 
@@ -253,7 +255,7 @@ layer raised it — is `SDK_EXPORT_INVALID`, with its checks in `error.details.d
253
255
  `destination`, a read's `kind`/`name` (`tables`, `test`), `status`, `ephemeral get`,
254
256
  `workspace details`, `impersonate`, and each `tenant list`/`ephemeral list` row — also carries
255
257
  `selector`, the spelling the next command's backend slot takes (`"ephemeral:e4f2-9ab1"`,
256
- `"tenant:acme"`, `"local-engine:<name>"`, `"workspace"`; `ephemeral get|delete|export` and
258
+ `"tenant:acme"`, `"local:<name>"`, `"workspace"`; `ephemeral get|delete|export` and
257
259
  `tenant get|deploy|delete` take it as well as the bare name), and `workspaceId`, the numeric workspace it acts on (for an ephemeral or tenant,
258
260
  the workspace it lives under). The fields each command already had stay. `export --out --json`
259
261
  carries `written: true`, as `export --check` carries `written: false`. `help --json` lists each
@@ -264,7 +266,7 @@ string, `values` its whole closed set, `examples` a few values of a flag that ta
264
266
  ## Shell completion
265
267
 
266
268
  `xanosdk completion <bash|zsh|fish>` prints a completion script covering every command, verb, flag,
267
- and closed value set (`--on workspace|ephemeral|local-engine`, `--format json|multidoc`, `--icons lucide|tabler|phosphor`).
269
+ and closed value set (`--on workspace|ephemeral|local`, `--format json|multidoc`, `--icons lucide|tabler|phosphor`).
268
270
  A flag's value completes as what it takes: its closed set, file names for a path (`--config`,
269
271
  `--secrets-file`), directories for a directory (`--backend-dir`), stored profile names for
270
272
  `--profile`/`--to-profile`, and nothing for a free-form value (`--name`, `--expires-hours`).
package/guides/codegen.md CHANGED
@@ -10,12 +10,12 @@ so it is the scaffold command with one extra flag:
10
10
  ```bash
11
11
  xanosdk init my-app --from workspace # your real workspace (the one your login is scoped to)
12
12
  xanosdk init my-app --from ephemeral:my-env # a named ephemeral environment
13
- xanosdk init my-app --from local-engine:<name> # a running local engine (`local-engine list`) — no login
13
+ xanosdk init my-app --from local:<name> # a running Xano Engine (`local list`) — no login
14
14
  xanosdk init my-app --from ./ws.json # a bundle already on disk — offline, no login
15
15
  ```
16
16
 
17
17
  `--from` takes any backend in [the CLI's one grammar](cli.md#naming-a-backend) —
18
- `workspace`, `ephemeral[:<name>]`, `local-engine[:<name>]`, `tenant:<name>`, `release:<name>` —
18
+ `workspace`, `ephemeral[:<name>]`, `local[:<name>]`, `tenant:<name>`, `release:<name>` —
19
19
  or a bundle path. Unlike most commands it has no default: a pull names its source.
20
20
 
21
21
  Everything else about the project is unchanged: `--framework`, the theme flags, `--no-agents-md` and
@@ -32,7 +32,7 @@ that already has its own shell, or to read one.
32
32
  ```bash
33
33
  xanosdk generate workspace # → ./xano
34
34
  xanosdk generate release:v1 --out ./backend # a stored release
35
- xanosdk generate ephemeral:my-env # also tenant:<name>, local-engine[:<name>]
35
+ xanosdk generate ephemeral:my-env # also tenant:<name>, local[:<name>]
36
36
  xanosdk generate ./ws.json # a bundle on disk — offline, no login
37
37
  xanosdk generate workspace --branch staging # --branch applies to `workspace` only
38
38
  ```
@@ -170,7 +170,8 @@ over a `xano/` no decode wrote follows the same rules.
170
170
  > ⚠️ **`xano/` is your source once pulled — commit it.** A refresh overwrites the files it
171
171
  > decodes, so commit before one (a directory that isn't a previous pull still needs `--force`).
172
172
  > It carries schema only — no table rows or stored files.
173
- > `xanosdk deploy` sends it to a disposable ephemeral environment as a *full replace*;
173
+ > `xanosdk deploy` sends it to the Xano Engine on this machine (`--ephemeral`: a disposable
174
+ > ephemeral environment) as a *full replace*;
174
175
  > `xanosdk promote <release>` or `xanosdk deploy --to workspace` merges it into your real
175
176
  > workspace. Workspace env vars are declared by name only — their values never enter the tree.
176
177
 
package/guides/codes.md CHANGED
@@ -97,15 +97,15 @@ Printed as `! …` on stderr, and as `{ code, message }` in a `--json` document'
97
97
  | `init.verify-failed` | Verification FAILED — the objects listed above do not re-export as they were pulled. |
98
98
  | `init.workflow-exists` | … already exists — moving the new workflow there replaces it. |
99
99
  | `landing.record-failed` | The prune landed, but … could not be updated: … |
100
- | `local-engine.foreign` | Left running, not started by xanosdk: … |
101
- | `local-engine.import-failed` | The import failed — the engine is still running, so nothing needs restarting: |
102
- | `local-engine.list-failed` | Could not list running engines, so none are shown: … |
103
- | `local-engine.not-pinned` | No package.json in …, and it is not a Xano SDK project, so the local engine was not pinned — this deploy runs the latest engine. |
104
- | `local-engine.pin-unusable` | The project's pinned engine version could not be read and was not used. |
105
- | `local-engine.runtime-kept` | Kept the unpacked runtime (…): … still running on it. |
106
- | `local-engine.stale` | … is running …, but the engine cached here is …. |
107
- | `local-engine.stop-failed` | … was listed as running but did not stop…. |
108
- | `local-engine.version-invalid` | … This deploy runs the latest local engine and the field is left as written — set it to a version like "v0.1.5", or run `xanosdk local-engine update` to pin… |
100
+ | `local.foreign` | Left running, not started by xanosdk: … |
101
+ | `local.import-failed` | The import failed — the engine is still running, so nothing needs restarting: |
102
+ | `local.list-failed` | Could not list running engines, so none are shown: … |
103
+ | `local.not-pinned` | No package.json in …, and it is not a Xano SDK project, so the Xano Engine was not pinned — this deploy runs the latest engine. |
104
+ | `local.pin-unusable` | The project's pinned engine version could not be read and was not used. |
105
+ | `local.runtime-kept` | Kept the unpacked runtime (…): … still running on it. |
106
+ | `local.stale` | … is running …, but the engine cached here is …. |
107
+ | `local.stop-failed` | … was listed as running but did not stop…. |
108
+ | `local.version-invalid` | … This deploy runs the latest Xano Engine and the field is left as written — set it to a version like "v0.1.5", or run `xanosdk local update` to pin one. |
109
109
  | `lock.ceded-canonical` | A lock entry kept its guid but ceded its canonical to a live object; a rename moves the entry so the object keeps its URL. |
110
110
  | `lock.created-in-ci` | This lock was created in CI, which means the repository does not have one. |
111
111
  | `lock.dropped-entry` | A stale lock entry was dropped because its identity reappeared under a live name (a reverted or identity-keeping rename). |
@@ -89,15 +89,15 @@ processes at once.
89
89
  > **Upgrading:** a file written before profiles is read as the `default` profile with no
90
90
  > action needed. It is rewritten in the new shape the next time something writes to it.
91
91
 
92
- **Project-local credentials** — pass `--local` to `login` to cache tokens in a
92
+ **Project-local credentials** — pass `--local-auth` to `login` to cache tokens in a
93
93
  **project-local** `./.xano/auth.json` instead (which `login` **auto-adds to `.gitignore`**),
94
94
  scoping the sign-in to that directory. Every command that **reads** credentials
95
95
  (`deploy`/`details`, `whoami`, token refresh) resolves them **project-local first, global
96
96
  as a fallback**: it uses `./.xano/auth.json` when present, otherwise `~/.xanosdk/auth.json` —
97
- so a `--local` project keeps working without repeating the flag. `login` and `logout` do
98
- **not** fall back: they target the shared global cache unless you pass `--local`. A `logout`
97
+ so a `--local-auth` project keeps working without repeating the flag. `login` and `logout` do
98
+ **not** fall back: they target the shared global cache unless you pass `--local-auth`. A `logout`
99
99
  naming a profile that only `./.xano/auth.json` holds exits 8 (not found in the shared file)
100
- and names `xanosdk logout --local -p <name>` — it does not report the session as gone. A
100
+ and names `xanosdk logout --local-auth -p <name>` — it does not report the session as gone. A
101
101
  logout clears stored profiles only: with the `XANO_*` credential variables still set, it
102
102
  says so, and commands keep authenticating with them. An explicit
103
103
  `--config`/`$XANO_CONFIG` wins over both default file locations; only the three-variable
@@ -113,7 +113,7 @@ as JSON, while the human-readable progress (and the live URLs) echoes to stderr:
113
113
 
114
114
  ```jsonc
115
115
  {
116
- "kind": "ephemeral", // or "local-engine"
116
+ "kind": "ephemeral", // or "local"
117
117
  "destination": { // the PARENT it was created under, then the environment itself
118
118
  "instance": "https://x.xano.io", "workspaceId": 1, "kind": "ephemeral",
119
119
  "label": "ezm0-xkdq-6564", "url": "https://x.xano.io/tenant/ezm0-xkdq-6564",
@@ -144,7 +144,7 @@ again, when the suite could not be run — exit 6 — and `unreachable`, the tes
144
144
  (as `test run` takes them), when it stopped answering part-way; the same `N passed, M failed,
145
145
  K not run` line `test run-all` prints closes the run), `landingRecord` (`{ destination, file,
146
146
  recorded, changed, cleared }`: what this deploy recorded as landed, the scope of a later
147
- `--prune`; `null` for a local engine), `staticRemoved` (`{ urls, verified }`: the frontends a replace took down, below),
147
+ `--prune`; `null` for a Xano Engine), `staticRemoved` (`{ urls, verified }`: the frontends a replace took down, below),
148
148
  `notApplied` (flags accepted and not acted on — `--expires-hours` on an ephemeral that already
149
149
  exists), `unconfigured`, and `passwordHashesUnverifiable` (below). The raw
150
150
  workspace blob is deliberately never dumped: it carries per-tenant secrets that must not land
@@ -152,8 +152,8 @@ in shell history or CI logs.
152
152
 
153
153
  `xanosdk test run-all --json` (and `test run`, `test list`) writes the same per-test entries at
154
154
  the top level, beside the backend they ran on: `kind`, `env` (the ephemeral's or tenant's handle;
155
- `null` for a local engine or a workspace), `name` (the backend's own name whatever its kind — the
156
- same handle on an ephemeral or tenant, the engine's name on a local engine) and `display` (its display
155
+ `null` for a Xano Engine or a workspace), `name` (the backend's own name whatever its kind — the
156
+ same handle on an ephemeral or tenant, the engine's name on a Xano Engine) and `display` (its display
157
157
  name), each always present, `null` where the backend has none. When the suite stops answering
158
158
  part-way, the rest are not started and the run exits 6 with a failure document whose
159
159
  `details.results` is that document — `total` the whole suite, `notRun` and `unreachable` the tests
@@ -169,8 +169,8 @@ out and named (`--env-var GREETING`) — pass them again, or keep them in `xano/
169
169
  `xano/.secrets.json`, which a deploy reads. The same text is the `--json` error's `message`.
170
170
 
171
171
  **Where it goes** — the instance your **token is bound to** (the token's `aud`), never a
172
- flag. `xanosdk deploy` create-or-refreshes an **ephemeral**, which is the only environment it
173
- writes to. Reaching your real workspace is the separate release flow: cut a release from
172
+ flag. `xanosdk deploy --ephemeral` create-or-refreshes an **ephemeral**; a bare `xanosdk deploy`
173
+ runs the code on the Xano Engine on this machine instead ([below](#deploying-locally)). Reaching your real workspace is the separate release flow: cut a release from
174
174
  what ran, then `xanosdk promote <release>` lands it there as a new branch, leaving live
175
175
  untouched until you say otherwise.
176
176
 
@@ -250,10 +250,10 @@ step, without re-importing the backend.
250
250
  directory and nothing else: no compile, no backend import. `--to` picks the destination —
251
251
  `ephemeral[:<name>]`, `workspace`, or `tenant:<name>`; left off, the backend this project last
252
252
  deployed to — and a workspace or tenant asks before replacing what its users are served
253
- (`--yes` in CI). `publish` does not reach a local engine, so after a local-engine deploy it
254
- refuses the tracked engine and names `--to ephemeral`; the engine takes a frontend through
255
- `xanosdk deploy --local-engine --static <dir>` instead (below). Scaffolded projects carry it as `npm run xano:deploy:frontend`,
256
- which rebuilds first.
253
+ (`--yes` in CI). After a local deploy it publishes to that engine (`--to local`
254
+ names it), server half included — the upload `xanosdk deploy --local --static <dir>`
255
+ makes, without re-importing the backend (below). Scaffolded projects carry it as
256
+ `npm run xano:deploy:frontend`, which rebuilds first.
257
257
 
258
258
  ```bash
259
259
  xanosdk promote v2 --set-live # the backend, landed and live
@@ -402,6 +402,12 @@ Add your own public config (base URLs, *publishable* keys) with `--static-env KE
402
402
  verbatim to the browser, so everything injected is **public** — never put secrets here;
403
403
  those belong in backend env, read server-side via `env(name)`.
404
404
 
405
+ **Your dev server follows the deploy.** In a scaffolded project, a deploy that publishes no static site writes the backend
406
+ URL into the project's gitignored `.env.local` as `VITE_XANO_HOST`, in a marked block that leaves your own values alone and
407
+ is replaced rather than repeated next time. **Restart the dev server to pick it up.** `--no-dev-env` turns it off, and so
408
+ do `--static <dir>` and a site an earlier deploy published there that still serves — a frontend reads the URL at runtime. A `.env.local` your repo does not ignore is
409
+ reported, never written.
410
+
405
411
  **Showing a stored file.** A file column comes back as `{ path, name, type, size, meta,
406
412
  access, url }`. Don't use its `url`: on a tenant-scoped environment that field addresses the
407
413
  instance host *without* the `/tenant/<name>` segment and 404s — as a broken `<img>`, while
@@ -425,20 +431,20 @@ retrying the bare URL.
425
431
 
426
432
  ## Deploy targets, and what a release changes
427
433
 
428
- **Two targets**, so the dev loop and the production step stay distinct:
434
+ **Disposable targets and real ones**, so the dev loop and the production step stay distinct:
429
435
 
430
436
  | Command | Where it goes |
431
437
  |---|---|
432
- | `xanosdk deploy` | A disposable **ephemeral** environment — create-or-refreshed each run, auto-expiring, with its own URL. This is the default and needs no flag. |
438
+ | `xanosdk deploy` | The **Xano Engine** on this machine — the default, with no flag and no Xano account needed ([below](#deploying-locally)). `--local` spells it out. |
439
+ | `xanosdk deploy --ephemeral` | A disposable **ephemeral** environment on Xano's cloud — create-or-refreshed each run, auto-expiring, with its own URL. |
433
440
  | `xanosdk promote <release>` | Your **main Xano instance** workspace — the production target. Lands a release on a branch named for it (`--set-live` serves it). Its table changes reach live as it lands — see [what a landing does to tables](#what-a-landing-does-to-tables). |
434
441
  | `xanosdk tenant deploy <tenant> <release>` | A **customer tenant** — the same release, landed on someone else's deployment. It **replaces** what the tenant serves: anything the release does not carry is removed. Static hosting is kept. |
435
442
  | `xanosdk deploy --to <dest>` | The **escape hatch**: merges a local build straight into `workspace` or `tenant:<name>`, skipping the release record. |
436
- | `xanosdk deploy --local-engine` | A **local engine** on this machine — no Xano account needed ([below](#deploying-to-a-local-engine)). |
437
- | `xanosdk test` | Nothing — it only reads. Runs the tests an already-deployed backend carries; `--on` picks which one, `local-engine` and `workspace` included. |
443
+ | `xanosdk test` | Nothing — it only reads. Runs the tests an already-deployed backend carries; `--on` picks which one, `local` and `workspace` included. |
438
444
 
439
- Not every instance has ephemeral environments enabled. Where they are off, `deploy` says so
440
- and names who can turn them on — there is no second destination to fall back to. `xanosdk
441
- export` and `xanosdk preflight` still work meanwhile.
445
+ Not every instance has ephemeral environments enabled. Where they are off, `deploy --ephemeral`
446
+ says so and names who can turn them on. A bare `deploy` (the Xano Engine), `xanosdk export` and
447
+ `xanosdk preflight` still work meanwhile.
442
448
 
443
449
  Every `deploy` is a **full replace** of the disposable environment — always fresh — unless
444
450
  you pass `--keep-data`. Landing somewhere real is the opposite by design: it changes what
@@ -454,7 +460,7 @@ object in `details.outOfScope`, and the rerun with `--yes` printed).
454
460
 
455
461
  ### Keeping your data between deploys
456
462
 
457
- `xanosdk deploy --keep-data` redeploys to your ephemeral or local engine by **merging** into
463
+ `xanosdk deploy --keep-data` redeploys to your ephemeral or Xano Engine by **merging** into
458
464
  what an earlier deploy put there, instead of replacing it. Code and schema changes land,
459
465
  objects removed from the project are deleted, and the rows already in the tables stay. Seed
460
466
  rows are not written again.
@@ -469,7 +475,7 @@ and exits 0, as any declined confirmation does). Without one the
469
475
  merge is refused before it writes, as `--prune` refuses the same deletion:
470
476
  `SDK_PRUNE_OUT_OF_SCOPE`, exit 2, each object in `details.outOfScope` as `{ type, name, label }`
471
477
  (the shape `deploy --to --prune` uses), and the rerun with `--yes` printed. A merge that goes ahead names them in `--json`'s `notLanded`. The scaffolded
472
- `npm run xano:deploy:local-engine` passes it, so the rows you enter through your app survive
478
+ `npm run xano:deploy` passes it, so the rows you enter through your app survive
473
479
  every code change.
474
480
 
475
481
  It merges only into an environment an earlier deploy **finished** filling. Otherwise it
@@ -535,7 +541,7 @@ the name back restores them. Columns are named
535
541
  The limits, in one place: rows survive only in tables and columns that keep their identity
536
542
  (a table renamed through `xanosdk lock rename` keeps its rows; an unrecorded rename is refused,
537
543
  below); changed env values and a new table's seeds need `--reset`;
538
- a local engine's rows last as long as its process (an engine update restarts it empty, and the
544
+ a Xano Engine's rows last as long as its process (an engine update restarts it empty, and the
539
545
  next run seeds); and a test whose `datasource` is `"live"`
540
546
  sees the kept rows, not only the seed fixtures.
541
547
 
@@ -602,24 +608,24 @@ Another import already running on the instance is not a refusal of the project:
602
608
  `--to` already merges, so `--keep-data --to` is refused; the flags that only mean something
603
609
  with `--to` (`--seed`, `--prune`, `--dry-run`, …) stay refused alongside it.
604
610
 
605
- ### Deploying to a local engine
611
+ ### Deploying locally
606
612
 
607
- `xanosdk deploy --local-engine` deploys to an engine running on this machine instead of an
613
+ `xanosdk deploy --local` deploys to an engine running on this machine instead of an
608
614
  ephemeral — no network round-trip per deploy. It needs nothing configured:
609
615
 
610
616
  - **The first run** resolves the latest published engine for this machine's platform,
611
617
  downloads it, checks it against the sha256 its release recorded, and **pins** that version in
612
- your `package.json` under `"xanosdk": { "@xano/sdk": { "localEngine": "vX.Y.Z" } }` —
618
+ your `package.json` under `"xanosdk": { "@xano/sdk": { "engine": "vX.Y.Z" } }` —
613
619
  creating a `package.json` holding only that pin when the project has none. Commit that change —
614
620
  every checkout of the project then runs the same engine.
615
621
  - **Every later run** uses the pinned version, whatever is newest. Each version downloads once
616
622
  per machine and is shared by every project on it (`~/.xanosdk/local-engine`, or
617
- `XANOSDK_LOCAL_ENGINE_HOME`); a cached pin deploys with no network access.
623
+ `XANOSDK_ENGINE_HOME`); a cached pin deploys with no network access.
618
624
  - **A newer engine** is announced on each deploy (checked at most once an hour; opt out with
619
625
  `XANOSDK_NO_UPDATE_CHECK=1`). In an interactive terminal the deploy asks whether to update,
620
626
  defaulting to no — a version you declined is only noted afterwards, not asked again. In CI,
621
627
  piped output or `--json` it prints a one-line notice and keeps the pin. The pin never moves
622
- without a yes or an explicit `xanosdk local-engine update`.
628
+ without a yes or an explicit `xanosdk local update`.
623
629
  - **A running engine on a different version** than the one the project now resolves to — after
624
630
  an update, or after a teammate moved the pin — is stopped and replaced, and the deploy says
625
631
  so.
@@ -629,33 +635,32 @@ ephemeral — no network round-trip per deploy. It needs nothing configured:
629
635
  keeps the one-hour default; its `--ttl <duration>` flag changes it.
630
636
 
631
637
  An engine update restarts the engine, and a restarted engine starts **empty**: the next
632
- `--keep-data` run (which the scaffolded `npm run xano:deploy:local-engine` passes) seeds it
638
+ `--keep-data` run (which the scaffolded `npm run xano:deploy` passes) seeds it
633
639
  rather than merging, so rows entered through your app do not survive the upgrade.
634
640
 
635
- **Operating on it.** After a local-engine deploy, the engine is the backend this project
641
+ **Operating on it.** After a local deploy, the engine is the backend this project
636
642
  tracks, so bare `xanosdk test run-all`, `env set`, `env pull`, `tables`, `impersonate` and
637
- `status` reach it — none of them needs a Xano account. Name it explicitly as `local-engine`,
638
- or `local-engine:<name>` for another one from `xanosdk local-engine list` (the full grammar is in
639
- [the CLI guide](cli.md#naming-a-backend)). Two commands cannot serve it and refuse it by name:
640
- `publish` (a local engine takes its frontend from `deploy --local-engine --static`; or pass
641
- `--to ephemeral`) and `release create`
643
+ `status` reach it — none of them needs a Xano account. Name it explicitly as `local`,
644
+ or `local:<name>` for another one from `xanosdk local list` (the full grammar is in
645
+ [the CLI guide](cli.md#naming-a-backend)). `publish` puts a built frontend on it without
646
+ re-importing the backend. One command cannot serve it and refuses it by name: `release create`
642
647
  (the cut runs on the instance — pass `--from ephemeral`).
643
648
 
644
649
  | Command | What it does |
645
650
  |---|---|
646
- | `xanosdk local-engine update` | Moves the pin to the latest engine (`--version <v>`: that one, downgrades included), downloads it, and restarts the project's running engine on it. Commit `package.json`. |
647
- | `xanosdk local-engine cache list` | Each cached engine version, its size on disk, and the engines running on it. |
648
- | `xanosdk local-engine cache clear` | Removes every cached engine (`--version <v>`: just that one). An engine running on a removed version is stopped first; the next deploy fetches it again. |
651
+ | `xanosdk local update` | Moves the pin to the latest engine (`--version <v>`: that one, downgrades included), downloads it, and restarts the project's running engine on it. Commit `package.json`. |
652
+ | `xanosdk local cache list` | Each cached engine version, its size on disk, and the engines running on it. |
653
+ | `xanosdk local cache clear` | Removes every cached engine (`--version <v>`: just that one). An engine running on a removed version is stopped first; the next deploy fetches it again. |
649
654
 
650
- #### A frontend on the local engine, and server rendering
655
+ #### A frontend on the Xano Engine, and server rendering
651
656
 
652
- `xanosdk deploy <entry> --local-engine --static <dir>` publishes a built frontend to the
657
+ `xanosdk deploy <entry> --local --static <dir>` publishes a built frontend to the
653
658
  engine's own static host after the import, as on an ephemeral, and reports it as `static.url`:
654
659
  `http://<prefix>.localhost:<port>`. Chrome, Firefox and Safari 26 resolve `*.localhost` to this
655
660
  machine by themselves (Safari on macOS 15 and earlier does not); a tool that does not resolve it
656
661
  can call the engine's own URL with a `Host: <prefix>.localhost:<port>` header. The engine needs a release
657
662
  that hosts static sites: an older one answers the upload with a 501, which the deploy reports
658
- without failing the backend (exit `3`), and `xanosdk local-engine update` moves the pin on.
663
+ without failing the backend (exit `3`), and `xanosdk local update` moves the pin on.
659
664
 
660
665
  The engine hosts built output only, and refuses a build of more than 20,000 files or 256 MB unpacked.
661
666
  The deploy checks both before the import, so an oversize directory stops the run with nothing
@@ -681,7 +686,7 @@ that keeps a `svelte.config.js`.
681
686
 
682
687
  `vite build` then writes the client assets and prerendered pages at the output's root, a
683
688
  `404.html` fallback shell, and the server half in `.xano-ssr/`. Deployed with
684
- `--local-engine --static <that directory>`, the engine serves the files as files and renders every other
689
+ `--local --static <that directory>`, the engine serves the files as files and renders every other
685
690
  path (a dynamic route, `__data.json`, a form action) through the server half, so a crawler that
686
691
  fetches `/products/lamp` gets that product's own `<title>` and meta tags. A server `load` reads
687
692
  the engine's own URL as `XANO_HOST` from `$env/dynamic/private`:
@@ -718,20 +723,20 @@ there instead (and says so in the build log), so that route boots — an unknown
718
723
 
719
724
  The cache above holds the engine **binaries**. A running engine keeps its own **runtime data** —
720
725
  its unpacked runtime files, its logs, and the records of running engines — beside them, under
721
- `engine/` in the same directory (`~/.xanosdk/local-engine`, or `XANOSDK_LOCAL_ENGINE_HOME`): in
726
+ `engine/` in the same directory (`~/.xanosdk/local-engine`, or `XANOSDK_ENGINE_HOME`): in
722
727
  `engine/Library/Caches` on macOS and `engine/.cache` on Linux, the directory holding `dist`,
723
728
  `instances` and `logs` folders. Its `logs` folder holds one file per engine start; a start that
724
729
  fails names it.
725
730
 
726
731
  Expect it to reach roughly 600 MB after the first deploy, and to grow by a similar amount for
727
- each engine version you run, since every version unpacks its own copy. `xanosdk local-engine cache
728
- list` shows its size, and `xanosdk local-engine cache clear` (with no `--version`) removes it with the
732
+ each engine version you run, since every version unpacks its own copy. `xanosdk local cache
733
+ list` shows its size, and `xanosdk local cache clear` (with no `--version`) removes it with the
729
734
  engines once none is running — it names any engine still up; stop it and clear again. The next
730
735
  deploy recreates what it needs.
731
736
 
732
737
  Versions before this layout unpacked the same runtime into your own per-user cache directory.
733
738
  Nothing runs from that copy now; `cache list` shows it when it is there, and
734
- `xanosdk local-engine cache clear --legacy-runtime` removes it after asking (`--yes` without a
739
+ `xanosdk local cache clear --legacy-runtime` removes it after asking (`--yes` without a
735
740
  terminal).
736
741
 
737
742
  #### Running a different engine without moving the pin
@@ -739,9 +744,9 @@ terminal).
739
744
  To try an experimental build, or a published version the project hasn't moved to, override the
740
745
  pin for your own runs instead of editing `package.json`:
741
746
 
742
- - `--local-engine=<value>` for one deploy;
743
- - `XANOSDK_LOCAL_ENGINE_OVERRIDE=<value>` for every deploy in this shell, including
744
- `npm run xano:deploy:local-engine`, which passes a bare flag.
747
+ - `--local=<value>` for one deploy;
748
+ - `XANOSDK_ENGINE_OVERRIDE=<value>` for every deploy in this shell, including
749
+ `npm run xano:deploy`, which passes a bare flag.
745
750
 
746
751
  Both take a **version** (`v0.1.8`, or `0.1.8`: that release from the release manager), an
747
752
  **`https` URL** to an engine archive, or the **path** to an engine archive on this machine. A
@@ -758,24 +763,24 @@ next `--keep-data` run seeds it); unset the variable and the next deploy goes ba
758
763
  engine the same way.
759
764
 
760
765
  ```bash
761
- export XANOSDK_LOCAL_ENGINE_OVERRIDE=~/Downloads/engine-experimental.tar.gz
762
- npm run xano:deploy:local-engine # runs the experimental build; package.json untouched
763
- unset XANOSDK_LOCAL_ENGINE_OVERRIDE # next deploy is back on the pinned version
766
+ export XANOSDK_ENGINE_OVERRIDE=~/Downloads/engine-experimental.tar.gz
767
+ npm run xano:deploy # runs the experimental build; package.json untouched
768
+ unset XANOSDK_ENGINE_OVERRIDE # next deploy is back on the pinned version
764
769
  ```
765
770
 
766
- `XANOSDK_LOCAL_ENGINE_TOKEN`, when set, is sent only to an override URL's host.
771
+ `XANOSDK_ENGINE_TOKEN`, when set, is sent only to an override URL's host.
767
772
  `XANOSDK_ENGINE_RELEASES_URL` points version lookups at a different engine release service. Its
768
773
  engines are downloaded fresh on every deploy and kept apart from the version cache, and the
769
774
  deploy runs its latest without reading or writing the pin or checking for updates;
770
- `xanosdk local-engine update` refuses while it is set.
775
+ `xanosdk local update` refuses while it is set.
771
776
 
772
777
  ### The release flow
773
778
 
774
779
  This is the path to a real destination. Each step leaves something the next one can name:
775
780
 
776
781
  ```bash
777
- xanosdk deploy ./xano/index.ts --test # 1. stand it up on an ephemeral, run its tests
778
- xanosdk release create v1 # 2. cut a release from what just ran (after a local-engine deploy: --from ephemeral)
782
+ xanosdk deploy ./xano/index.ts --ephemeral --test # 1. stand it up on an ephemeral, run its tests
783
+ xanosdk release create v1 # 2. cut a release from what just ran (after a local deploy: --from ephemeral)
779
784
  xanosdk promote v1 # 3. land it in your workspace, on a branch named for it
780
785
  xanosdk tenant deploy acme v1 # …or on a customer tenant
781
786
  ```
@@ -982,7 +987,7 @@ instead, so stdout is never empty. Branch on `code`, not on the message:
982
987
  | `SDK_EXPORT_INVALID` | The workspace failed an export check, or `--strict` promoted a warning. | `details.diagnostics`: `{ severity, code, message }` per failed check; under `--strict`, every warning that fails it; `code` names the check, e.g. `seed.public-seed`; `details.warnings` beside it, empty when the run printed none |
983
988
  | `SDK_CREDENTIAL_REJECTED` | The instance, or its sign-in server, refused the credential this run used: exit 1. The message names the sign-in that fixes it. | `details`: `{ profile, credentialType, instance, workspaceId, signIn }` (`profile` is `null` for an environment credential; `instance` and `workspaceId` are `null` for a refused `XANO_REFRESH_TOKEN`; `signIn` is `null` when the fix is a variable or an upgrade rather than a command) |
984
989
  | `SDK_USAGE` | The command line was mistyped or incomplete — an unknown flag, a value on a flag that takes none, a flag without the one it needs (`--dry-run` without `--to`), a missing argument, a confirmation with no terminal to ask on, a local file or directory it names that does not exist: exit 1. | `suggestion`: the closest match, when one is close enough |
985
- | `SDK_ERROR` | Any failure without a code of its own yet — including a NAMED thing that cannot be found (a backend, release, branch, static host, test, profile or local-engine version: exit 8). A network failure or a server error (5xx) is exit 8 before anything is written — the backend's lookup, a read-only command's read (`tables`, `test list`, `env pull`, `status`, `whoami`, `workspace details`, `workspace branch`'s list), a local engine's release lookup or download, and `--keep-data`'s reads ahead of its merge (whether the environment can merge, its live read, the merge preview) got no answer or a 5xx; rerun as printed — and exit 1 at a later step that never reached it (an import that was not sent: nothing was written — retry). A `501` on `--keep-data`'s check is an answer, not an outage: that backend cannot merge, so it is exit 1 with the deploy that replaces instead. | `suggestion`: the near name a not-found one is one slip from, when there is one (`suggestions`: every one, when a command missed several) |
990
+ | `SDK_ERROR` | Any failure without a code of its own yet — including a NAMED thing that cannot be found (a backend, release, branch, static host, test, profile or Xano Engine version: exit 8). A network failure or a server error (5xx) is exit 8 before anything is written — the backend's lookup, a read-only command's read (`tables`, `test list`, `env pull`, `status`, `whoami`, `workspace details`, `workspace branch`'s list), a Xano Engine's release lookup or download, and `--keep-data`'s reads ahead of its merge (whether the environment can merge, its live read, the merge preview) got no answer or a 5xx; rerun as printed — and exit 1 at a later step that never reached it (an import that was not sent: nothing was written — retry). A `501` on `--keep-data`'s check is an answer, not an outage: that backend cannot merge, so it is exit 1 with the deploy that replaces instead. | `suggestion`: the near name a not-found one is one slip from, when there is one (`suggestions`: every one, when a command missed several) |
986
991
 
987
992
  A piped stdout gets the document too, without `--json`, so a script reading the pipe never gets
988
993
  an empty stdout. The exception is a command whose stdout is the data itself (`export` to stdout,
@@ -16,7 +16,7 @@ are what you get when the variable is unset.
16
16
  | `XANO_META_TOKEN` | Meta API bearer token. With the two above it forms a complete credential that outranks every other source, reads no file, and never rotates. |
17
17
  | `XANO_REFRESH_TOKEN` | OAuth refresh token for non-interactive runs (CI, agents). Paired with `XANO_CLIENT_ID`; the target instance comes from the token's own `aud` claim. Rotates on use — prefer the meta credential above. |
18
18
  | `XANO_CLIENT_ID` | OAuth client id that goes with `XANO_REFRESH_TOKEN`. Both are copied once out of the profile in `auth.json` after a local `xanosdk login`. |
19
- | `XANO_CONFIG` | Explicit path to the credential file. Wins over both default locations — the same thing `--config <path>` does. Refused beside `--local`, which names a different file. |
19
+ | `XANO_CONFIG` | Explicit path to the credential file. Wins over both default locations — the same thing `--config <path>` does. Refused beside `--local-auth`, which names a different file. |
20
20
  | `XANO_PROFILE` | Which stored credential profile to act as, when no `--profile` names one. Outranked by the flag, by the project's `xano.profile.json` pin, and by an environment credential (which displaces it with a note on stderr). |
21
21
  | `XANO_GLOBAL_CONFIG` | Moves the **shared** credential cache off `~/.xanosdk/auth.json`. Only changes where the global cache lives; the project-local `./.xano/auth.json` and the `XANO_CONFIG`/`--config` override are unaffected. |
22
22
  | `XANO_CLIENT_FILE` | Moves the OAuth **client-registration** cache off `~/.xano/xanosdk-clients.json`. That file holds the `client_id` minted per auth host + redirect URI, not a credential. |
@@ -49,20 +49,20 @@ are what you get when the variable is unset.
49
49
  | `XANOSDK_UPDATE_REGISTRY` | Registry URL the check reads, instead of the npm endpoint for `@xano/sdk`. |
50
50
  | `XANOSDK_UPDATE_CACHE` | Moves the check's cache file off `~/.xanosdk/update-check.json`. |
51
51
 
52
- **Local engine** (see [Deploying to a local engine](deploying.md#deploying-to-a-local-engine))
52
+ **Xano Engine** (see [Deploying locally](deploying.md#deploying-locally))
53
53
 
54
54
  | Variable | What it does |
55
55
  |---|---|
56
- | `XANOSDK_LOCAL_ENGINE_OVERRIDE` | An engine to run instead of the project's pinned one, for every `deploy --local-engine` in this shell: a version (`v0.1.8`), an `https://` URL to an engine archive (plain `http://` only from this machine), or an archive path. A value on `--local-engine=` beats it; it never reads or moves the pin. |
57
- | `XANOSDK_LOCAL_ENGINE_TOKEN` | Bearer credential sent with an override URL's download — only to that URL's own origin, never to another host a redirect leads to. |
58
- | `XANOSDK_LOCAL_ENGINE_HOME` | Moves everything the local engine writes off `~/.xanosdk/local-engine`: the engine cache, the running-engine records, and the engine's own logs and runtime data — see [where the engine keeps its data](deploying.md#where-the-engine-keeps-its-data). |
59
- | `XANOSDK_ENGINE_RELEASES_URL` | A different engine release service for version lookups. Its engines are fetched fresh each deploy, the pin is not read or written, and `xanosdk local-engine update` refuses while it is set. |
56
+ | `XANOSDK_ENGINE_OVERRIDE` | An engine to run instead of the project's pinned one, for every `deploy --local` in this shell: a version (`v0.1.8`), an `https://` URL to an engine archive (plain `http://` only from this machine), or an archive path. A value on `--local=` beats it; it never reads or moves the pin. |
57
+ | `XANOSDK_ENGINE_TOKEN` | Bearer credential sent with an override URL's download — only to that URL's own origin, never to another host a redirect leads to. |
58
+ | `XANOSDK_ENGINE_HOME` | Moves everything the Xano Engine writes off `~/.xanosdk/local-engine`: the engine cache, the running-engine records, and the engine's own logs and runtime data — see [where the engine keeps its data](deploying.md#where-the-engine-keeps-its-data). |
59
+ | `XANOSDK_ENGINE_RELEASES_URL` | A different engine release service for version lookups. Its engines are fetched fresh each deploy, the pin is not read or written, and `xanosdk local update` refuses while it is set. |
60
60
 
61
61
  **Escape hatches**
62
62
 
63
63
  | Variable | What it does |
64
64
  |---|---|
65
- | `XANOSDK_MARKETPLACE_URL` | Base URL the `xanosdk marketplace` reads hit, instead of the published catalogue. Repoints the three read verbs without waiting for a release. |
65
+ | `XANOSDK_MARKETPLACE_URL` | Base URL the `xanosdk marketplace` reads hit, instead of the published catalogue. Repoints the three read verbs without waiting for a release. A path is kept, so `https://<instance>/tenant/<name>` works. |
66
66
  | `XANOSDK_PROVE_DIFF` | A file path. Codegen appends one JSON line per statement that fell back to `raw()` — the arm that declined and the key paths where the re-encode disagreed. The decline *reason* is on the report either way; this adds the machine-readable detail. |
67
67
 
68
68
  > `process.env` read inside a **workspace definition** is a different thing entirely: it
@@ -113,8 +113,8 @@ xanosdk env pull --from workspace --yes # and skip the confirmation
113
113
  ```
114
114
 
115
115
  The source is a backend that is running: `workspace`, `ephemeral[:<name>]`,
116
- `local-engine[:<name>]`, or `tenant:<name>` — the [backend grammar](cli.md#naming-a-backend)
117
- every command shares. Left off, it is the ephemeral or local engine this project last
116
+ `local[:<name>]`, or `tenant:<name>` — the [backend grammar](cli.md#naming-a-backend)
117
+ every command shares. Left off, it is the ephemeral or Xano Engine this project last
118
118
  deployed to. A bundle path is refused, because its env is whatever it was built with,
119
119
  which is the stale set this command exists to replace.
120
120
 
@@ -132,7 +132,7 @@ resolved env values in cleartext (see the `--bundle` note below).
132
132
 
133
133
  ```bash
134
134
  printf %s "$STRIPE_KEY" | xanosdk env set STRIPE_KEY --to workspace --yes # value on stdin
135
- xanosdk env set FEATURE_FLAG on --to local-engine # or as the second argument
135
+ xanosdk env set FEATURE_FLAG on --to local # or as the second argument
136
136
  xanosdk env unset STRIPE_KEY --to tenant:prod-eu # remove it
137
137
  ```
138
138
 
@@ -142,12 +142,12 @@ a deploy can't do that job. A merge deploy only adds names that aren't there yet
142
142
  `--replace` rewrites the whole workspace.
143
143
 
144
144
  The destination is `--to workspace`, `--to ephemeral[:<name>]`, `--to tenant:<name>`, or
145
- `--to local-engine[:<name>]` for a local engine. With none of these, the command writes to
146
- the ephemeral or local engine this project last deployed to. It never falls back to your
147
- workspace or a tenant, and a local engine needs no Xano account. A write to
145
+ `--to local[:<name>]` for a Xano Engine. With none of these, the command writes to
146
+ the ephemeral or Xano Engine this project last deployed to. It never falls back to your
147
+ workspace or a tenant, and a Xano Engine needs no Xano account. A write to
148
148
  the workspace or a tenant asks for confirmation first, and `--yes` skips it; that flag is
149
149
  required when there is no terminal, including when the value is piped in. Ephemerals and the
150
- local engine are throwaway, so the command doesn't ask.
150
+ Xano Engine are throwaway, so the command doesn't ask.
151
151
 
152
152
  The value is never printed. Pipe it on stdin to keep it out of shell history. One trailing
153
153
  newline is dropped, so `echo` works too. An empty value is refused unless