@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.
- package/CHANGELOG.md +30 -4
- package/README.md +232 -334
- package/dist/.build-fingerprint +1 -1
- package/dist/{agent-file-refresh-MQKCS7QZ.js → agent-file-refresh-KVLR7M5Y.js} +13 -13
- package/dist/{answer-shape-LVV2SVBK.js → answer-shape-XGR2DGWY.js} +5 -5
- package/dist/{backend-dir-DGAQL4K5.js → backend-dir-IE4RMUFH.js} +12 -12
- package/dist/{backend-slot-NSCTWCUX.js → backend-slot-6HBWG5FN.js} +3 -3
- package/dist/bin.js +52 -52
- package/dist/{branch-ONWPJ4V6.js → branch-T2APKPVG.js} +9 -9
- package/dist/{branch-commands-R4PPN3Z7.js → branch-commands-HXXTCSOO.js} +26 -26
- package/dist/{capture-3JNUA6C2.js → capture-HBXFXZEW.js} +4 -4
- package/dist/{chunk-A6QTTJUI.js → chunk-3BJYQGAZ.js} +2 -2
- package/dist/{chunk-5W7DOMIU.js → chunk-3IYVHVM6.js} +2 -2
- package/dist/{chunk-ANHOEBTJ.js → chunk-3VX7VAQT.js} +4 -4
- package/dist/{chunk-FWXSTFN2.js → chunk-3WHWOKU4.js} +4 -4
- package/dist/{chunk-LXNQWHZM.js → chunk-44CWK6YC.js} +3 -3
- package/dist/{chunk-KCAL4QYP.js → chunk-4GDEEY2U.js} +4 -4
- package/dist/{chunk-KTGRGWZW.js → chunk-4NEBBKOP.js} +7 -7
- package/dist/{chunk-UKUIUS3E.js → chunk-4QBGE3EO.js} +5 -5
- package/dist/{chunk-IVKRT476.js → chunk-4QFBEKXI.js} +2 -2
- package/dist/{chunk-OOXWYAA4.js → chunk-57A5ZKPO.js} +1 -1
- package/dist/{chunk-A4KBHTMK.js → chunk-57B56I4B.js} +29 -29
- package/dist/{chunk-OPHB5ORL.js → chunk-57HMNJGB.js} +120 -76
- package/dist/{chunk-JTM5D7CT.js → chunk-5D6DGF3W.js} +8 -8
- package/dist/{chunk-E65QIWOO.js → chunk-5RLAF6RL.js} +4 -4
- package/dist/{chunk-MEE5RZ6G.js → chunk-5XVBT6CQ.js} +2 -2
- package/dist/{chunk-RX3EMQGN.js → chunk-5YBNXNKU.js} +2 -2
- package/dist/{chunk-NA3PXMEF.js → chunk-64WWE3EF.js} +1 -1
- package/dist/{chunk-2LVTBPW2.js → chunk-65SW2BA5.js} +3 -3
- package/dist/{chunk-D3XOH7E7.js → chunk-7DBM6XHR.js} +8 -8
- package/dist/{chunk-DIG3NITC.js → chunk-A4NNCI4O.js} +3 -3
- package/dist/{chunk-4APOHK7Y.js → chunk-AESE434J.js} +2 -2
- package/dist/{chunk-ERJNHEFV.js → chunk-AGD7F7YI.js} +3 -3
- package/dist/{chunk-K3LE5B5E.js → chunk-AGSCOISO.js} +139 -139
- package/dist/{chunk-NPXM6ZQY.js → chunk-AMBEITWL.js} +4 -4
- package/dist/{chunk-5T2CTWTB.js → chunk-BBPAXOU6.js} +5 -5
- package/dist/{chunk-WGA25EV5.js → chunk-BMCZQZMI.js} +4 -4
- package/dist/{chunk-CJPLBFFY.js → chunk-CJ76PSJT.js} +9 -9
- package/dist/{chunk-6NYLVUSZ.js → chunk-CV54PASI.js} +53 -50
- package/dist/{chunk-XCPF7BEJ.js → chunk-DEVGLLNZ.js} +5 -5
- package/dist/{chunk-JTUKLCXS.js → chunk-DXUICABI.js} +1 -1
- package/dist/{chunk-LAKHO2B7.js → chunk-ES5A66IH.js} +8 -8
- package/dist/{chunk-UDE5C2XN.js → chunk-F3557PVM.js} +3 -3
- package/dist/{chunk-HHFPIJGL.js → chunk-F6IKWAIU.js} +21 -17
- package/dist/{chunk-II747OWE.js → chunk-FV55SRQU.js} +7 -7
- package/dist/{chunk-SEUCZZCP.js → chunk-G57RYMKB.js} +3 -3
- package/dist/{chunk-MNVDVR3M.js → chunk-GMVW6ZZK.js} +4 -4
- package/dist/{chunk-MN2PB6WB.js → chunk-HLQH3AXB.js} +3 -3
- package/dist/{chunk-HSEQYBDO.js → chunk-HOOOOJJP.js} +3 -3
- package/dist/{chunk-IXUPUFCG.js → chunk-I5VEROXW.js} +2 -2
- package/dist/{chunk-UI4OPTYR.js → chunk-IV446ZLJ.js} +2 -2
- package/dist/{chunk-CYB7UQA2.js → chunk-JQOX6HW4.js} +5 -5
- package/dist/{chunk-OPG4DYX2.js → chunk-JSEVKRVJ.js} +3 -3
- package/dist/{chunk-46TUUNM3.js → chunk-JXKO6JT7.js} +36 -36
- package/dist/{chunk-FPBGAT5D.js → chunk-JZWUAEMO.js} +3 -3
- package/dist/{chunk-6R7S775T.js → chunk-K6CB5TKM.js} +2 -2
- package/dist/{chunk-OO63ZU46.js → chunk-K6PRKPFX.js} +8 -8
- package/dist/{chunk-W5ONYLOP.js → chunk-KQLACS4Q.js} +4 -4
- package/dist/{chunk-SEATQLFB.js → chunk-KUU7T4ZE.js} +31 -31
- package/dist/{chunk-KXYW3DRR.js → chunk-L3BDO2BI.js} +9 -9
- package/dist/{chunk-IRQCV3OT.js → chunk-LLS2WO2K.js} +4 -4
- package/dist/{chunk-7KLAMYMS.js → chunk-LZDA6SVD.js} +46 -45
- package/dist/{chunk-UCQ2VUTG.js → chunk-M6ZFSTIZ.js} +2 -2
- package/dist/{chunk-DYG5D3FD.js → chunk-M7GJ6YUF.js} +2 -2
- package/dist/{chunk-XXZZGXW2.js → chunk-MEIJDRHU.js} +2 -2
- package/dist/{chunk-QXTKSOFI.js → chunk-MF4W6FHU.js} +1 -1
- package/dist/{chunk-FSYVOCS7.js → chunk-MYLPOVX6.js} +12 -13
- package/dist/{chunk-ZH5R7NKN.js → chunk-N6BWB35H.js} +3 -3
- package/dist/{chunk-PWIXETG7.js → chunk-NGAODDLX.js} +5 -5
- package/dist/{chunk-Z5UCPWGU.js → chunk-NNB7VUCH.js} +23 -23
- package/dist/{chunk-QEZL5MPJ.js → chunk-NUU76247.js} +3 -3
- package/dist/{chunk-2CGPQ7IM.js → chunk-OGUMHW2X.js} +6 -6
- package/dist/{chunk-I2BGYNHD.js → chunk-OJPZEUPH.js} +7 -7
- package/dist/{chunk-OOGXZL7Z.js → chunk-OKNE3TWU.js} +2 -2
- package/dist/{chunk-KUTFFHUM.js → chunk-OVV2HXJ6.js} +2 -2
- package/dist/{chunk-7KGASMCE.js → chunk-PIPIA7K7.js} +8 -8
- package/dist/{chunk-AM4FKL4J.js → chunk-PL7AIAWS.js} +12 -12
- package/dist/{chunk-WL2DSNJV.js → chunk-Q22BMRPF.js} +2 -2
- package/dist/{chunk-AMTJ4G32.js → chunk-QOLOQ35F.js} +6 -6
- package/dist/{chunk-BUECLQXK.js → chunk-QZTJ2556.js} +4 -4
- package/dist/{chunk-O7QOWS6M.js → chunk-RXCT3OCU.js} +12 -12
- package/dist/{chunk-F5KILDDO.js → chunk-S5KQIFKJ.js} +122 -98
- package/dist/{chunk-CBYQ2ZN3.js → chunk-S5TEJIGP.js} +2 -2
- package/dist/{chunk-HMLGM2MW.js → chunk-SF2B7MZK.js} +3 -3
- package/dist/{chunk-FURLOAUM.js → chunk-SNGFEESM.js} +3 -3
- package/dist/{chunk-VD32O6KZ.js → chunk-SQPIECXD.js} +3 -3
- package/dist/{chunk-5YL5OC2G.js → chunk-SRX6B544.js} +5 -5
- package/dist/{chunk-CFSFBKHP.js → chunk-TEBS7FE6.js} +2 -2
- package/dist/{chunk-TTVAHCWP.js → chunk-TM5LRSBB.js} +2 -2
- package/dist/{chunk-ZZEIC5PT.js → chunk-TUEFTRC2.js} +5 -5
- package/dist/{chunk-EWCDPFW5.js → chunk-U6DR6464.js} +4 -4
- package/dist/{chunk-7TXBKK5G.js → chunk-UIEFE6FU.js} +7 -7
- package/dist/{chunk-3H3EPMFY.js → chunk-UJ6ZZJDD.js} +2 -2
- package/dist/{chunk-YTPGQV5C.js → chunk-V4IBHDIY.js} +11 -11
- package/dist/{chunk-XNCP4KYO.js → chunk-VQPDATQT.js} +1 -1
- package/dist/{chunk-4PQHO74B.js → chunk-VZ22VUAS.js} +2 -2
- package/dist/{chunk-BUJRS7XB.js → chunk-WYS6XVZ3.js} +2 -2
- package/dist/{chunk-QV3GXQRE.js → chunk-XIABDKFQ.js} +2 -2
- package/dist/{chunk-EESV6NU2.js → chunk-XJU6UAFV.js} +2 -2
- package/dist/{chunk-SBR2WZXG.js → chunk-XNZURZ7T.js} +59 -52
- package/dist/{chunk-WFG67AYS.js → chunk-Y6NO3DLQ.js} +3 -3
- package/dist/{chunk-37AHZ7JX.js → chunk-Y76ERHLK.js} +5 -5
- package/dist/{chunk-HHW5AWVD.js → chunk-YI76TURL.js} +30 -30
- package/dist/{chunk-ZVYN4FXD.js → chunk-YSLMMR2U.js} +14 -14
- package/dist/{chunk-ZTUNCVAR.js → chunk-Z2BRSQ6M.js} +49 -49
- package/dist/{chunk-D64XUF5Q.js → chunk-Z3SNX45M.js} +16 -16
- package/dist/{chunk-FMOEVAGT.js → chunk-Z4VN347O.js} +3 -3
- package/dist/{chunk-UWY3R4TS.js → chunk-ZHGWR45B.js} +22 -22
- package/dist/cli.d.ts +20 -18
- package/dist/cli.js +50 -50
- package/dist/{codegen-command-SW2AP7KR.js → codegen-command-L2OO6OTE.js} +63 -63
- package/dist/{commands-CVFYC4GK.js → commands-2E4JB3DB.js} +2 -2
- package/dist/{completion-AUEQC4XJ.js → completion-LPJIH5VQ.js} +11 -11
- package/dist/{config-JU6OQC77.js → config-QDCRKEWD.js} +4 -4
- package/dist/{deploy-command-RD6W7PXN.js → deploy-command-HJZNYCUY.js} +57 -57
- package/dist/{deploy-source-ULSWF2V7.js → deploy-source-5COWTBOC.js} +34 -34
- package/dist/{dev-env-sync-E2GFIVC5.js → dev-env-sync-GZ4QQJGV.js} +51 -51
- package/dist/{display-name-hint-DMORHANO.js → display-name-hint-AHCNH6TF.js} +11 -11
- package/dist/{emit-hOFbgzde.d.ts → emit-DqG6qddr.d.ts} +2 -2
- package/dist/env-example-refresh-DWQIOQYR.js +127 -0
- package/dist/{env-pull-command-QYQEOUE3.js → env-pull-command-Z4RLVEGJ.js} +46 -46
- package/dist/{env-target-KUWQYHZ7.js → env-target-ZHQUS5BO.js} +13 -13
- package/dist/{env-var-command-2ZAVIPNY.js → env-var-command-FKQ4VVQ6.js} +47 -47
- package/dist/{ephemeral-BMFY55BQ.js → ephemeral-L4KUOGEU.js} +9 -9
- package/dist/{ephemeral-command-UKHBT3OW.js → ephemeral-command-GRPFI3TD.js} +47 -47
- package/dist/{ephemeral-state-6TY4JIPA.js → ephemeral-state-VLYU2BXR.js} +11 -11
- package/dist/{generate-command-YN3HZWHG.js → generate-command-XNODJFDQ.js} +68 -68
- package/dist/{gitignore-AU5X5F3I.js → gitignore-VWRSZX5F.js} +16 -16
- package/dist/{guards-EJU2ONAX.js → guards-OPSGB6LG.js} +5 -5
- package/dist/{hosted-file-PSHJB3HX.js → hosted-file-S7YUQAH6.js} +2 -2
- package/dist/{impersonate-command-ZKE77GFT.js → impersonate-command-AEKIZHHK.js} +40 -40
- package/dist/{import-TBTOTU52.js → import-PHSSFFLA.js} +5 -5
- package/dist/index.d.ts +4 -4
- package/dist/index.js +10 -10
- package/dist/{init-command-NPXBMJNG.js → init-command-TI3HCKXZ.js} +55 -55
- package/dist/{init-modules-5TSTLGH5.js → init-modules-SGSX7XEY.js} +9 -9
- package/dist/{init-web-Y2PBNJTQ.js → init-web-6HX3YLQP.js} +2 -2
- package/dist/internal.d.ts +4 -4
- package/dist/internal.js +24 -25
- package/dist/{io-ZUKAGFVE.js → io-TAF4WXYQ.js} +5 -5
- package/dist/{keep-data-merge-TDSELE5U.js → keep-data-merge-GUGF7MVZ.js} +28 -28
- package/dist/{lambda-config-reconcile-OUZ4OYAB.js → lambda-config-reconcile-65U6I4KU.js} +3 -3
- package/dist/{landed-6VO7CX5P.js → landed-QA6PRTV2.js} +4 -4
- package/dist/{landing-record-W7VQ4KV4.js → landing-record-FCAWLCZU.js} +22 -22
- package/dist/{live-diff-2S7E3SBZ.js → live-diff-IM4W3ELT.js} +5 -5
- package/dist/local-engine-choice-FPJAZSSD.js +79 -0
- package/dist/{local-engine-command-5MTGZIZ4.js → local-engine-command-73NHWD6V.js} +92 -92
- package/dist/{local-engine-config-5U3SC434.js → local-engine-config-W3KB7RWM.js} +2 -2
- package/dist/{local-engine-deploy-TXAOYRGF.js → local-engine-deploy-Y4OAWL7K.js} +16 -16
- package/dist/{local-engine-process-6VZ7JJBP.js → local-engine-process-6YPJHKYM.js} +11 -11
- package/dist/{local-engine-state-TJWPWCC4.js → local-engine-state-OCW5YDD7.js} +3 -3
- package/dist/{local-engine-update-check-R5SPDVEJ.js → local-engine-update-check-X7TZGRFL.js} +7 -7
- package/dist/{lock-TS465GVY.js → lock-WXXC3QHL.js} +3 -3
- package/dist/{lock-commands-OBXAUSZX.js → lock-commands-PKDBNRSD.js} +55 -55
- package/dist/{login-command-CB3O3UDZ.js → login-command-V4U4FA5G.js} +27 -27
- package/dist/{logout-command-J5CP5HZZ.js → logout-command-TV3P545Z.js} +16 -16
- package/dist/{loop-UFHKSOQ4.js → loop-VKHGQ6MP.js} +6 -6
- package/dist/{marketplace-command-A5S25ZHF.js → marketplace-command-LEFOAEAV.js} +31 -31
- package/dist/{marketplace-resolve-GRXMK5YD.js → marketplace-resolve-ME7O7JBJ.js} +7 -7
- package/dist/{meta-client-FB73643X.js → meta-client-TEEECA5W.js} +14 -14
- package/dist/{module-manifest-GIKFNXPE.js → module-manifest-7YLGIRCY.js} +3 -3
- package/dist/node.d.ts +4 -4
- package/dist/node.js +56 -56
- package/dist/operation-outcome-GNDD35WL.js +51 -0
- package/dist/{output-target-6HNPK6KC.js → output-target-5FWX3NGZ.js} +17 -17
- package/dist/{plan-disclosure-BHYG7TZ7.js → plan-disclosure-QGL5UYQR.js} +16 -16
- package/dist/{plugin-contributions-X4V22PJQ.js → plugin-contributions-GNFTWDEB.js} +4 -4
- package/dist/{plugin-prompt-DKNQHW6Y.js → plugin-prompt-VEQGMZ4T.js} +4 -4
- package/dist/{plugin-questions-CQRVOWFK.js → plugin-questions-BGRL23GO.js} +3 -3
- package/dist/{preflight-command-NZ75PSRL.js → preflight-command-VKJKXRRI.js} +63 -63
- package/dist/{profile-command-KIRI4GA4.js → profile-command-P7A3BH26.js} +29 -29
- package/dist/{profile-pointer-UOO7JNFG.js → profile-pointer-HG7IXE4I.js} +4 -4
- package/dist/{profile-select-74TRDEPD.js → profile-select-45G5VPJK.js} +2 -2
- package/dist/{project-dependency-JGCJZ26H.js → project-dependency-Z4CKOCJI.js} +8 -8
- package/dist/{project-sdk-FOR4IOXL.js → project-sdk-JWZWGXXR.js} +3 -3
- package/dist/promote-command-KHTIK44I.js +141 -0
- package/dist/{prompt-5GUQTCSP.js → prompt-SURZOUUW.js} +3 -3
- package/dist/{publish-command-74HMEZ7E.js → publish-command-HGAB3H4A.js} +131 -60
- package/dist/{pull-command-VO5RRGZ5.js → pull-command-EUEWBRXZ.js} +66 -66
- package/dist/{pull-superseded-GGURV5J3.js → pull-superseded-TOT5S4QU.js} +3 -3
- package/dist/{release-command-ZHM5FA4M.js → release-command-WOVQAMUY.js} +64 -64
- package/dist/{release-ns-command-2TL26YOM.js → release-ns-command-WOQE2BDQ.js} +87 -87
- package/dist/{retry-command-Y5YJGOH3.js → retry-command-JRGMZZAC.js} +8 -8
- package/dist/{routes-manifest-3BNZIVST.js → routes-manifest-URFMAWJE.js} +5 -5
- package/dist/scaffold.js +2 -2
- package/dist/{secrets-file-NBBR6DYS.js → secrets-file-YWZWVJ52.js} +16 -16
- package/dist/{secrets-fill-command-X3HQ4JYN.js → secrets-fill-command-HIHK3VH2.js} +54 -54
- package/dist/{seed-GJHJSEUE.js → seed-24DTEY5S.js} +7 -7
- package/dist/{source-resolve-NTI3JFO6.js → source-resolve-OWD3MIEO.js} +23 -23
- package/dist/{static-host-WM24RG25.js → static-host-UIR2OLPQ.js} +9 -9
- package/dist/{status-command-RVMOLYPR.js → status-command-JKTHH5QE.js} +53 -53
- package/dist/{store-MR7IKXKK.js → store-5YAQS6KU.js} +6 -6
- package/dist/{store-CfgPaVPO.d.ts → store-zxw2go0f.d.ts} +3 -3
- package/dist/sveltekit.d.ts +5 -5
- package/dist/sveltekit.js +1 -1
- package/dist/{sync-contributions-KGCVRH2J.js → sync-contributions-RBB6JVOL.js} +9 -9
- package/dist/{table-ZBDPKMNH.js → table-MQFVYA4K.js} +8 -8
- package/dist/{tables-command-GAOXJPMA.js → tables-command-5Q4BSUNO.js} +39 -39
- package/dist/{tenant-GKXMOYLK.js → tenant-Q3LPVSSM.js} +10 -10
- package/dist/{tenant-command-FAJ7WZTH.js → tenant-command-BFVU2PEX.js} +84 -84
- package/dist/{test-command-53FRDZ32.js → test-command-F4VUU4QR.js} +40 -40
- package/dist/{tests-C55M5EQS.js → tests-5ZSDFVIJ.js} +6 -6
- package/dist/{token-44CKLYWD.js → token-TERSTNU4.js} +12 -12
- package/dist/{toolchain-hooks-BGZBDFAT.js → toolchain-hooks-QVUZ6HZ4.js} +2 -2
- package/dist/{toolchain-modules-MPPH633S.js → toolchain-modules-FD5ANV2U.js} +5 -5
- package/dist/tracked-backend-B4HTME4S.js +80 -0
- package/dist/{update-check-Q4HJHHL5.js → update-check-O4C2LCZH.js} +53 -53
- package/dist/{upgrade-command-C63HIBVH.js → upgrade-command-NVFWLMTA.js} +56 -56
- package/dist/{whoami-command-WC5EKB4W.js → whoami-command-YKNTISIV.js} +15 -15
- package/dist/{workspace-EJVWTIWX.js → workspace-GGVGE2S5.js} +5 -5
- package/dist/{workspace-binding-BRPPUSWG.js → workspace-binding-OS4ZOX4S.js} +14 -14
- package/dist/{workspace-command-Y6STVPYO.js → workspace-command-GTUNVN7K.js} +77 -77
- package/dist/{workspace-env-SIINWNMP.js → workspace-env-467C5KHM.js} +13 -13
- package/dist/{workspace-export-AIGM6LC7.js → workspace-export-3XTVGQVM.js} +5 -5
- package/dist/{writable-FYJBTJOU.js → writable-7SSWUQJ3.js} +3 -3
- package/dist/{xano-BSHYVFSE.js → xano-6RS5XQZE.js} +7 -7
- package/dist/{xanosdk-import-UKEO7R7O.js → xanosdk-import-E3WSIYUE.js} +9 -9
- package/dist/{xanosdk-project-MQTZKITV.js → xanosdk-project-KH5TZ2KI.js} +14 -14
- package/guides/README.md +1 -0
- package/guides/authoring.md +3 -5
- package/guides/bundle.md +45 -0
- package/guides/cli.md +32 -30
- package/guides/codegen.md +5 -4
- package/guides/codes.md +9 -9
- package/guides/deploying.md +63 -58
- package/guides/environment.md +14 -14
- package/guides/marketplace.md +7 -4
- package/guides/project-structure.md +14 -0
- package/llms/client.md +3 -4
- package/llms/errors.md +1 -1
- package/llms/tests.md +2 -2
- package/llms-full.txt +14 -15
- package/llms.txt +8 -8
- package/manifest.json +110 -107
- package/package.json +4 -4
- package/dist/env-example-refresh-WFKGILLY.js +0 -127
- package/dist/local-engine-choice-OXULXWEP.js +0 -79
- package/dist/operation-outcome-V4FUJI7V.js +0 -51
- package/dist/promote-command-IPDH5OBT.js +0 -141
- 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
|
|
45
|
-
xanosdk deploy ./xano/index.ts --
|
|
46
|
-
xanosdk deploy ./xano/index.ts --static ./frontend/dist
|
|
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
|
|
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
|
|
57
|
-
xanosdk deploy ./xano/index.ts --
|
|
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
|
|
60
|
-
xanosdk deploy ./xano/index.ts --local
|
|
61
|
-
|
|
62
|
-
xanosdk local
|
|
63
|
-
xanosdk local
|
|
64
|
-
xanosdk local
|
|
65
|
-
xanosdk local
|
|
66
|
-
xanosdk local
|
|
67
|
-
xanosdk local
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
101
|
-
| `local
|
|
102
|
-
| `local
|
|
103
|
-
| `local
|
|
104
|
-
| `local
|
|
105
|
-
| `local
|
|
106
|
-
| `local
|
|
107
|
-
| `local
|
|
108
|
-
| `local
|
|
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). |
|
package/guides/deploying.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
156
|
-
same handle on an ephemeral or tenant, the engine's name on a
|
|
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
|
|
173
|
-
|
|
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).
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
**
|
|
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` |
|
|
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
|
|
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`
|
|
440
|
-
and names who can turn them on
|
|
441
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
611
|
+
### Deploying locally
|
|
606
612
|
|
|
607
|
-
`xanosdk deploy --local
|
|
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": { "
|
|
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
|
-
`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
638
|
-
or `local
|
|
639
|
-
[the CLI guide](cli.md#naming-a-backend)).
|
|
640
|
-
|
|
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
|
|
647
|
-
| `xanosdk local
|
|
648
|
-
| `xanosdk local
|
|
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
|
|
655
|
+
#### A frontend on the Xano Engine, and server rendering
|
|
651
656
|
|
|
652
|
-
`xanosdk deploy <entry> --local
|
|
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
|
|
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
|
|
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 `
|
|
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
|
|
728
|
-
list` shows its size, and `xanosdk local
|
|
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
|
|
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
|
|
743
|
-
- `
|
|
744
|
-
`npm run xano:deploy
|
|
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
|
|
762
|
-
npm run xano:deploy
|
|
763
|
-
unset
|
|
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
|
-
`
|
|
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
|
|
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
|
|
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
|
|
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,
|
package/guides/environment.md
CHANGED
|
@@ -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
|
-
**
|
|
52
|
+
**Xano Engine** (see [Deploying locally](deploying.md#deploying-locally))
|
|
53
53
|
|
|
54
54
|
| Variable | What it does |
|
|
55
55
|
|---|---|
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
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
|
|
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
|
|
117
|
-
every command shares. Left off, it is the ephemeral or
|
|
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
|
|
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
|
|
146
|
-
the ephemeral or
|
|
147
|
-
workspace or a tenant, and a
|
|
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
|
-
|
|
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
|