@xano/sdk 1.0.0
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 +788 -0
- package/LICENSE +21 -0
- package/README.md +541 -0
- package/dist/.build-fingerprint +1 -0
- package/dist/agent-file-refresh-ZEMK33AX.js +38 -0
- package/dist/answer-shape-K67TAAPY.js +33 -0
- package/dist/backend-dir-2U53CIAL.js +39 -0
- package/dist/backend-slot-7QXW2QYC.js +28 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +255 -0
- package/dist/branch-NCRNWQBQ.js +61 -0
- package/dist/branch-commands-ACIRCEQJ.js +79 -0
- package/dist/bundle.d.ts +223 -0
- package/dist/bundle.js +153 -0
- package/dist/capture-WAXPD7DR.js +41 -0
- package/dist/chunk-27GWNP2I.js +23 -0
- package/dist/chunk-2CMJZDCL.js +177 -0
- package/dist/chunk-2EZ3ZJZZ.js +302 -0
- package/dist/chunk-2GNFDZA2.js +390 -0
- package/dist/chunk-2MNLRIOX.js +11 -0
- package/dist/chunk-2TFRR6JV.js +104 -0
- package/dist/chunk-2ZUEE4EK.js +408 -0
- package/dist/chunk-36JUQZVQ.js +22 -0
- package/dist/chunk-3DRXWLJ5.js +83 -0
- package/dist/chunk-3JDU4VRL.js +137 -0
- package/dist/chunk-3KZCLN4Z.js +241 -0
- package/dist/chunk-3LDULPRE.js +168 -0
- package/dist/chunk-3M4LFYNQ.js +111 -0
- package/dist/chunk-3XI5CTUE.js +22 -0
- package/dist/chunk-3YW23UFH.js +50 -0
- package/dist/chunk-45UIT5T2.js +862 -0
- package/dist/chunk-4BW2SG2N.js +46 -0
- package/dist/chunk-4KHEMC32.js +79 -0
- package/dist/chunk-4POWHT2K.js +321 -0
- package/dist/chunk-4Q2GN7NW.js +192 -0
- package/dist/chunk-5A2PLKZB.js +70 -0
- package/dist/chunk-5FBYXK5P.js +159 -0
- package/dist/chunk-5HVXPTU4.js +323 -0
- package/dist/chunk-5QU2P5CA.js +304 -0
- package/dist/chunk-5V5XU32D.js +191 -0
- package/dist/chunk-5ZSO4T2G.js +10 -0
- package/dist/chunk-622HUCZT.js +10 -0
- package/dist/chunk-65HWOMGV.js +177 -0
- package/dist/chunk-6ELFRN3P.js +365 -0
- package/dist/chunk-6HO3NCSJ.js +1055 -0
- package/dist/chunk-6IUMKYWI.js +457 -0
- package/dist/chunk-6KEB3C3U.js +65 -0
- package/dist/chunk-6MR5TI5V.js +987 -0
- package/dist/chunk-6NNTNXN7.js +157 -0
- package/dist/chunk-6PBR37LN.js +97 -0
- package/dist/chunk-6QXLMMT3.js +155 -0
- package/dist/chunk-6ZGJCBZS.js +224 -0
- package/dist/chunk-73IVBKMA.js +250 -0
- package/dist/chunk-7G3CTU7I.js +286 -0
- package/dist/chunk-A3UDOZB6.js +222 -0
- package/dist/chunk-A6E77GDW.js +85 -0
- package/dist/chunk-AHJWCYQO.js +660 -0
- package/dist/chunk-AKNCFVKZ.js +36 -0
- package/dist/chunk-AM4FKL4J.js +237 -0
- package/dist/chunk-AN6BL47T.js +26 -0
- package/dist/chunk-AOSYVMUS.js +147 -0
- package/dist/chunk-APWXY5SL.js +182 -0
- package/dist/chunk-AWEIIR2U.js +218 -0
- package/dist/chunk-AWQ7BQTQ.js +73 -0
- package/dist/chunk-BAUZOWGX.js +393 -0
- package/dist/chunk-BHACRS6R.js +940 -0
- package/dist/chunk-BWPNT55T.js +680 -0
- package/dist/chunk-C6RIMRU4.js +187 -0
- package/dist/chunk-CGVQZXYG.js +263 -0
- package/dist/chunk-CIMQZRRE.js +162 -0
- package/dist/chunk-CJHQKJU4.js +113 -0
- package/dist/chunk-CTMO46PK.js +1897 -0
- package/dist/chunk-D53J55C5.js +106 -0
- package/dist/chunk-D7VGG3WS.js +90 -0
- package/dist/chunk-DAD3ONIS.js +245 -0
- package/dist/chunk-DGWHAVRG.js +162 -0
- package/dist/chunk-DX4QR4B2.js +483 -0
- package/dist/chunk-EHP3WPEG.js +21 -0
- package/dist/chunk-ELP2HMXC.js +432 -0
- package/dist/chunk-ERVIASGL.js +21 -0
- package/dist/chunk-ET4Y4XCB.js +865 -0
- package/dist/chunk-ETO6LGLD.js +4750 -0
- package/dist/chunk-EUUUMY7J.js +24 -0
- package/dist/chunk-FQJ2TTHP.js +218 -0
- package/dist/chunk-FQOF7E2E.js +133 -0
- package/dist/chunk-FWD7AL6N.js +21 -0
- package/dist/chunk-FXFV3KU6.js +138 -0
- package/dist/chunk-FXRQOWTE.js +171 -0
- package/dist/chunk-G554NZNI.js +210 -0
- package/dist/chunk-GSGDWJB5.js +13 -0
- package/dist/chunk-H2V3N23D.js +66 -0
- package/dist/chunk-H5C7MBCR.js +159 -0
- package/dist/chunk-HHN734BU.js +371 -0
- package/dist/chunk-HRVBLCVJ.js +243 -0
- package/dist/chunk-HVRUQXGD.js +1264 -0
- package/dist/chunk-I4F5TCJH.js +130 -0
- package/dist/chunk-IDOTCMDV.js +57 -0
- package/dist/chunk-IGOLHKWF.js +427 -0
- package/dist/chunk-JGE7CAWB.js +148 -0
- package/dist/chunk-JTUKLCXS.js +92 -0
- package/dist/chunk-JZGVVJSI.js +66 -0
- package/dist/chunk-K4WX6UUU.js +923 -0
- package/dist/chunk-K5BBGTYZ.js +217 -0
- package/dist/chunk-K6RXBGUB.js +427 -0
- package/dist/chunk-KTSDSD36.js +165 -0
- package/dist/chunk-L5JYN3NM.js +1038 -0
- package/dist/chunk-LIEOKXKD.js +354 -0
- package/dist/chunk-LLNZGEFK.js +51 -0
- package/dist/chunk-LPECSJ2J.js +55 -0
- package/dist/chunk-LQCMKAJ7.js +413 -0
- package/dist/chunk-LRN4ZJCQ.js +1145 -0
- package/dist/chunk-MJ4ZVHKN.js +17 -0
- package/dist/chunk-MXHSQOC4.js +3061 -0
- package/dist/chunk-N5GKCWE5.js +367 -0
- package/dist/chunk-NA3PXMEF.js +10 -0
- package/dist/chunk-NAQDMEHV.js +76 -0
- package/dist/chunk-NWKXM5RD.js +109 -0
- package/dist/chunk-NZOWWHU5.js +196 -0
- package/dist/chunk-OHX6MIUZ.js +184 -0
- package/dist/chunk-OOXWYAA4.js +15 -0
- package/dist/chunk-OPHB5ORL.js +1990 -0
- package/dist/chunk-OXA6PSZT.js +1725 -0
- package/dist/chunk-P2HAGF6H.js +73 -0
- package/dist/chunk-PTHVMXZI.js +3036 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-Q325JKYB.js +189 -0
- package/dist/chunk-Q7DGTQ5G.js +255 -0
- package/dist/chunk-QCNYHBL7.js +601 -0
- package/dist/chunk-QO6BVGS5.js +145 -0
- package/dist/chunk-QXTKSOFI.js +76 -0
- package/dist/chunk-ROY4YAEQ.js +66 -0
- package/dist/chunk-RTJRZFFY.js +447 -0
- package/dist/chunk-SAVJUS2X.js +128 -0
- package/dist/chunk-SFLHVCKX.js +173 -0
- package/dist/chunk-STSFNCY4.js +127 -0
- package/dist/chunk-SWBF2LTK.js +170 -0
- package/dist/chunk-T5KELPAR.js +109 -0
- package/dist/chunk-TFFGOFVZ.js +1481 -0
- package/dist/chunk-TLHIFK4M.js +256 -0
- package/dist/chunk-TLQE7ZN3.js +156 -0
- package/dist/chunk-TPHWJ7UG.js +1981 -0
- package/dist/chunk-TRJCALW3.js +291 -0
- package/dist/chunk-TTEIYD5P.js +133 -0
- package/dist/chunk-U64O2MXY.js +407 -0
- package/dist/chunk-UCQ2VUTG.js +630 -0
- package/dist/chunk-UTI5G6OJ.js +44 -0
- package/dist/chunk-UVHDMMIP.js +188 -0
- package/dist/chunk-UZ6QQWJT.js +120 -0
- package/dist/chunk-VAX3UZOY.js +686 -0
- package/dist/chunk-W3HBUKFO.js +57 -0
- package/dist/chunk-WKQLGKCL.js +2823 -0
- package/dist/chunk-WQFNASK4.js +560 -0
- package/dist/chunk-WRBKLYSJ.js +224 -0
- package/dist/chunk-WTPZRR4I.js +17 -0
- package/dist/chunk-WZDJ2LLX.js +2385 -0
- package/dist/chunk-X2NL4KUO.js +14 -0
- package/dist/chunk-X4DVXBFY.js +38 -0
- package/dist/chunk-X677DMZM.js +7050 -0
- package/dist/chunk-XBKMWY7F.js +612 -0
- package/dist/chunk-XNCP4KYO.js +78 -0
- package/dist/chunk-XVBGLISP.js +35 -0
- package/dist/chunk-XW6KISBB.js +1192 -0
- package/dist/chunk-YGZHHAAB.js +8156 -0
- package/dist/chunk-YHEFQUQB.js +186 -0
- package/dist/chunk-YLDALTWZ.js +653 -0
- package/dist/chunk-YU4HSQW7.js +229 -0
- package/dist/chunk-ZDPP6RKB.js +27 -0
- package/dist/chunk-ZFDZKNGG.js +194 -0
- package/dist/chunk-ZIY7RNUT.js +49 -0
- package/dist/chunk-ZYJP6BOO.js +30 -0
- package/dist/cli.d.ts +1111 -0
- package/dist/cli.js +165 -0
- package/dist/codegen-command-VR2GWR6C.js +173 -0
- package/dist/codegen.d.ts +115 -0
- package/dist/codegen.js +19 -0
- package/dist/commands-GJMJ4XYZ.js +76 -0
- package/dist/completion-ZQLO6PB6.js +738 -0
- package/dist/config-MBYGCAFK.js +136 -0
- package/dist/deploy-command-JVZPWHMK.js +180 -0
- package/dist/deploy-source-3W45CXMP.js +81 -0
- package/dist/dev-env-sync-HN44K4D5.js +188 -0
- package/dist/diagnostics-UEAAHWVF.js +30 -0
- package/dist/display-name-hint-ABBPVQIR.js +46 -0
- package/dist/emit-CyhBDxli.d.ts +7007 -0
- package/dist/env-example-refresh-ET5HMMDW.js +126 -0
- package/dist/env-pull-command-TNMNB3CV.js +323 -0
- package/dist/env-target-O4HRKTGZ.js +40 -0
- package/dist/env-var-command-ZIRDCAZA.js +427 -0
- package/dist/ephemeral-P7F3PMAD.js +54 -0
- package/dist/ephemeral-command-CLJJKOFT.js +592 -0
- package/dist/ephemeral-state-PYCBSOGX.js +61 -0
- package/dist/file-lock-PT74GWYW.js +10 -0
- package/dist/generate-command-AYEOLA26.js +510 -0
- package/dist/gitignore-3SJ3WNRG.js +51 -0
- package/dist/guards-4EBNCZDC.js +162 -0
- package/dist/hosted-file-PSHJB3HX.js +28 -0
- package/dist/impersonate-command-5JAS3WSV.js +152 -0
- package/dist/import-EQSFU6JC.js +19 -0
- package/dist/index.d.ts +5470 -0
- package/dist/index.js +371 -0
- package/dist/init-command-X2FR4UAK.js +125 -0
- package/dist/init-modules-RY7UHAOL.js +50 -0
- package/dist/init-web-M4YZSZK6.js +42 -0
- package/dist/internal.d.ts +179 -0
- package/dist/internal.js +2634 -0
- package/dist/io-RC56QSN5.js +26 -0
- package/dist/keep-data-merge-7MPLVAVI.js +1119 -0
- package/dist/lambda-config-reconcile-OUZ4OYAB.js +116 -0
- package/dist/landed-753YLJ5H.js +40 -0
- package/dist/landing-record-SU52SKXU.js +61 -0
- package/dist/live-diff-YONW2VI3.js +65 -0
- package/dist/local-engine-choice-CH5X3W7E.js +79 -0
- package/dist/local-engine-command-Z3OL7VOD.js +766 -0
- package/dist/local-engine-config-5U3SC434.js +39 -0
- package/dist/local-engine-deploy-PCQ4SNPB.js +39 -0
- package/dist/local-engine-process-EHTE5LLU.js +63 -0
- package/dist/local-engine-state-A4FTRFAF.js +32 -0
- package/dist/local-engine-update-check-6L645VBL.js +162 -0
- package/dist/lock-MRRHW5GS.js +87 -0
- package/dist/lock-commands-2QG25HL7.js +963 -0
- package/dist/login-command-QPYRWOXZ.js +538 -0
- package/dist/logout-command-WOIQLDP6.js +56 -0
- package/dist/loop-ALIZLOSX.js +191 -0
- package/dist/marketplace-command-K5YL42NO.js +977 -0
- package/dist/marketplace-resolve-LY32JES5.js +40 -0
- package/dist/meta-client-YXGPW53C.js +244 -0
- package/dist/module-manifest-JFGHU2TC.js +38 -0
- package/dist/near-key.d.ts +13 -0
- package/dist/near-key.js +8 -0
- package/dist/node.d.ts +95 -0
- package/dist/node.js +969 -0
- package/dist/operation-outcome-TZSESNC7.js +51 -0
- package/dist/output-target-AL3I44GG.js +47 -0
- package/dist/package-manager-PRAHUSCN.js +34 -0
- package/dist/plan-disclosure-6G4MLZKD.js +114 -0
- package/dist/plugin-contributions-WRNY5ABG.js +28 -0
- package/dist/plugin-prompt-4VA3B4FF.js +20 -0
- package/dist/plugin-questions-JTSYA74Q.js +24 -0
- package/dist/plugin.d.ts +396 -0
- package/dist/plugin.js +1 -0
- package/dist/preflight-command-2T5Z36MI.js +321 -0
- package/dist/profile-command-AH3PIM4X.js +800 -0
- package/dist/profile-pointer-GRWJU3YD.js +31 -0
- package/dist/profile-select-74TRDEPD.js +23 -0
- package/dist/project-dependency-KSH63ODT.js +35 -0
- package/dist/project-sdk-REPPOIBD.js +24 -0
- package/dist/promote-command-PCWT5N6S.js +140 -0
- package/dist/prompt-II3F3LND.js +27 -0
- package/dist/publish-command-TTDUUJI5.js +414 -0
- package/dist/pull-command-VBO7C4S3.js +161 -0
- package/dist/pull-superseded-GJWLG7XO.js +20 -0
- package/dist/release-command-N4ZPKMHR.js +146 -0
- package/dist/release-ns-command-3KFDMZ6G.js +1745 -0
- package/dist/response-HlXahv4K.d.ts +925 -0
- package/dist/retry-command-AS5EVREX.js +34 -0
- package/dist/routes-manifest-SNWUVBT6.js +43 -0
- package/dist/runtime-XETHVF33.js +14 -0
- package/dist/scaffold.d.ts +1911 -0
- package/dist/scaffold.js +107 -0
- package/dist/secrets-file-LVZD6IIM.js +56 -0
- package/dist/secrets-fill-command-TTCPSVXN.js +218 -0
- package/dist/seed-VU7C3QYS.js +46 -0
- package/dist/sent-writes-N7X4OVXT.js +22 -0
- package/dist/source-resolve-S2XA3XZF.js +83 -0
- package/dist/static-host-B2Y6AG3W.js +352 -0
- package/dist/status-command-RUDXTF7I.js +554 -0
- package/dist/store-6VNCD4D7.js +20 -0
- package/dist/store-ARM6VMO5.js +98 -0
- package/dist/store-DuYfzKlW.d.ts +3144 -0
- package/dist/suggest-6FOOYKHG.js +12 -0
- package/dist/sveltekit.d.ts +154 -0
- package/dist/sveltekit.js +109 -0
- package/dist/sync-contributions-UCEROO26.js +415 -0
- package/dist/table-ENAVMITR.js +42 -0
- package/dist/tables-command-GUPXXSB5.js +156 -0
- package/dist/tenant-IIHPOHGP.js +42 -0
- package/dist/tenant-command-D5HGI2X4.js +965 -0
- package/dist/test-command-TIKZMDPZ.js +476 -0
- package/dist/tests-BGGIOK3L.js +26 -0
- package/dist/token-NICJUTMT.js +72 -0
- package/dist/toolchain-hooks-GHKLUJOH.js +96 -0
- package/dist/toolchain-modules-5EAZUONB.js +24 -0
- package/dist/tracked-backend-EIBUMDZA.js +80 -0
- package/dist/update-check-2W2NLDTC.js +136 -0
- package/dist/upgrade-command-QHNFWM7O.js +531 -0
- package/dist/verify-rollout-DRCK5TDD.js +61 -0
- package/dist/whoami-command-STGINTXH.js +51 -0
- package/dist/workspace-2CLHU2LK.js +93 -0
- package/dist/workspace-binding-56PIIPCP.js +54 -0
- package/dist/workspace-command-JEXQETJD.js +535 -0
- package/dist/workspace-env-F2RFMSC5.js +70 -0
- package/dist/workspace-export-OJSH2HIW.js +21 -0
- package/dist/writable-VA7OISSK.js +25 -0
- package/dist/xano-ICFUSPFR.js +42 -0
- package/dist/xanosdk-import-GN42TO2B.js +56 -0
- package/dist/xanosdk-project-S6DXJONQ.js +41 -0
- package/dist/xdo-CxDr2Q1C.d.ts +1371 -0
- package/guides/README.md +33 -0
- package/guides/authoring.md +921 -0
- package/guides/cli.md +401 -0
- package/guides/codegen.md +177 -0
- package/guides/codes.md +404 -0
- package/guides/coverage.md +74 -0
- package/guides/deploying.md +1525 -0
- package/guides/environment.md +400 -0
- package/guides/marketplace.md +415 -0
- package/guides/module-contract.md +558 -0
- package/guides/object-kinds.md +433 -0
- package/guides/project-structure.md +43 -0
- package/guides/scaffold.md +351 -0
- package/guides/typed-frontend.md +242 -0
- package/llms/client.md +63 -0
- package/llms/errors.md +56 -0
- package/llms/fields.md +176 -0
- package/llms/filters.md +183 -0
- package/llms/kinds-agent-mcp.md +30 -0
- package/llms/kinds-core.md +100 -0
- package/llms/kinds-knowledge.md +20 -0
- package/llms/kinds-realtime.md +76 -0
- package/llms/lambda.md +94 -0
- package/llms/legacy.md +44 -0
- package/llms/lock.md +40 -0
- package/llms/object-kinds.md +34 -0
- package/llms/statements-calls.md +62 -0
- package/llms/statements-catalog.md +320 -0
- package/llms/statements-data.md +66 -0
- package/llms/statements-runtime.md +68 -0
- package/llms/tests.md +59 -0
- package/llms/toolchain.md +16 -0
- package/llms/triggers.md +36 -0
- package/llms/values.md +29 -0
- package/llms-full.txt +2085 -0
- package/llms.txt +493 -0
- package/manifest.json +11224 -0
- package/package.json +162 -0
- package/types/lambda-globals.d.ts +129 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,788 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to [`@xanosdk/sdk`](https://www.npmjs.com/package/@xanosdk/sdk).
|
|
4
|
+
|
|
5
|
+
This file is **generated** from the [GitHub releases](https://github.com/xanots/sdk/releases)
|
|
6
|
+
by `npm run changelog` — edit the release, not this file. Each entry summarizes
|
|
7
|
+
one release and links to its full notes.
|
|
8
|
+
|
|
9
|
+
Versions before 0.0.1 belong to the retired `@xanosdk/core` line and are not
|
|
10
|
+
listed here.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 0.0.52 — Static frontends and server rendering on a local engine
|
|
15
|
+
|
|
16
|
+
_2026-09-30_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.52)
|
|
17
|
+
|
|
18
|
+
`xanosdk deploy --local-engine` can now publish a frontend with `--static`, and a new SvelteKit adapter builds sites whose server routes a local engine renders.
|
|
19
|
+
|
|
20
|
+
- `deploy --local-engine --static` publishes the frontend
|
|
21
|
+
- `@xanosdk/sdk/sveltekit`: server rendering on a local engine
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 0.0.51 — Prompts and resources for MCP triggers
|
|
26
|
+
|
|
27
|
+
_2026-09-30_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.51)
|
|
28
|
+
|
|
29
|
+
MCP server triggers can now see and narrow the prompts and resources their server lists. `export()` also warns when a function call leaves out an input the function declares, and `xanosdk upgrade` installs the version it reports.
|
|
30
|
+
|
|
31
|
+
- ⚠️ MCP server triggers receive `prompts` and `resources`
|
|
32
|
+
- `s.function.run` warns when it leaves out a declared input
|
|
33
|
+
- `xanosdk upgrade` installs the version it reports
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 0.0.50 — Full test and marketplace detail in --json
|
|
38
|
+
|
|
39
|
+
_2026-09-30_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.50)
|
|
40
|
+
|
|
41
|
+
This release puts the full detail into three `--json` outputs that used to trim it. `test run` reports every expectation of a failed unit test, and `marketplace list` and `search` return each module's whole record. A warning that `diagnostics.allow` accepts is now still reported, and an allow that no longer accepts anything warns.
|
|
42
|
+
|
|
43
|
+
- `test run --json` reports every expectation of a unit test
|
|
44
|
+
- `marketplace list` and `search` return each module's whole record
|
|
45
|
+
- A warning that `diagnostics.allow` accepts is still reported
|
|
46
|
+
- An allow that accepts nothing warns `diagnostics.allow-unused`
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 0.0.49 — Repo-hosted files for MCP and seeds
|
|
51
|
+
|
|
52
|
+
_2026-09-30_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.49)
|
|
53
|
+
|
|
54
|
+
This release adds `hostedFile()`, which points an MCP icon or a seeded file column at a file in your repo. The file ships with every deploy and is served by each backend at its own address. It also widens per-def `diagnostics.allow` to accept any warning raised about that def, and gives a refused credential its own `--json` error code.
|
|
55
|
+
|
|
56
|
+
- `hostedFile()` ships repo files for MCP icons and seeded file columns
|
|
57
|
+
- `diagnostics.allow` accepts any warning raised about the def
|
|
58
|
+
- Attached middleware with `input` warns again when it is also called
|
|
59
|
+
- A refused credential is `SDK_CREDENTIAL_REJECTED` in `--json`
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 0.0.48 — MCP prompts and resources
|
|
64
|
+
|
|
65
|
+
_2026-09-29_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.48)
|
|
66
|
+
|
|
67
|
+
This release adds MCP prompts and resources as first-class kinds, alongside tool metadata and two MCP-only statements. It also fixes two CLI papercuts: one bad local engine no longer breaks every other engine's commands, and a nested backend now reads its own env and secrets files.
|
|
68
|
+
|
|
69
|
+
- MCP servers can author prompts and resources
|
|
70
|
+
- Tools carry MCP metadata
|
|
71
|
+
- `s.mcp.elicit` and `s.mcp.progress` statements
|
|
72
|
+
- One foreign local engine no longer breaks `--local-engine`
|
|
73
|
+
- A nested backend reads its own env and secrets
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 0.0.47 — A CLI hardened end to end
|
|
78
|
+
|
|
79
|
+
_2026-09-29_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.47)
|
|
80
|
+
|
|
81
|
+
This release hardens the `xanosdk` CLI end to end. Every deploy, release, tenant, lock and account command was driven by repeated live E2E passes against real instances until each printed remedy ran as printed. Exit codes, `--json` documents and warnings now follow one contract. Scripts that read exit codes or `--json` output should check the ⚠️ items below.
|
|
82
|
+
|
|
83
|
+
- ⚠️ Exit codes follow one table: usage 1, not found or unanswered 8, unknown outcome 9
|
|
84
|
+
- ⚠️ `--json` failures and warnings have one shape
|
|
85
|
+
- `xano.lock` records where each deploy landed
|
|
86
|
+
- Deploys refuse instead of landing blind
|
|
87
|
+
- `export --strict` reports every finding in one numbered list
|
|
88
|
+
- Declaration builds and typed responses reach further
|
|
89
|
+
- Documentation corrections you may have copied
|
|
90
|
+
- Local engine, marketplace and account polish
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 0.0.46 — Declarations for guard defs, clearer deploy help
|
|
95
|
+
|
|
96
|
+
_2026-09-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.46)
|
|
97
|
+
|
|
98
|
+
A package that publishes defs using `guard.found` or `guard.owner` can now emit its own `.d.ts`. `xanosdk deploy --help` now says which flags only work with `--to`, and a refusal that already names its fix prints that line alone instead of above the full help page.
|
|
99
|
+
|
|
100
|
+
- Defs using `guard.found` or `guard.owner` can emit declarations
|
|
101
|
+
- `deploy --help` marks the ten flags that need `--to`
|
|
102
|
+
- Refusals that name their fix no longer print the help page after them
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 0.0.45 — Race-free counters with db.increment
|
|
107
|
+
|
|
108
|
+
_2026-09-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.45)
|
|
109
|
+
|
|
110
|
+
`s.db.increment` adds a number to a numeric column on every row a `where` matches, in one atomic UPDATE, so counters, stock levels, balances and tallies no longer lose updates when two requests overlap. `db.bulk.delete` now also catches a filter that is OR-ed with an empty `and()`, which deletes every row. The CLI guide lists the commands and flags it was missing.
|
|
111
|
+
|
|
112
|
+
- `s.db.increment` updates counters without losing concurrent writes
|
|
113
|
+
- ⚠️ `db.bulk.delete` requires `allRows` for a filter OR-ed with an empty `and()`
|
|
114
|
+
- The CLI guide lists its missing commands and flags
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 0.0.44 — Found rows narrow to non-null
|
|
119
|
+
|
|
120
|
+
_2026-09-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.44)
|
|
121
|
+
|
|
122
|
+
`guard.found` proves a row exists and narrows its type, so an endpoint that returns a fetched row no longer types as `Row | null` or needs a hand-written `responseShape`. `export()` also warns on a realtime channel trigger that reads a path param with `inp()`, which used to pass `--strict` and then deny every client at runtime. Five doc gaps from a field report are fixed too.
|
|
123
|
+
|
|
124
|
+
- `guard.found` narrows a fetched row to non-null
|
|
125
|
+
- `inp()` of a channel path param in a channel trigger now warns
|
|
126
|
+
- Five doc corrections from a field report
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 0.0.43 — Scaffolds that stay lean
|
|
131
|
+
|
|
132
|
+
_2026-09-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.43)
|
|
133
|
+
|
|
134
|
+
New projects now match what shadcn's CLI writes and take every endpoint path from the generated route manifest, so an agent working in a fresh scaffold stops rewriting correct CLI output and stops pulling the backend definition into the browser bundle. `query()` also keeps the verb you declare, so a check that a def matches its route now catches a swapped verb.
|
|
135
|
+
|
|
136
|
+
- Frontends take endpoint paths from the generated route manifest
|
|
137
|
+
- React scaffolds use shadcn's `cn` package
|
|
138
|
+
- A query's `verb` is typed as the literal you declared
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 0.0.42 — One way to name a backend
|
|
143
|
+
|
|
144
|
+
_2026-09-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.42)
|
|
145
|
+
|
|
146
|
+
This release gives every CLI command one way to name a backend, and makes a local engine a backend like any other. It also adds `xanosdk generate` and `xanosdk env set` / `env unset`, and fixes two export checks and a stall when reading back large workspaces. Some flags were renamed with no alias. The first section lists them, and each old spelling fails with a message that names the new one.
|
|
147
|
+
|
|
148
|
+
- ⚠️ Every command names a backend the same way, local engine included
|
|
149
|
+
- `xanosdk env set` / `env unset` change one env var without a deploy
|
|
150
|
+
- `xanosdk generate` writes just the `xano/` tree from any source
|
|
151
|
+
- Export refuses two routes that one request path can reach
|
|
152
|
+
- An input named `run` filled by a call is flagged
|
|
153
|
+
- Reading a workspace back skips stored file bytes
|
|
154
|
+
- Every deploy imports the same way
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 0.0.41 — Public seeds and nullable inputs
|
|
159
|
+
|
|
160
|
+
_2026-09-24_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.41)
|
|
161
|
+
|
|
162
|
+
This release fixes three problems found in real deploys: seed values in a `--static` deploy, optional date and file inputs, and preflight on queries that share a name. There is one behavior change: `--allow-seed-in-static` is gone, and you now list public seed columns on the table with `publicSeed`.
|
|
163
|
+
|
|
164
|
+
- ⚠️ `table({ publicSeed })` replaces `--allow-seed-in-static`
|
|
165
|
+
- Every `--json` failure has its own code and data
|
|
166
|
+
- An omitted optional date, timestamp or file input is null
|
|
167
|
+
- Inferred types include `| null` for fields that are nullable by default
|
|
168
|
+
- Preflight tells apart queries with the same name
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 0.0.40 — A pinned local engine, no setup
|
|
173
|
+
|
|
174
|
+
_2026-09-24_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.40)
|
|
175
|
+
|
|
176
|
+
This release makes `xanosdk deploy --local-engine` work on a fresh machine with nothing configured, and makes every checkout of a project run the same engine version. The version is pinned in the project's `package.json`, newer engines are offered rather than forced, and new `local-engine update` and `local-engine cache` commands manage the pin and the downloads. There is one behavior change: `XANOSDK_LOCAL_ENGINE_PATH` is gone, replaced by `XANOSDK_LOCAL_ENGINE_OVERRIDE`.
|
|
177
|
+
|
|
178
|
+
- `deploy --local-engine` needs no setup and pins the engine version
|
|
179
|
+
- Newer engines are offered, never forced
|
|
180
|
+
- A running engine on the wrong version is replaced
|
|
181
|
+
- New `local-engine update` and `local-engine cache list|clear` commands
|
|
182
|
+
- ⚠️ `XANOSDK_LOCAL_ENGINE_OVERRIDE` replaces `XANOSDK_LOCAL_ENGINE_PATH`
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 0.0.39 — Addons that hold up after a merge
|
|
187
|
+
|
|
188
|
+
_2026-09-23_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.39)
|
|
189
|
+
|
|
190
|
+
This release fixes addons, `obj()` records, workflow-test headers and one CLI flag. Addon output columns and sorts now behave the same after a merge deploy as after a replace. A filtered record member no longer drops the member after it. There is one behavior change: `addon({ sort })` with `cardinality: "count"` or `"exists"` now throws.
|
|
191
|
+
|
|
192
|
+
- Addon output columns survive a merge deploy
|
|
193
|
+
- `addon({ sort })` now sorts the grafted rows
|
|
194
|
+
- ⚠️ `addon({ sort })` with `cardinality: "count"` or `"exists"` throws
|
|
195
|
+
- A filtered `obj()` member no longer swallows the next one
|
|
196
|
+
- `s.api.call` sends header names Title-Cased, as real requests do
|
|
197
|
+
- `--out` is refused on commands that don't write to it
|
|
198
|
+
- An empty file column doesn't match a null check in `where`
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 0.0.38 — Move what you already built
|
|
203
|
+
|
|
204
|
+
_2026-09-23_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.38)
|
|
205
|
+
|
|
206
|
+
You can now move work you already built without rebuilding it. Publish a built frontend on its own, copy a release to another workspace or instance, and redeploy without losing your table rows. Release writes also report one result shape, and an outcome that can't be known exits with its own code. One breaking removal: `s.db.get_by_id` is gone, and `s.db.get` does the same fetch.
|
|
207
|
+
|
|
208
|
+
- `xanosdk publish <dir>` publishes a built frontend without touching the backend
|
|
209
|
+
- `xanosdk release transfer` copies a release to another workspace or instance
|
|
210
|
+
- `deploy --keep-data` keeps your table rows across redeploys
|
|
211
|
+
- Every release write reports one result, and exit 9 means "unknown"
|
|
212
|
+
- A release cut is confirmed under the name the server actually stored
|
|
213
|
+
- `xanosdk local-engine token` prints a local engine's meta API token
|
|
214
|
+
- Middleware in the `post` phase: `get_all_input` holds the response, not the request
|
|
215
|
+
- ⚠️ `s.db.get_by_id` and retired CLI flags are removed
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 0.0.37 — Your backend, on your machine
|
|
220
|
+
|
|
221
|
+
_2026-09-22_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.37)
|
|
222
|
+
|
|
223
|
+
A second deploy destination: your compiled workspace running on a real backend on your own machine, in one command, with no sign-in and no network round-trip per iteration. It ships behind a flag as a prototype. One change is not a prototype and reaches everyone — a deploy that publishes no static site now points a scaffolded project's dev server at the backend it just made, for the hosted destination as well as the new one.
|
|
224
|
+
|
|
225
|
+
- Your dev server follows the deploy, on every destination
|
|
226
|
+
- `xanosdk deploy --local-engine` deploys to an engine on this machine
|
|
227
|
+
- Point the flag at a file, not only a URL
|
|
228
|
+
- `XANOSDK_LOCAL_ENGINE_PATH` makes a bare flag work anywhere
|
|
229
|
+
- `xanosdk local-engine list`, `stop` and `impersonate`
|
|
230
|
+
- New projects get a one-command local redeploy
|
|
231
|
+
- The deploy summary gained a destination, and kept its old shape
|
|
232
|
+
- Two test guards that fired on correct code
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 0.0.36 — What a replace takes with it
|
|
237
|
+
|
|
238
|
+
_2026-09-22_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.36)
|
|
239
|
+
|
|
240
|
+
`xanosdk deploy --to workspace --replace` destroyed every branch in the target workspace and said nothing about it — not in the plan, not in the warning, and `--yes` skipped the confirmation entirely. The branches are gone permanently, along with the saved versions that would restore one. It is now refused unless you acknowledge the loss, and the branches at risk are named before anything is written. **If you run `--replace --yes` in CI against a workspace that has other branches, that command now fails until you add `--allow-branch-deletion`.**
|
|
241
|
+
|
|
242
|
+
- ⚠️ `--replace` deleted every branch in the workspace, silently
|
|
243
|
+
- The plan names the branches, and splits them by who made them
|
|
244
|
+
- The same scope is in `--json`, for tools that ask before acting
|
|
245
|
+
- A release could name code you never deployed, and said nothing
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## 0.0.35 — Know where it went
|
|
250
|
+
|
|
251
|
+
_2026-09-18_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.35)
|
|
252
|
+
|
|
253
|
+
This release makes the CLI say where it is writing before it writes, and prove that what it wrote arrived. Two sessions had deployed a backend to the wrong workspace and reported green; a promote had landed a branch carrying none of its functions and reported success. Both are now errors rather than checkmarks. One behavior change to know about: `promote` can exit non-zero where it used to exit 0, which means the landing was incomplete.
|
|
254
|
+
|
|
255
|
+
- `promote` reads back what it landed and fails on anything missing
|
|
256
|
+
- ⚠️ `--set-live` is two steps now, and serves only a verified landing
|
|
257
|
+
- ⚠️ A project's profile pin now outranks `$XANO_PROFILE`
|
|
258
|
+
- Every writing command names its destination before it writes
|
|
259
|
+
- `workspace diff` compares a staged branch against your compile
|
|
260
|
+
- `workspace reset-tables` puts named tables back to their seed rows
|
|
261
|
+
- Reference data has a written ordering rule
|
|
262
|
+
- `promote --json` gains `ok` and `verification`
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 0.0.34 — CLI paths that shipped broken
|
|
267
|
+
|
|
268
|
+
_2026-09-17_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.34)
|
|
269
|
+
|
|
270
|
+
Two CLI paths that shipped broken now work. If your backend lives anywhere other than `xano/`, every command that reads or writes env and secrets was pointed at the wrong directory — and `xanosdk preflight` was unusable unless you had the maintainer environment variables set, despite the public help offering it. Both are fixed, with one behavior worth knowing about even on a standard layout: a stray `.env` in your working directory can no longer decide which instance your backend uploads to.
|
|
271
|
+
|
|
272
|
+
- A backend outside `xano/` now reads its own env and secrets
|
|
273
|
+
- `xanosdk preflight` works after `xanosdk login`
|
|
274
|
+
- A `.env` in your working directory can no longer redirect a deploy
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 0.0.33 — A pulled tree deploys as pulled
|
|
279
|
+
|
|
280
|
+
_2026-09-17_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.33)
|
|
281
|
+
|
|
282
|
+
`init --from` could not verify a workspace that stores a documentation token with the gate switched off, and a tree deployed past that check turned the gate on — closing a doc site the workspace had deliberately left open. Both are fixed and verified against a live backend. A round trip that fails for any other reason now also names version skew between the CLI and the SDK the tree resolved, instead of sending you to fix a workspace that was never wrong.
|
|
283
|
+
|
|
284
|
+
- A stored documentation token no longer invents a gate
|
|
285
|
+
- A failed round trip names version skew instead of blaming your workspace
|
|
286
|
+
- `xanosdk routes` and `paths` work on a project whose doc site is gated
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 0.0.32 — The doc token leaves your repo
|
|
291
|
+
|
|
292
|
+
_2026-09-17_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.32)
|
|
293
|
+
|
|
294
|
+
The token gating a hosted API doc site is a secret, and until now a pull wrote it straight into committed source — every API group's, plus the workspace's. Deleting the block to get rid of it was worse: an absent `documentation` key was sent as the engine default, which cleared a Private doc site's gate while leaving the docs published. Both are closed. The token now lives in a gitignored `xano/.secrets.json`, keyed by the object that owns it, and source declares only that a gate exists.
|
|
295
|
+
|
|
296
|
+
- ⚠️ A pulled doc-site token no longer lands in committed source
|
|
297
|
+
- ⚠️ Omitting `documentation` no longer clears a live doc-site gate
|
|
298
|
+
- `xanosdk secrets fill` mints a token for a gate you declared yourself
|
|
299
|
+
- CI supplies doc tokens without the sidecar
|
|
300
|
+
- ⚠️ A release name that is really a path is refused
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 0.0.31 — Modules refuse the wrong SDK
|
|
305
|
+
|
|
306
|
+
_2026-09-16_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.31)
|
|
307
|
+
|
|
308
|
+
A toolchain module built for a newer SDK than the one running it used to fail by succeeding: every hook on the contract is optional, so it loaded, registered, and contributed nothing while the command reported success. This release closes that in both directions — the loader refuses it by name, and the installers never leave one on disk to be refused later. The marketplace and module-contract guides land alongside it.
|
|
309
|
+
|
|
310
|
+
- A module built for a newer SDK is refused at load, by name
|
|
311
|
+
- An install that cannot work is undone, not announced
|
|
312
|
+
- `marketplace remove` says what is actually true
|
|
313
|
+
- Two guides for building and installing add-ons
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 0.0.30 — Install, and it's configured
|
|
318
|
+
|
|
319
|
+
_2026-09-16_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.30)
|
|
320
|
+
|
|
321
|
+
Installing a module now configures it. `xanosdk marketplace install` was `npm install` plus a message — a toolchain module's questions were never asked, its `.gitattributes` lines never written, and the per-project config block every later `deploy` reads never created. That is now one idempotent reconciler over your `dependencies` and stored config, which `install`, `reinstall` and `remove` all drive, so a module configures correctly however it arrived — including by a plain `npm install` or a merged PR that no xanosdk command ever saw. Module authors: the plugin contract changed shape and the old one is refused by name.
|
|
322
|
+
|
|
323
|
+
- `marketplace install` configures the module it installs
|
|
324
|
+
- `marketplace reinstall <package>` re-asks a module its questions
|
|
325
|
+
- `marketplace remove <package>` drops what the module contributed
|
|
326
|
+
- ⚠️ The plugin contract applies to a project, not a scaffold
|
|
327
|
+
- A module that arrived without the CLI is now reported
|
|
328
|
+
- `init` asked one question twice, and hid what npm was doing
|
|
329
|
+
- `init --force` dropped your module config block
|
|
330
|
+
- Managed blocks are a shared mechanism
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 0.0.29 — Modules that extend the CLI
|
|
335
|
+
|
|
336
|
+
_2026-09-16_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.29)
|
|
337
|
+
|
|
338
|
+
A second kind of module lands: one that extends the **CLI** instead of the workspace. A workspace module (`@xanosdk/auth`, `@xanosdk/chatbot`) adds tables and endpoints you register in `xano/index.ts`; a toolchain module registers nothing and instead participates in the commands — contributing `init` questions and scaffold fragments, and running hooks on `export`, `deploy` and `preflight`. Everything under it is built to fail loudly: a module that cannot run is never allowed to look like one that passed, and your env values never reach third-party hook code.
|
|
339
|
+
|
|
340
|
+
- The toolchain-module contract ships on `@xanosdk/sdk/plugin`
|
|
341
|
+
- A module that cannot run fails the build rather than passing it
|
|
342
|
+
- Env values are blanked before any hook sees them
|
|
343
|
+
- `init` installs before it asks
|
|
344
|
+
- Per-project module settings live in your `package.json`
|
|
345
|
+
- A module's own `--flag value` could steal the scaffold's target directory
|
|
346
|
+
- `--marketplace` reported a working module as broken
|
|
347
|
+
- `.gitattributes` gains a slot for module-contributed lines
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 0.0.28 — Secrets out of source
|
|
352
|
+
|
|
353
|
+
_2026-09-15_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.28)
|
|
354
|
+
|
|
355
|
+
Workspace env var values no longer live in a committed file: a pull now writes names
|
|
356
|
+
with the values in a gitignored `xano/.env`, and `xanosdk env pull` fills it from a live
|
|
357
|
+
backend. The rest closes the complex-app gap analysis — typed builders for the SQL-side
|
|
358
|
+
`qf.*` filter registry, the runtime predicates the eight operators cannot spell, ordered
|
|
359
|
+
authorization guards, and `respond.*` for the HTTP status line, probed against a live
|
|
360
|
+
engine rather than inferred.
|
|
361
|
+
|
|
362
|
+
- ⚠️ Workspace env values move to `xano/.env`, names are declared in source
|
|
363
|
+
- `xanosdk env pull` fills `xano/.env` from a live source
|
|
364
|
+
- `respond.status` / `respond.redirect` / `respond.header` — the status line
|
|
365
|
+
- `qf.*` — typed builders for the SQL-side query-expression filters
|
|
366
|
+
- `cond.*` — the runtime predicates the eight operators cannot spell
|
|
367
|
+
- `guard.role` / `guard.owner` / `guard.require` — authorization in the right order
|
|
368
|
+
- `typedEnv()` and the `stack.env-undeclared` warning
|
|
369
|
+
- Per-kind blocks the SDK was dropping
|
|
370
|
+
- Instance-capability listing at export, and `set_var` constant branding
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## 0.0.27 — The guards that weren't
|
|
375
|
+
|
|
376
|
+
_2026-09-15_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.27)
|
|
377
|
+
|
|
378
|
+
Seven fixes, and most of them are the same story: a guard that was not guarding. The lock check passed the one rename it exists to stop, the release list walked itself into silence past 100 rows, and three release fields shipped structurally dead because the tests agreed with the projection instead of checking it. Also new: the CLI holds more than one credential.
|
|
379
|
+
|
|
380
|
+
- ⚠️ A rename in code no longer passes `xano:check`
|
|
381
|
+
- Named credential profiles
|
|
382
|
+
- `release list` no longer goes silent past 100 rows
|
|
383
|
+
- Three dead fields on a release record, found by recording a live one
|
|
384
|
+
- An empty description stays the empty string the server reported
|
|
385
|
+
- `release create --branch` refuses a bad label before it cuts
|
|
386
|
+
- `init --from` handles an archive that repeats one object
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## 0.0.26 — The guid you can write down
|
|
391
|
+
|
|
392
|
+
_2026-09-14_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.26)
|
|
393
|
+
|
|
394
|
+
Object identity in this SDK is now something you can write down and rely on. A full-replace deploy used to mint a fresh guid for every object and discard the ones your project carried, so a guid noted before a redeploy named nothing afterwards — and the next release into that workspace matched nothing and duplicated everything. It no longer does. Alongside that, `release create --seed` gains guid-based table selection and a `tables` listing verb on every source you can cut from, so the values it takes are obtainable in the first place.
|
|
395
|
+
|
|
396
|
+
- `xanosdk deploy` and `release --replace` preserve object identity
|
|
397
|
+
- A replace no longer rewrites your `xano.lock`
|
|
398
|
+
- Guid selection is documented as stable, not as a trap
|
|
399
|
+
- `--seed` explains a guid that does not match
|
|
400
|
+
- Select seeded tables by guid, and list them from any source you can cut from
|
|
401
|
+
- A rows-free release says what it actually contains
|
|
402
|
+
- ⚠️ `--expires-hours` now accepts 1–24
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 0.0.25 — The release-chain fixes
|
|
407
|
+
|
|
408
|
+
_2026-09-10_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.25)
|
|
409
|
+
|
|
410
|
+
Three fixes to the release chain, all found by running `ephemeral → release → promote / tenant deploy` end to end against a live backend rather than in tests. One of them is that `tenant deploy` had never worked at all: it sent the wrong parameter name and every invocation was refused, so landing a release on a customer tenant was closed. Nothing here changes how you author a workspace.
|
|
411
|
+
|
|
412
|
+
- `tenant deploy` never landed a release, and now does
|
|
413
|
+
- `release create --json` reported `createdAt` in two different formats
|
|
414
|
+
- `release create --help` offered a source it refuses
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## 0.0.24 — Every branch gets a name
|
|
419
|
+
|
|
420
|
+
_2026-09-10_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.24)
|
|
421
|
+
|
|
422
|
+
A promote used to land your backend on a branch nobody could name. The engine's answer to a release deploy that names no branch is a branch with an *empty label* — the queries, functions and tasks went there, the tables arrived anyway because they are workspace-scoped, and the whole thing reported success. Every promote names its branch now, and the branch listing admits when one has no name. Anyone whose workspace already holds one can finally see it.
|
|
423
|
+
|
|
424
|
+
- ⚠️ A promote landed your logic on a branch nobody could name
|
|
425
|
+
- `--set-live` with no `--branch` lands and serves in one call
|
|
426
|
+
- `--backup-branch` on a promote is refused, not silently ignored
|
|
427
|
+
- `xanosdk workspace branch list` shows a branch carrying no label
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## 0.0.23 — The release that came from somewhere else
|
|
432
|
+
|
|
433
|
+
_2026-09-10_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.23)
|
|
434
|
+
|
|
435
|
+
Cutting a release from a running environment is now **one server-side call** instead of four, and the result is verified rather than trusted. Two platform changes landed together and both reach `xanosdk release`: the release route takes a source tenant, and an OAuth token is now pinned to the workspace it was issued for across the whole Meta API, for every role.
|
|
436
|
+
|
|
437
|
+
Everything below was measured against a live instance, not inferred.
|
|
438
|
+
|
|
439
|
+
- The cut is one call, and writes nothing to the source
|
|
440
|
+
- A release cut from an out-of-date instance is refused, not trusted
|
|
441
|
+
- ⚠️ A sandbox tenant can be a release source, and `--from <bare-name>` no longer resolves
|
|
442
|
+
- A workspace-binding refusal explains itself
|
|
443
|
+
- `release show` no longer tells you to re-cut an intact release
|
|
444
|
+
- The release name was being compiled as a project
|
|
445
|
+
- npm was not found when Homebrew installed node
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## 0.0.22 — A release is a noun
|
|
450
|
+
|
|
451
|
+
_2026-09-07_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.22)
|
|
452
|
+
|
|
453
|
+
Xano has a first-class **release** object, and this version restructures the CLI around it. A deploy targets a disposable ephemeral; reaching anything real — your workspace, or a customer's tenant — goes through a release, the stored record that this code came up and answered.
|
|
454
|
+
|
|
455
|
+
**This is a breaking change.** `xanosdk release ./xano/index.ts` no longer exists. `release` is now a namespace, production is `xanosdk promote <release>`, and `xanosdk deploy --to workspace` keeps the old merge behaviour as a deliberate escape hatch.
|
|
456
|
+
|
|
457
|
+
- ⚠️ A release is a noun, and the destination is never a default
|
|
458
|
+
- `promote` and `tenant deploy` land a release without touching your data
|
|
459
|
+
- `deploy` takes any source, and `--to` is the escape hatch
|
|
460
|
+
- `xanosdk pull` refreshes a project's backend without rescaffolding it
|
|
461
|
+
- A release is cut where it can be cut, and always lands in your workspace
|
|
462
|
+
- `release create` no longer accepts a customer tenant
|
|
463
|
+
- Flags that chose a destination, or promised a preview, no longer fail quietly
|
|
464
|
+
- Scaffolded repos render and check their committed `xanoscript/` tree
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
## 0.0.21 — XanoScript, rendered where the code is
|
|
469
|
+
|
|
470
|
+
_2026-09-07_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.21)
|
|
471
|
+
|
|
472
|
+
XanoScript is now produced inside the SDK. `xanosdk export` renders a workspace to XanoScript locally, byte-identical to what the engine returns for the same workspace, and can keep that rendering committed beside the TypeScript as one `.xs` file per object. New projects get this by default: the `xanosdk init` scaffold's `xano:export` writes the tree and `xano:check` fails when it is stale.
|
|
473
|
+
|
|
474
|
+
- `xanosdk export --format xs` renders XanoScript locally, byte-identical to the engine
|
|
475
|
+
- `xanosdk export --xanoscript` keeps a committed XanoScript tree beside the source
|
|
476
|
+
- `xanosdk init` scaffolds `xano:export` and `xano:check` with `--xanoscript`
|
|
477
|
+
- `xanosdk preflight --xanoscript` diffs the local rendering against the engine's
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## 0.0.20 — The statement that could not come back
|
|
482
|
+
|
|
483
|
+
_2026-09-06_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.20)
|
|
484
|
+
|
|
485
|
+
One removal: a builder whose output could not survive a round trip. `s.security.create_guid` emitted a statement that is real at runtime but **internal** — the XanoScript language has no spelling for it, so a workspace containing it rendered a placeholder on pull and did not come back on push.
|
|
486
|
+
|
|
487
|
+
- `s.security.create_guid` is removed — use `create_uuid`
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## 0.0.19 — The internal statement
|
|
492
|
+
|
|
493
|
+
_2026-09-06_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.19)
|
|
494
|
+
|
|
495
|
+
Two changes, both about a surface that was telling callers the wrong thing: a builder that emitted an **internal** engine statement, and the call family's last unverified claim. One is a behaviour change for anyone using `s.db.get_by_id`; the other is the retirement of the final `@TODO(byte-verify)` marker.
|
|
496
|
+
|
|
497
|
+
- `db.get_by_id` emitted an internal statement — and a `0` key failed the whole request
|
|
498
|
+
- The call family's last unverified claim is now backed by engine bytes
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
## 0.0.18 — The confident wrong answers
|
|
503
|
+
|
|
504
|
+
_2026-09-04_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.18)
|
|
505
|
+
|
|
506
|
+
Six fixes, each one a case where the output was confident and wrong: a tool that reported success while writing nothing, a preflight that reported a diff on a correct deploy, an MCP URL that 404'd, and three documented claims that were the opposite of what the engine does. Four were found by measuring against 0.0.17 rather than by reading, which is why they had survived being read.
|
|
507
|
+
|
|
508
|
+
- A tool passed as a bare handle runs with no caller, and `auth()` inside it fails as a *successful* result
|
|
509
|
+
- Preflight reported a round-trip diff on every auth-gated query
|
|
510
|
+
- `mcpServer().getUrl()` built a 404 for any tenant
|
|
511
|
+
- `resultStrategy` in a `pre` middleware rewrites the host's request inputs
|
|
512
|
+
- An `auth()`-keyed limiter on a public host 403s the first call — it never shares a bucket
|
|
513
|
+
- The `exceptionPolicy` default contradiction told authors their guards were inert
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## 0.0.17 — The unchecked paths
|
|
518
|
+
|
|
519
|
+
_2026-09-03_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.17)
|
|
520
|
+
|
|
521
|
+
Three paths in this release reported success without having checked anything: `xanosdk preflight` skipped whole object kinds, a release proceeded when it could not read the target workspace, and a microservice had no way to reference a secret instead of inlining it. All three now either check or refuse, and preflight's registry has a guard so a newly added kind cannot drop out of it silently.
|
|
522
|
+
|
|
523
|
+
- Preflight skipped realtime, microservice and API-group objects entirely
|
|
524
|
+
- A microservice can name a workspace env var instead of inlining the secret
|
|
525
|
+
- A pulled microservice lost its env reference on the next deploy
|
|
526
|
+
- A release into a workspace it could not read is refused, not warned
|
|
527
|
+
- Releases apply through one import route
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
## 0.0.16 — Branch reads and locked identity
|
|
532
|
+
|
|
533
|
+
_2026-09-03_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.16)
|
|
534
|
+
|
|
535
|
+
This release is about a release telling you the truth before it changes your workspace, and about reading a branch without touching production. Every build now writes `xano.lock` with no flag, `--branch` actually reads the branch you name instead of silently handing you live, and a release that would rename a workspace, collide with an identity it does not own, or land on a public URL it cannot serve now says so — several of those cases previously exited 0.
|
|
536
|
+
|
|
537
|
+
- ⚠️ Every build writes `xano.lock`; `--no-lock` opts out
|
|
538
|
+
- ⚠️ `--branch <label>` reads that branch — and refuses when it cannot
|
|
539
|
+
- Branch-targeted releases are no longer hidden
|
|
540
|
+
- A release refuses a collision instead of reporting success over a broken workspace
|
|
541
|
+
- The plan names the rename and the URLs the instance will invent
|
|
542
|
+
- The lock records whether a public slug is a contract or a convenience
|
|
543
|
+
- Releases use the SDK's own import route when the instance has it
|
|
544
|
+
- `f.decimal` and `f.int` state the bounds that were measured
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## 0.0.15 — The silent failures
|
|
549
|
+
|
|
550
|
+
_2026-09-02_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.15)
|
|
551
|
+
|
|
552
|
+
Four of the five fixes here failed quietly: a downstream package that could not emit declarations at all, a paged endpoint answering `[]` at HTTP 200, a public API's 403 arriving as null fields, and a freshly scaffolded project that did not compile on a line nobody wrote. Each is now either fixed at the source or caught by a check that goes red. The seed-data guidance for tests also ships with the constraint that makes it safe.
|
|
553
|
+
|
|
554
|
+
- A downstream package could not emit declarations at all
|
|
555
|
+
- A paged `db.query` roots its `output` selection at the envelope
|
|
556
|
+
- `xanosdk init` never scaffolds a register call whose options are required
|
|
557
|
+
- `datasource: 'live'` is safe on an ephemeral — and stored, not per-run
|
|
558
|
+
- `s.api.request` sends no `User-Agent`
|
|
559
|
+
- `xanosdk status` no longer labels its reads `whoami`
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## 0.0.14 — The router with headroom
|
|
564
|
+
|
|
565
|
+
_2026-09-01_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.14)
|
|
566
|
+
|
|
567
|
+
A grounding-docs release. The always-read `llms.txt` router was sitting at exactly its 10,000-token ceiling; it now reads at 8,192 with its gotchas grouped by where you are standing and the rule stated before the failure. Two new topic files carry what moved out plus an index of the exact error strings the engine returns. No runtime code changes.
|
|
568
|
+
|
|
569
|
+
- The router drops from 10,000 to 8,192 tokens
|
|
570
|
+
- Gotchas are grouped and rule-first
|
|
571
|
+
- Twelve long topic-file bullets are one rule per line
|
|
572
|
+
- New `llms/errors.md` maps exact error strings to their fix
|
|
573
|
+
- New `llms/client.md` for the frontend side
|
|
574
|
+
- The Quickstart names the check-your-work loop
|
|
575
|
+
|
|
576
|
+
---
|
|
577
|
+
|
|
578
|
+
## 0.0.13 — The realtime gate contract
|
|
579
|
+
|
|
580
|
+
_2026-09-01_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.13)
|
|
581
|
+
|
|
582
|
+
Realtime v2 lifecycle triggers get their contract straightened out. A `join`
|
|
583
|
+
gate written the way the docs described — reading a channel path param as
|
|
584
|
+
`inp("room_id")` — raises at runtime and refuses every client, and a `deliver`
|
|
585
|
+
trigger had no typed way to read the payload it exists to transform. Both are
|
|
586
|
+
fixed, along with two gate rules the docs never carried. Every claim here was
|
|
587
|
+
verified by driving a real websocket client against a live engine.
|
|
588
|
+
|
|
589
|
+
- ⚠️ A channel path param is not a lifecycle-trigger input — read it from the session
|
|
590
|
+
- A `deliver` trigger now reads its payload through the typed handle
|
|
591
|
+
- Inside `{ allowed }`, admission needs strictly `true`
|
|
592
|
+
- A gate establishes no auth, so `auth.id` reads 0
|
|
593
|
+
|
|
594
|
+
---
|
|
595
|
+
|
|
596
|
+
## 0.0.12 — Values that answer themselves
|
|
597
|
+
|
|
598
|
+
_2026-09-01_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.12)
|
|
599
|
+
|
|
600
|
+
0.0.12 fixes a silent wrong answer: `c.now()` inside an `obj()` served the string
|
|
601
|
+
`"now"` instead of a timestamp, and in a realtime handler that string was written
|
|
602
|
+
into the stored transcript and replayed to every joiner. It also lands the four
|
|
603
|
+
reports from #310 — `export` was rewriting `CLAUDE.md` with the wrong theme — and
|
|
604
|
+
a truthfulness pass over what ships to an agent: corrected claims, and ~480 KB of
|
|
605
|
+
maintainer-addressed JSDoc taken out of the consumer type surface.
|
|
606
|
+
|
|
607
|
+
- `c.now()` inside `obj()` answered the string `"now"`
|
|
608
|
+
- `export` rewrote `CLAUDE.md` with the wrong theme
|
|
609
|
+
- `bind` joins: the typed path across a join, stated
|
|
610
|
+
- `fields: null` on 65 statements means "typed wrapper", not "missing"
|
|
611
|
+
- `QUERY_EXPRESSION_FILTERS` / `VECTOR_FILTERS`: where they live, and that `fl.*` cannot spell them
|
|
612
|
+
- The shipped type surface stopped carrying maintainer residue
|
|
613
|
+
- Four documented claims corrected against the source
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## 0.0.11 — The silent-success pass
|
|
618
|
+
|
|
619
|
+
_2026-08-31_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.11)
|
|
620
|
+
|
|
621
|
+
This release adds one new entry point and closes a set of shapes that compiled clean and then went wrong at request time — a regex pair that answered `false` for every input, a read addressed by query string instead of by path, a column name the engine reserves, and a `0` id that fails a whole request. Most land as warnings, so an ordinary build is unaffected; `export --strict` promotes them, so a strict build that passed on 0.0.10 can newly fail. It also corrects one piece of published advice: a physical table name is not stable across deploys, and the old atomic-counter guidance said to hardcode it.
|
|
622
|
+
|
|
623
|
+
- `@xanosdk/sdk/bundle` reads a compiled bundle without reimplementing the SDK
|
|
624
|
+
- ⚠️ A reversed regex operand pair is refused instead of answering `false` forever
|
|
625
|
+
- ⚠️ An addressing input missing from a query's path now warns
|
|
626
|
+
- ⚠️ A reserved `run` column and a `get_by_id` id that can be `0` now warn
|
|
627
|
+
- `obj()` accepts `c.obj` and `c.array` members
|
|
628
|
+
- `./manifest.json` is exported from the package
|
|
629
|
+
- Corrected: a physical table name is not stable across deploys
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
## 0.0.10 — The CLI surface pass
|
|
634
|
+
|
|
635
|
+
_2026-08-31_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.10)
|
|
636
|
+
|
|
637
|
+
This release is a CLI surface pass, and it is breaking throughout. Six ways to start a project collapse to `init` plus two flags, the sandbox environment is gone with every surface that named it, and a run of commands and flags were renamed to say what they actually do — including three that each carried two or three unrelated meanings. One command is new: `xanosdk status` answers where you stand in a single read.
|
|
638
|
+
|
|
639
|
+
- ⚠️ Project creation is one command: `init`, with `--from` and `--web`
|
|
640
|
+
- ⚠️ The sandbox environment is gone
|
|
641
|
+
- ⚠️ `deploy` takes no environment flag
|
|
642
|
+
- `xanosdk status` — who, where, and which environment
|
|
643
|
+
- ⚠️ `validate` is now `preflight`, and `lock adopt` is now `lock import`
|
|
644
|
+
- ⚠️ `--dest` is now `--env`, and names environments the way `--from` does
|
|
645
|
+
- ⚠️ Flags that carried several meanings were split apart
|
|
646
|
+
- `routes` and `whoami` are the canonical spellings
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## 0.0.9 — Eight reports from real use
|
|
651
|
+
|
|
652
|
+
_2026-08-31_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.9)
|
|
653
|
+
|
|
654
|
+
Eight reports, all from one round of real-world use, and every one of them a case that type-checks, exports under `--strict` and deploys clean before going wrong. The headline is a deploy that could not succeed at all: any seeded number below `1e-4` failed the import with a signature error that named nothing. The rest correct places where the docs described behavior the engine does not have — a search operator that silently matches nothing, a by-id read that rejects the sentinel the field docs prescribe, and a seeding question whose two possible answers demanded opposite designs.
|
|
655
|
+
|
|
656
|
+
- Seed data holding a number below `1e-4` no longer fails the deploy
|
|
657
|
+
- ⚠️ Every test JSON document puts its per-test array under `tests`
|
|
658
|
+
- `like` and `ilike` match nothing for a bare term — reach for `includes`
|
|
659
|
+
- `db.get_by_id` rejects the `0` optional-FK sentinel, and takes the whole request with it
|
|
660
|
+
- A seeded `f.password()` column IS hashed, so demo credentials work as fixtures
|
|
661
|
+
- Native email is discoverable, and the built-in provider needs no configuration
|
|
662
|
+
- A relative entry path names the directory it resolved against
|
|
663
|
+
- Three fields the docs called plain values take tagged ones
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## 0.0.8 — The auth() lookalike
|
|
668
|
+
|
|
669
|
+
_2026-08-30_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.8)
|
|
670
|
+
|
|
671
|
+
`ref("auth.id")` looks like it reads the authenticated caller. It does not, and the engine's error for it — `Missing var entry: auth` — pointed nowhere useful. That spelling, and every other reserved namespace read as if it were a stack variable, now fails the export with the accessor that works. The same mistake was shipped in our own file-upload recipe, which is corrected.
|
|
672
|
+
|
|
673
|
+
- ⚠️ `ref()` on an engine-reserved namespace now fails the export
|
|
674
|
+
- The file-upload recipe read the input bag the wrong way
|
|
675
|
+
- The unbound-variable warning now quotes the error you actually get
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
|
|
679
|
+
## 0.0.7 — Verb pairs on one path
|
|
680
|
+
|
|
681
|
+
_2026-08-29_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.7)
|
|
682
|
+
|
|
683
|
+
Queries are now identified the way the engine identifies them — by api group, verb, and name together — so `GET /items` and `POST /items` are two endpoints instead of one export error. The grounding docs an AI agent reads got a full pass for people arriving at Xano for the first time, and two silent-failure classes now surface at `export()` instead of on a live endpoint.
|
|
684
|
+
|
|
685
|
+
- A `GET` and `POST` on the same path no longer collide
|
|
686
|
+
- ⚠️ A query's verb and api group are now part of its identity
|
|
687
|
+
- ⚠️ `s.api.call` takes the query handle, not a bare name
|
|
688
|
+
- A tagged value in a template literal now fails the build instead of shipping garbage
|
|
689
|
+
- The grounding docs assume no prior Xano knowledge
|
|
690
|
+
- `xanosdk deploy` no longer loops on "re-run the deploy" when your session has expired
|
|
691
|
+
|
|
692
|
+
---
|
|
693
|
+
|
|
694
|
+
## 0.0.6 — The action identity fix
|
|
695
|
+
|
|
696
|
+
_2026-08-28_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.6)
|
|
697
|
+
|
|
698
|
+
`action.call` and `action.package.call` now take the identity the instance assigned at install
|
|
699
|
+
instead of deriving one from a name. A derived id is well-formed and addresses nothing, so those
|
|
700
|
+
calls exported clean and never resolved — if you have either in a workspace, this is a call-site
|
|
701
|
+
change you need to make. Alongside it: a lock-file false positive that refused a legal workspace,
|
|
702
|
+
and a grounding correction about what an omitted column on `db.add` actually stores.
|
|
703
|
+
|
|
704
|
+
- ⚠️ `action.call` takes the id the instance assigned, not one derived from a name
|
|
705
|
+
- One canonical on two different kinds is no longer a lock error
|
|
706
|
+
- An omitted column on `db.add` lands on its own default, not `null`
|
|
707
|
+
- `xanosdk init` asks two questions instead of three
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
## 0.0.5 — Sign in without a loopback
|
|
712
|
+
|
|
713
|
+
_2026-08-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.5)
|
|
714
|
+
|
|
715
|
+
`xanosdk login` only ever worked when the browser finishing consent could reach your machine's `127.0.0.1`. On a remote shell, a container, or a Codespace it can't — the redirect lands nowhere and login sits there for five minutes before timing out. `xanosdk login --paste` fixes that: it binds nothing, prints the URL for you to open anywhere, and you paste the redirect back. This release also corrects two documented promises that were wrong, one of which was actively misleading for exactly this case.
|
|
716
|
+
|
|
717
|
+
- `xanosdk login --paste` signs you in where the loopback can't be reached
|
|
718
|
+
- `XANO_NO_BROWSER` never covered remote shells, despite saying it did
|
|
719
|
+
- `--port` documented a default it did not have
|
|
720
|
+
|
|
721
|
+
---
|
|
722
|
+
|
|
723
|
+
## 0.0.4 — The markdown your agents read
|
|
724
|
+
|
|
725
|
+
_2026-08-26_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.4)
|
|
726
|
+
|
|
727
|
+
Knowledge is now workspace source: the markdown your Xano agents read before they act is authored as real `.md` files, reviewed in a diff, and deployed with the code it describes. Two commands join the CLI — `xanosdk onboard` puts the scaffold's choices in a browser, and `xanosdk upgrade` answers the version question on purpose rather than nudging. Windows users should take this one regardless: every npm call in the package was failing before it reached npm.
|
|
728
|
+
|
|
729
|
+
- `knowledge()` — author the markdown your Xano agents read
|
|
730
|
+
- `xanosdk onboard` — pick the scaffold's look in a browser
|
|
731
|
+
- `xanosdk upgrade` — the version question asked on purpose
|
|
732
|
+
- Every npm call failed on a current Node for Windows
|
|
733
|
+
- The guides ship in the tarball
|
|
734
|
+
- `CHANGELOG.md` ships, generated from the releases
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
## 0.0.3 — The scaffold gets a look
|
|
739
|
+
|
|
740
|
+
_2026-08-25_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.3)
|
|
741
|
+
|
|
742
|
+
`xanosdk init` wrote one hard-coded stylesheet, so every scaffolded project looked
|
|
743
|
+
identical. It now takes a theme, a corner radius, a dark-mode strategy, three
|
|
744
|
+
typeface slots and an icon set — 126 themes composed from shadcn/ui's own tables,
|
|
745
|
+
or any registry theme URL. The same command can install **and register**
|
|
746
|
+
marketplace add-ons in one line, and the agent grounding now points assistants at
|
|
747
|
+
a prebuilt module instead of hand-rolling one. Nothing changes for anyone not
|
|
748
|
+
passing the new flags: no flags and no TTY scaffolds exactly what it did before.
|
|
749
|
+
|
|
750
|
+
- `xanosdk init` takes a theme, typefaces and an icon set
|
|
751
|
+
- `chart-*` and `sidebar-*` were missing from every scaffolded stylesheet
|
|
752
|
+
- `components.json` hard-coded a base color the stylesheet no longer used
|
|
753
|
+
- Dark mode shipped inert
|
|
754
|
+
- `--marketplace` installs add-ons and registers them
|
|
755
|
+
- Agents are grounded in marketplace discovery and the first-party modules
|
|
756
|
+
- New `@xanosdk/sdk/scaffold` export carries the scaffold's palette as data
|
|
757
|
+
|
|
758
|
+
---
|
|
759
|
+
|
|
760
|
+
## 0.0.2 — What the engine actually requires
|
|
761
|
+
|
|
762
|
+
_2026-08-25_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.2)
|
|
763
|
+
|
|
764
|
+
This release is about the statement surface refusing what the engine cannot accept, while you are writing rather than after you deploy. An absent required argument does not error on Xano — it substitutes a type default and answers HTTP 200 with a confident wrong result, which nothing downstream can distinguish from a right one. So 50-odd arguments that were typed optional are now required, one field the engine never reads is gone, and the wrappers that used to pass a missing field along now name it. If your code omitted any of them it will stop type-checking; it was already producing the wrong answer.
|
|
765
|
+
|
|
766
|
+
- ⚠️ 25 arguments across 15 statements are now required
|
|
767
|
+
- ⚠️ The Elasticsearch and OpenSearch credentials and target are required
|
|
768
|
+
- ⚠️ `webflow.request` no longer offers a `headers` field
|
|
769
|
+
- ⚠️ Statements that passed a missing field along now refuse it
|
|
770
|
+
- A zero-argument call names the field it needs
|
|
771
|
+
- A pulled workspace decodes where it used to fall back to `raw()`
|
|
772
|
+
- Every statement in the catalog has byte evidence behind it
|
|
773
|
+
|
|
774
|
+
---
|
|
775
|
+
|
|
776
|
+
## 0.0.1 — The new name, and a README to match
|
|
777
|
+
|
|
778
|
+
_2026-08-24_ · [release notes](https://github.com/xanots/sdk/releases/tag/v0.0.1)
|
|
779
|
+
|
|
780
|
+
The SDK is now published as **`@xanosdk/sdk`**, starting a fresh version line at 0.0.1. The name says what the package is — the authoring surface, the compiler, and the CLI — rather than implying one member of a family with a shared core. Alongside the rename: two new build-time warnings for shapes that used to ship clean and then misbehave at request time, and a README rebuilt as a landing page with its reference material split into browsable guides.
|
|
781
|
+
|
|
782
|
+
- ⚠️ The package is now `@xanosdk/sdk`
|
|
783
|
+
- `s.switch` fell through without `break: true`
|
|
784
|
+
- A filtered operand in a `where` could 500 at request time
|
|
785
|
+
- The README is a landing page again
|
|
786
|
+
- Scaffolds build the frontend before deploying it
|
|
787
|
+
- `@xanosdk/auth` is authentication, not authorization
|
|
788
|
+
- `InferResponse`: the shapes that never derive, and the line that closes each
|