void 0.26.0 → 0.27.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.
Files changed (365) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-l-FM7Ioq.mjs} +8 -7
  4. package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-D52yG7hl.mjs → auth-Dn2vw-SG.mjs} +9 -9
  7. package/dist/{auth-B60QDbjg.mjs → auth-LMJcNESe.mjs} +1 -1
  8. package/dist/{auth-link-DjeOptYi.mjs → auth-link-vz9Z2kmG.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BRxIuqDi.mjs → auth-router-DvsCUVw4.mjs} +6 -19
  11. package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
  12. package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
  13. package/dist/{build-cmd-Ce3C8huo.mjs → build-cmd-D6we0VjO.mjs} +8 -7
  14. package/dist/{cache-CS8Yxr5a.mjs → cache-CZRdzKx1.mjs} +8 -8
  15. package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-CQ3NnMvf.mjs} +6 -5
  16. package/dist/{cf-access-YTlqvAsk.mjs → cf-access-BcIBSKqG.mjs} +11 -12
  17. package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
  18. package/dist/cf-build-output-H9a97vME.mjs +2 -0
  19. package/dist/cf-user-agent-lKblH3zU.mjs +17 -0
  20. package/dist/cli/cli.mjs +48 -83
  21. package/dist/cli/cloudflare-operation-process.mjs +78 -78
  22. package/dist/cli/env-schema-probe.mjs +5 -6
  23. package/dist/{client-mC-dFGDD.mjs → client-DlDJuY0s.mjs} +30 -8
  24. package/dist/client-tso2OfcG.mjs +2 -0
  25. package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
  26. package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
  27. package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
  28. package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
  29. package/dist/{cloudflare-operations-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  30. package/dist/{cloudflare-operations-DYa3coIk.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
  31. package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
  32. package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
  33. package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
  34. package/dist/config-BtSFvXZx.mjs +2 -0
  35. package/dist/config-CLYAosnQ.mjs +78 -0
  36. package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
  37. package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
  38. package/dist/config-entry.d.mts +1 -1
  39. package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
  40. package/dist/{connect-H6EvP62X.mjs → connect-BfPBHHm-.mjs} +12 -11
  41. package/dist/{create-project-B2kk9Q0o.mjs → create-project-BdXEFKal.mjs} +7 -7
  42. package/dist/{create-project-Dbb4uiN-.mjs → create-project-qFDC45zg.mjs} +1 -1
  43. package/dist/{db-DpCKZto0.mjs → db-Xs80hcaA.mjs} +101 -133
  44. package/dist/{delete-CxlSvsvW.mjs → delete-d2vuou3j.mjs} +7 -7
  45. package/dist/{deploy-CeEbnv4b.mjs → deploy-Bqe1PYBw.mjs} +2351 -2497
  46. package/dist/deploy-VsWsVQkw.mjs +2 -0
  47. package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
  48. package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
  49. package/dist/discover-EDUf6JJw.mjs +2 -0
  50. package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
  51. package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
  52. package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
  53. package/dist/{domain-B_9VgOm6.mjs → domain-BsDUBAvt.mjs} +29 -30
  54. package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
  55. package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
  56. package/dist/{email-BokHgjKj.mjs → email-_lGAHOhp.mjs} +24 -19
  57. package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
  58. package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
  59. package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
  60. package/dist/{env-BdTc-K2L.mjs → env-C74QepDE.mjs} +10 -10
  61. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
  62. package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
  63. package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
  64. package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
  65. package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
  66. package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  67. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  68. package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
  69. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  70. package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
  71. package/dist/gen-dA9hW7AV.mjs +2 -0
  72. package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-DaDdBbSS.mjs} +65 -164
  73. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  74. package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
  75. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  76. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  77. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  78. package/dist/{help-Bv44e2tm.mjs → help-0bTe_lID.mjs} +13 -32
  79. package/dist/help-DfQYVfGY.mjs +2 -0
  80. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  81. package/dist/index.d.mts +19 -2
  82. package/dist/index.mjs +619 -532
  83. package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
  84. package/dist/{init-BMf4T03q.mjs → init-DaBGmaXC.mjs} +161 -198
  85. package/dist/{link-BqYsSS_I.mjs → link-C6fjafep.mjs} +10 -10
  86. package/dist/{list-_kBToO-l.mjs → list-BTFBlqKl.mjs} +9 -8
  87. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  88. package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
  89. package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
  90. package/dist/{login-DFuo-RWO.mjs → login-GKcNUmtI.mjs} +7 -7
  91. package/dist/login-mx_ydhmp.mjs +2 -0
  92. package/dist/{logs-DYgnh6dH.mjs → logs-BiMSULmc.mjs} +28 -11
  93. package/dist/migrate-BHp07yJE.mjs +2 -0
  94. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  95. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  96. package/dist/{node-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
  97. package/dist/{operator-args-DdY54Bgb.mjs → operator-args-DOBhIaIg.mjs} +10 -1
  98. package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-BEZ_u0Cz.mjs} +2 -2
  99. package/dist/{operator-client-BFqpp6z0.mjs → operator-client-DbDv4vtE.mjs} +2 -2
  100. package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-BT4hgavL.mjs} +24 -11
  101. package/dist/operator-cmd-CwBB-1yb.mjs +2 -0
  102. package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -2
  103. package/dist/pages/client.d.mts +19 -51
  104. package/dist/pages/client.mjs +204 -225
  105. package/dist/pages/head-client.d.mts +1 -1
  106. package/dist/pages/head.d.mts +1 -1
  107. package/dist/pages/head.mjs +1 -1
  108. package/dist/pages/index.d.mts +2 -2
  109. package/dist/pages/index.mjs +6 -12
  110. package/dist/pages/islands-plugin.d.mts +1 -1
  111. package/dist/pages/islands-plugin.mjs +21 -25
  112. package/dist/pages/protocol.d.mts +2 -2
  113. package/dist/pages/protocol.mjs +2 -2
  114. package/dist/{plan-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
  115. package/dist/plan-CH2G51je.mjs +2 -0
  116. package/dist/platform-args-D4E1PjVw.mjs +2 -0
  117. package/dist/{platform-args-DSV2p4nY.mjs → platform-args-DUeXY9Om.mjs} +1 -1
  118. package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-CkSx3usH.mjs} +40 -36
  119. package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-BJimB_p9.mjs} +9 -8
  120. package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-BU6izFAU.mjs} +8 -7
  121. package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-BbY1dWiM.mjs} +14 -13
  122. package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-BbmJiq5O.mjs} +1 -1
  123. package/dist/{platform-discovery-BC0HCKYt.mjs → platform-discovery-DIYz8V63.mjs} +1 -1
  124. package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-CHVS6cV0.mjs} +6 -6
  125. package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-ByAlpkhV.mjs} +1 -1
  126. package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-DzCwqhFq.mjs} +76 -387
  127. package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-CBOT4BSM.mjs} +1 -1
  128. package/dist/{platform-management-BrF9STZp.mjs → platform-management-CuuVDhyt.mjs} +7 -7
  129. package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CN-heS4q.mjs} +5 -4
  130. package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-CskSJgLh.mjs} +3 -3
  131. package/dist/{platform-registry-P387v42A.mjs → platform-registry-Cjv2Qf0r.mjs} +5 -1
  132. package/dist/platform-setup-BBxRxmFC.mjs +299 -0
  133. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  134. package/dist/prepare-DRUV-g3X.mjs +2 -0
  135. package/dist/{prepare-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
  136. package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
  137. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  138. package/dist/prerender-render.mjs +1 -1
  139. package/dist/{project-DQstYTxO.mjs → project-BAm2aB6Q.mjs} +1 -1
  140. package/dist/{project-BiaPQ7ur.mjs → project-DedqCp59.mjs} +1 -1
  141. package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-DaoRrn-8.mjs} +19 -19
  142. package/dist/{project-team-Yiww3-go.mjs → project-team-Q_lCA7Io.mjs} +15 -18
  143. package/dist/{project-token-BrtT2NkY.mjs → project-token-BArgK9o1.mjs} +14 -17
  144. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  145. package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-KO9Hu2Pq.mjs} +12 -9
  146. package/dist/{protocol-BX8t2jiw.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  147. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  148. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  149. package/dist/{provision-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
  150. package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  151. package/dist/{requests-TIz_jtSu.mjs → requests-C7Oeoh5u.mjs} +5 -5
  152. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  153. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  154. package/dist/{rollback-dBqICPzj.mjs → rollback-DVAtrLAl.mjs} +30 -37
  155. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  156. package/dist/route-url-BgPja1GS.d.mts +5 -0
  157. package/dist/route-url-BjGv_KKY.mjs +28 -0
  158. package/dist/runner-9wjsSZx-.mjs +2 -0
  159. package/dist/{runner--2KF6Kua.mjs → runner-DMBKSrRk.mjs} +2 -2
  160. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  161. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  162. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  163. package/dist/runtime/ai.d.mts +1 -1
  164. package/dist/runtime/ai.mjs +34 -95
  165. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  166. package/dist/runtime/better-auth-mysql.mjs +4 -9
  167. package/dist/runtime/better-auth-pg.d.mts +1 -1
  168. package/dist/runtime/better-auth-pg.mjs +5 -10
  169. package/dist/runtime/better-auth.d.mts +1 -1
  170. package/dist/runtime/better-auth.mjs +3 -3
  171. package/dist/runtime/client-react.d.mts +2 -3
  172. package/dist/runtime/client-react.mjs +2 -2
  173. package/dist/runtime/client-solid.d.mts +2 -3
  174. package/dist/runtime/client-solid.mjs +2 -2
  175. package/dist/runtime/client-svelte.d.mts +2 -3
  176. package/dist/runtime/client-svelte.mjs +2 -2
  177. package/dist/runtime/client-vue.d.mts +2 -3
  178. package/dist/runtime/client-vue.mjs +2 -2
  179. package/dist/runtime/client.d.mts +2 -3
  180. package/dist/runtime/client.mjs +2 -2
  181. package/dist/runtime/db.mjs +1 -1
  182. package/dist/runtime/durable.mjs +3 -10
  183. package/dist/runtime/email/testing.mjs +5 -5
  184. package/dist/runtime/email.d.mts +2 -1
  185. package/dist/runtime/email.mjs +11 -27
  186. package/dist/runtime/env-public.mjs +15 -20
  187. package/dist/runtime/env.mjs +1 -1
  188. package/dist/runtime/fetch-stream.d.mts +2 -2
  189. package/dist/runtime/fetch-stream.mjs +1 -1
  190. package/dist/runtime/fetch.d.mts +2 -3
  191. package/dist/runtime/fetch.mjs +1 -1
  192. package/dist/runtime/handler.d.mts +1 -1
  193. package/dist/runtime/handler.mjs +2 -2
  194. package/dist/runtime/isr.mjs +1 -1
  195. package/dist/runtime/kv.mjs +10 -11
  196. package/dist/runtime/live-client.d.mts +1 -1
  197. package/dist/runtime/live-client.mjs +12 -22
  198. package/dist/runtime/live-server.mjs +27 -35
  199. package/dist/runtime/live.d.mts +2 -2
  200. package/dist/runtime/live.mjs +2 -2
  201. package/dist/runtime/migration-handler.mjs +4 -81
  202. package/dist/runtime/queues.mjs +1 -1
  203. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  204. package/dist/runtime/remote/binding-handler.mjs +8 -9
  205. package/dist/runtime/remote/index.mjs +27 -77
  206. package/dist/runtime/route-url.d.mts +2 -4
  207. package/dist/runtime/route-url.mjs +1 -1
  208. package/dist/runtime/routing.d.mts +1 -1
  209. package/dist/runtime/routing.mjs +15 -26
  210. package/dist/runtime/sandbox.mjs +2 -2
  211. package/dist/runtime/sse.mjs +1 -1
  212. package/dist/runtime/storage.mjs +1 -1
  213. package/dist/runtime/validator.d.mts +1 -1
  214. package/dist/runtime/ws-server.d.mts +2 -2
  215. package/dist/runtime/ws-server.mjs +30 -61
  216. package/dist/runtime/ws.d.mts +1 -1
  217. package/dist/runtime/ws.mjs +1 -1
  218. package/dist/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
  219. package/dist/{secret-AKnNXNP5.mjs → secret-BvtB7IjY.mjs} +15 -15
  220. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  221. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  222. package/dist/{subcommand-prompt-B6WS9Aoz.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  223. package/dist/sveltekit.d.mts +0 -2
  224. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  225. package/dist/validate-BJr9LfXy.mjs +2 -0
  226. package/dist/{validate-ymhap6M_.mjs → validate-C9qJArv7.mjs} +9 -28
  227. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  228. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  229. package/dist/{ws-C79j4aED.d.mts → ws-CChrrAU-.d.mts} +1 -1
  230. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  231. package/{skills/void/docs → docs}/guide/ai.md +5 -3
  232. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  233. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  234. package/{skills/void/docs → docs}/guide/deployment.md +2 -2
  235. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  236. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  237. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  238. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  239. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  240. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  241. package/{skills/void/docs → docs}/guide/live.md +10 -5
  242. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
  243. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  244. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  245. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  246. package/{skills/void/docs → docs}/guide/platform/administration/access.md +3 -11
  247. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  248. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  249. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  250. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  251. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  252. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  253. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +4 -2
  254. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
  255. package/{skills/void/docs → docs}/guide/project-collaboration.md +7 -3
  256. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  257. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  258. package/{skills/void/docs → docs}/guide/sandboxes.md +2 -2
  259. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  260. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  261. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  262. package/docs/integrations/agents.md +37 -0
  263. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  264. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  265. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  266. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  267. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  268. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  269. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  270. package/{skills/void/docs → docs}/reference/cli/auth.md +1 -6
  271. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  272. package/{skills/void/docs → docs}/reference/cli/deploy.md +1 -1
  273. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  274. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  275. package/{skills/void/docs → docs}/reference/cli/platform-config.md +1 -1
  276. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  277. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
  278. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  279. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  280. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  281. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  282. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  283. package/{skills/void/docs → docs}/reference/cli.md +1 -1
  284. package/{skills/void/docs → docs}/reference/config.md +13 -13
  285. package/{skills/void/docs → docs}/reference/resource-inference.md +1 -16
  286. package/package.json +34 -30
  287. package/schema.json +1 -1
  288. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  289. package/skills/void/SKILL.md +9 -5
  290. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  291. package/dist/client-BxVixJBI.mjs +0 -2
  292. package/dist/config-0acf1oys.mjs +0 -2
  293. package/dist/config-D8MOgiQV.mjs +0 -32
  294. package/dist/deploy-qmiLE1G1.mjs +0 -2
  295. package/dist/discover-AMCBXivQ.mjs +0 -2
  296. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  297. package/dist/gen-qCBwH3fZ.mjs +0 -2
  298. package/dist/help-Dw5f9Xrg.mjs +0 -2
  299. package/dist/login-D7meQg_3.mjs +0 -2
  300. package/dist/migrate-CEu2X5DB.mjs +0 -2
  301. package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
  302. package/dist/plan-COtUvdMA.mjs +0 -2
  303. package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
  304. package/dist/prepare-BBknoZI1.mjs +0 -2
  305. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  306. package/dist/route-url-CG7U-cRN.mjs +0 -15
  307. package/dist/runner-voIltZrY.mjs +0 -2
  308. package/dist/validate-pna7R3Pv.mjs +0 -2
  309. package/skills/void/docs/integrations/agents.md +0 -26
  310. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  311. package/{skills/void/docs → docs}/guide/app-types.md +0 -0
  312. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  313. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  314. package/{skills/void/docs → docs}/guide/database.md +8 -8
  315. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  316. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  317. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  318. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  319. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  320. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  321. package/{skills/void/docs → docs}/guide/email.md +0 -0
  322. package/{skills/void/docs → docs}/guide/index.md +0 -0
  323. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  324. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  325. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  326. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  327. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  328. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  329. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  330. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  331. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  332. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +0 -0
  333. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  334. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
  335. package/{skills/void/docs → docs}/guide/platform/installation/uninstall.md +0 -0
  336. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  337. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  338. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  339. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  340. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  341. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  342. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  343. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  344. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  345. package/{skills/void/docs → docs}/index.md +0 -0
  346. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  347. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  348. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  349. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  350. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  351. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  352. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  353. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  354. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  355. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  356. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  357. /package/{skills/void/docs → docs}/reference/api/resources.md +0 -0
  358. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  359. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  360. /package/{skills/void/docs → docs}/reference/api.md +0 -0
  361. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  362. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  363. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  364. /package/{skills/void/docs → docs}/reference/cli/platform.md +0 -0
  365. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -49,16 +49,16 @@ AI requests use your platform’s account and allowance in both local and remote
49
49
  When the dev server starts with remote mode active, it prints:
50
50
 
51
51
  ```
52
- ⚡ Remote bindings active (my-project.apps.example.com)
53
- DB → remote D1
54
- KV → remote KV
55
- STORAGE → remote R2
52
+ [void] Remote bindings active
53
+ DB → remote D1
54
+ KV → remote KV
55
+ STORAGE → remote R2
56
56
  ```
57
57
 
58
58
  ## Limitations
59
59
 
60
60
  - **Network latency:** each binding call makes a network request, so responses may be slower than local development.
61
61
  - **R2 multipart uploads:** `createMultipartUpload()` and `resumeMultipartUpload()` are not supported in remote mode.
62
- - **R2 conditional writes:** `put(..., { onlyIf })` requires a current Void platform and an active deployment with the native remote-binding handler. Update the platform and redeploy the project if this operation is unavailable. Failed preconditions return `null`.
62
+ - **R2 conditional writes:** `put(..., { onlyIf })` requires an updated platform and project deployment. Failed preconditions return `null`.
63
63
  - **D1 dump:** `db.dump()` is not supported in remote mode.
64
64
  - **D1 batches:** `db.batch()` requires an updated platform and project deployment.
@@ -97,7 +97,7 @@ Files, running processes, and listening servers last only as long as the contain
97
97
 
98
98
  ## Configuration
99
99
 
100
- The default environment provides Node.js 24 on Debian Trixie. Managed platform deploys use Cloudflare's managed Node.js image.
100
+ The default environment provides Node.js 26 on Debian Trixie. Managed platform deploys use Cloudflare's managed Node.js image.
101
101
 
102
102
  Use `void.config.ts` when you need a custom image or container size:
103
103
 
@@ -118,7 +118,7 @@ See the [configuration reference](../reference/config.md#sandbox) for binding na
118
118
  Custom images must include the helper matching Void's installed Sandbox SDK version. The SDK image supplies this binary, but is not a runnable environment itself:
119
119
 
120
120
  ```dockerfile
121
- FROM node:24.21.0-trixie-slim
121
+ FROM node:26.10.0-trixie-slim
122
122
  COPY --from=docker.io/cloudflare/sandbox:1.0.0 /usr/local/bin/sandbox-shim /usr/local/bin/sandbox-shim
123
123
  WORKDIR /workspace
124
124
  CMD ["sleep", "infinity"]
@@ -168,6 +168,4 @@ export const GET = defineHandler(async (c) => {
168
168
  });
169
169
  ```
170
170
 
171
- Native `EventSource` can send cookies with `withCredentials: true`. For non-cookie auth, generate a short-lived signed URL and validate it in the route handler.
172
-
173
171
  For shared topics and subscriptions, use [Live Event Streams](./live.md). For two-way communication, use [WebSockets](./websockets.md).
@@ -42,12 +42,12 @@ const head = await storage.head('uploads/photo.jpg');
42
42
  A common pattern is serving uploaded files from an API route:
43
43
 
44
44
  ```ts
45
+ // routes/files/[key].ts
45
46
  import { defineHandler } from 'void';
46
47
  import { storage } from 'void/storage';
47
48
 
48
49
  export const GET = defineHandler(async (c) => {
49
- const key = c.req.param('key');
50
- const object = await storage.get(key);
50
+ const object = await storage.get(`uploads/${c.req.param('key')}`);
51
51
 
52
52
  if (!object) {
53
53
  return c.notFound();
@@ -56,11 +56,16 @@ export const GET = defineHandler(async (c) => {
56
56
  const headers = new Headers();
57
57
  object.writeHttpMetadata(headers);
58
58
  headers.set('etag', object.httpEtag);
59
+ // Don't let an uploaded HTML or SVG file run as a page on your site.
60
+ headers.set('X-Content-Type-Options', 'nosniff');
61
+ headers.set('Content-Disposition', 'attachment');
59
62
 
60
63
  return new Response(object.body, { headers });
61
64
  });
62
65
  ```
63
66
 
67
+ Files your users upload can contain HTML or scripts. Store them under keys your server picks, and serve them with `nosniff` and `Content-Disposition: attachment`. `<img>` and `<video>` tags still display them; opening the URL directly downloads the file.
68
+
64
69
  ## Custom bindings
65
70
 
66
71
  Use `createStorage(bucket)` with your own R2 binding, or in tests:
@@ -151,6 +151,10 @@ Messages are JSON events. Raw string and binary messages are not supported.
151
151
 
152
152
  When Void auth is enabled, every WebSocket hook receives the current user as `ctx.user`, or `null` for an anonymous connection. Use `onBeforeConnect` to reject unauthenticated clients.
153
153
 
154
+ Connections from another origin are anonymous unless that origin is in your auth `trustedOrigins`. If you read your own cookies from `ctx.request`, check its `Origin` header yourself.
155
+
156
+ `ctx.user` is resolved when the socket connects and stays the same for that connection, even if the user later signs out or the session is revoked. For actions that must respect a ban or role change, re-check your own records in `onMessage` and close the connection with `ctx.connection.close()` in rooms or `ctx.socket.close()` in `defineWebSocket()`.
157
+
154
158
  ## Hooks
155
159
 
156
160
  Both `defineRoom()` and `defineWebSocket()` support:
@@ -0,0 +1,37 @@
1
+ ---
2
+ outline: deep
3
+ ---
4
+
5
+ # Using Void with Coding Agents
6
+
7
+ `void init` sets up coding agents as part of project initialization:
8
+
9
+ ```sh
10
+ npx void init
11
+ ```
12
+
13
+ New projects get a minimal `AGENTS.md` explaining Void and where to read its docs.
14
+ In an existing project, Void asks before creating, appending to, or updating
15
+ `AGENTS.md`. It preserves your instructions outside the Void section. Declining
16
+ keeps the file unchanged; CI and non-interactive runs skip changes to existing
17
+ projects' instructions.
18
+
19
+ The complete Markdown docs ship at `node_modules/void/docs/`. Start with
20
+ `guide/quickstart.md` for setup and `reference/cli.md` for commands. Agents can
21
+ read them directly, even without a linked skill.
22
+
23
+ ## Skills
24
+
25
+ Skills point your agent to the commands and docs it needs for the task. They link to the installed `void` package, so the guidance matches the version your app uses.
26
+
27
+ Void ships two skills:
28
+
29
+ - **`void`:** commands and docs for app development.
30
+ - **`migrate-vite-cloudflare-to-void`:** migration skill for converting existing `@cloudflare/vite-plugin` apps to Void.
31
+
32
+ Skills are linked automatically by `void init` when it detects a supported
33
+ agent's configuration. For example, Claude Code uses `.claude/skills/` and Codex
34
+ uses `.agents/skills/`. The skills use the app's installed docs so their guidance
35
+ matches its Void version. Globally installed skills can use the docs in their
36
+ Void package when there is no local installation. If no agent is detected, the
37
+ instructions still point directly to the bundled docs.
@@ -10,7 +10,7 @@ Use Void with [Astro](https://astro.build/) for resource detection, typed databa
10
10
 
11
11
  - [Astro 6+](https://astro.build/blog/astro-6/) is required to use `import { x } from "void/x"` helpers in Astro apps.
12
12
  - You also need to enable `"nodejs_als"` under `compatibility_flags` in your Cloudflare config.
13
- :::
13
+ :::
14
14
 
15
15
  ## Setup
16
16
 
@@ -30,8 +30,8 @@ npm install -D @astrojs/cloudflare void
30
30
  ### 3. Configure `astro.config.mjs`
31
31
 
32
32
  ```js
33
- import { defineConfig } from 'astro/config';
34
33
  import cloudflare from '@astrojs/cloudflare';
34
+ import { defineConfig } from 'astro/config';
35
35
  import { voidPlugin } from 'void';
36
36
 
37
37
  export default defineConfig({
@@ -85,9 +85,9 @@ export const prerender = false;
85
85
  Use `void/db` in API routes and server-side code:
86
86
 
87
87
  ```ts
88
+ import { users } from '@schema';
88
89
  import type { APIRoute } from 'astro';
89
90
  import { db } from 'void/db';
90
- import { users } from '@schema';
91
91
 
92
92
  export const GET: APIRoute = async () => {
93
93
  const rows = await db.select().from(users);
@@ -33,10 +33,14 @@ export default defineNuxtConfig({
33
33
  nitro: {
34
34
  preset: 'cloudflare-module',
35
35
  cloudflareDev: { configPath: './.void-wrangler.jsonc' },
36
+ // Required for Nuxt 4.6.0 on Windows.
37
+ externals: {
38
+ inline: [/[\\/]node_modules[\\/]nuxt[\\/]dist[\\/]/],
39
+ },
36
40
  alias: {
37
41
  // Nitro has its own bundler that doesn't use Vite aliases.
38
42
  // Duplicate @schema here so Nitro can resolve it.
39
- '@schema': resolve(__dirname, 'db/schema.ts'),
43
+ '@schema': resolve(import.meta.dirname, 'db/schema.ts'),
40
44
  },
41
45
  },
42
46
  vite: { plugins: [voidPlugin()] },
@@ -75,9 +79,9 @@ Void-managed auth is not supported in framework mode yet. Use Better Auth's offi
75
79
  ### Database
76
80
 
77
81
  ```ts
82
+ import { users } from '@schema';
78
83
  // server/api/users.get.ts
79
84
  import { db } from 'void/db';
80
- import { users } from '@schema';
81
85
 
82
86
  export default defineEventHandler(async () => {
83
87
  return db.select().from(users);
@@ -17,25 +17,33 @@ Once `hono` is installed in your app, you can use built-in middleware, helpers,
17
17
  Use Hono's built-in middleware in your global middleware files or per-route:
18
18
 
19
19
  ```ts
20
+ import { cors } from 'hono/cors';
20
21
  // middleware/01.cors.ts
21
22
  import { defineMiddleware } from 'void';
22
- import { cors } from 'hono/cors';
23
23
 
24
24
  export default defineMiddleware(cors({ origin: 'https://example.com' }));
25
25
  ```
26
26
 
27
27
  ```ts
28
- // middleware/02.cache.ts
29
- import { defineMiddleware } from 'void';
30
28
  import { cache } from 'hono/cache';
29
+ // routes/api/products.ts (per-route cache)
30
+ import { defineHandler } from 'void';
31
+ import { listProducts } from '../../lib/products';
31
32
 
32
- export default defineMiddleware(cache({ cacheName: 'my-app', cacheControl: 'max-age=3600' }));
33
+ export const GET = defineHandler(
34
+ cache({ cacheName: 'products', cacheControl: 'max-age=3600' }),
35
+ async () => ({ products: await listProducts() }),
36
+ );
33
37
  ```
34
38
 
39
+ ::: warning
40
+ `cache()` stores one response per URL and returns it to every visitor. It skips requests with an `Authorization` header, but not cookies. Use it only on routes whose response is the same for everyone, never on a route that reads the signed-in user. To cache pages, use [revalidation](../guide/edge/revalidation.md), which skips requests that carry a cookie.
41
+ :::
42
+
35
43
  ```ts
44
+ import { bearerAuth } from 'hono/bearer-auth';
36
45
  // routes/api/webhooks/stripe.ts (per-route usage)
37
46
  import { defineHandler } from 'void';
38
- import { bearerAuth } from 'hono/bearer-auth';
39
47
 
40
48
  export const POST = defineHandler(bearerAuth({ token: 'webhook-secret' }), async (c) => {
41
49
  const body = await c.req.json();
@@ -48,9 +56,9 @@ export const POST = defineHandler(bearerAuth({ token: 'webhook-secret' }), async
48
56
  Hono's context helpers are available on `c` in every handler:
49
57
 
50
58
  ```ts
59
+ import { stream } from 'hono/streaming';
51
60
  // routes/api/download.ts
52
61
  import { defineHandler } from 'void';
53
- import { stream } from 'hono/streaming';
54
62
 
55
63
  export const GET = defineHandler((c) => {
56
64
  return stream(c, async (stream) => {
@@ -76,9 +84,9 @@ export const GET = defineHandler((c) => {
76
84
  Any `hono/*` or `@hono/*` package works. Install the package in your app, then use it directly:
77
85
 
78
86
  ```ts
87
+ import { rateLimiter } from 'hono-rate-limiter';
79
88
  // middleware/01.rate-limit.ts
80
89
  import { defineMiddleware } from 'void';
81
- import { rateLimiter } from 'hono-rate-limiter';
82
90
 
83
91
  export default defineMiddleware(rateLimiter({ windowMs: 60_000, limit: 100 }));
84
92
  ```
@@ -111,6 +111,7 @@ The following imports are **not available** with a non-CF target and produce a c
111
111
  | `void/storage` | R2 (blob storage) |
112
112
  | `void/auth` | Void-managed Better Auth |
113
113
  | `void/ai` | Workers AI |
114
+ | `void/sandbox` | Cloudflare Sandboxes |
114
115
  | `void/env` | Typed environment schema |
115
116
 
116
117
  If you need a database or storage, use an external provider and connect via standard Node.js libraries.
@@ -4,7 +4,7 @@ outline: deep
4
4
 
5
5
  # Authentication {#auth}
6
6
 
7
- Imported from `"void"` or `"void/auth"`. Client-side helpers imported from `"void/client"`.
7
+ Imported from `"void/auth"`. Client-side helpers imported from `"void/client"`.
8
8
 
9
9
  ## `defineAuth(config)` {#defineauth-config}
10
10
 
@@ -41,8 +41,8 @@ Creates a handler with input validation using any [Standard Schema](https://gith
41
41
  Validated input is passed as the second argument to the handler.
42
42
 
43
43
  ```ts
44
- import { defineHandler } from 'void';
45
44
  import * as v from 'valibot';
45
+ import { defineHandler } from 'void';
46
46
 
47
47
  export const POST = defineHandler.withValidator({
48
48
  body: v.object({
@@ -103,6 +103,8 @@ Void’s reserved `/__void` endpoints use their own authentication and are exclu
103
103
 
104
104
  When credentials come from `void/env`, wrap the reads in functions so they are resolved per request after Void has bound the runtime env.
105
105
 
106
+ If `password` resolves to an empty value, requests fail with a server error instead of passing the gate.
107
+
106
108
  For app-specific bypasses such as health checks or public webhooks, compose that logic in your own middleware before calling `basicAuth()`.
107
109
 
108
110
  ```ts
@@ -182,7 +184,7 @@ export default defineQueue<{ to: string; subject: string }>(async (batch, env) =
182
184
  ```ts
183
185
  function defineQueue<T>(
184
186
  handler: (batch: QueueBatch<T>, env: CloudEnv['Bindings']) => void | Promise<void>,
185
- ): QueueFn;
187
+ ): TypedQueueHandler<T>;
186
188
  ```
187
189
 
188
190
  ## `defineRender(handler)` {#definerender-handler}
@@ -32,6 +32,10 @@ function voidVue(options?: VoidVueOptions): Plugin[];
32
32
  interface VoidVueOptions {
33
33
  vue?: VuePluginOptions; // passed through to @vitejs/plugin-vue
34
34
  viewTransitions?: boolean; // enable View Transitions API for navigations
35
+ prefetch?: {
36
+ hoverDelay?: number;
37
+ cacheFor?: number | string | [string, string];
38
+ };
35
39
  }
36
40
  ```
37
41
 
@@ -13,7 +13,7 @@ void connect --platform void
13
13
 
14
14
  Connect a project to its deployment destination. With no arguments, choose Cloudflare or a Void platform interactively. A URL selects a Void platform directly. `--platform void` offers saved platforms and an option to enter another URL.
15
15
 
16
- You can omit `https://` from a platform URL: `void connect platform.example.com` connects to `https://platform.example.com`. This also works in the interactive prompt. For a local HTTP platform, include the scheme, such as `http://localhost:8787`.
16
+ You can use a hostname: `void connect platform.example.com` connects over HTTPS. Loopback hosts (`localhost`, `127.0.0.1`, and `[::1]`) default to HTTP, so use `void connect localhost:8787` for a local platform. This also works in the interactive prompt. Include a scheme to override the default, for example `void connect https://localhost:8787`.
17
17
 
18
18
  For Cloudflare, Void signs in through the browser when needed, selects an accessible account, and saves `cloudflare.account_id` in `void.config.ts` or resolved state in `void.lock.json`. It shares this setup with `void init`. An existing account selection is preserved; conflicting or inaccessible account settings must be resolved before continuing.
19
19
 
@@ -32,11 +32,6 @@ platform. In a non-interactive shell, pass `--platform cloudflare|void` or use
32
32
  the explicit `void cloudflare` and `void account` commands. Choosing a destination
33
33
  for authentication does not change the project's deploy target.
34
34
 
35
- `void auth whoami`, `void auth link`, and `void auth token` remain supported for
36
- existing scripts. `whoami` follows the selected destination; `link` and `token`
37
- are Void account operations. Prefer `void auth status`, `void account link`, and
38
- `void account token` in new scripts.
39
-
40
35
  ## Void platform account {#void-platform-account}
41
36
 
42
37
  ### `void account login` {#void-account-login}
@@ -24,7 +24,7 @@ Show migration status. Displays which migrations are applied or pending locally,
24
24
 
25
25
  ## `void db reset` {#void-db-reset}
26
26
 
27
- Drop the local D1 database and re-apply all migrations. Does not affect the remote database.
27
+ Drop the development database and re-apply all migrations. D1 resets the local database; PostgreSQL and MySQL drop all tables in the `DATABASE_URL` database from `.env`. Does not affect the deployed database.
28
28
 
29
29
  ## `void db seed` {#void-db-seed}
30
30
 
@@ -79,11 +79,10 @@ Open [Drizzle Studio](https://orm.drizzle.team/docs/drizzle-kit-studio) for the
79
79
 
80
80
  By default, targets the local database. Pass `--remote` to open Studio against the deployed database:
81
81
 
82
- - **PostgreSQL and MySQL projects**: fetch the stored connection string from the platform and open Studio against it. If the URL isn't stored yet, run `void db set-url` first.
82
+ - **Hosted PostgreSQL and MySQL projects**: fetch the stored connection string from the platform and open Studio against it. If the URL isn't stored yet, run `void db set-url` first.
83
+ - **Direct Cloudflare PostgreSQL and MySQL projects**: use `DATABASE_URL` from the current shell.
83
84
  - **D1 projects**: remote Studio is not yet supported. Use `void db execute --remote` for ad-hoc queries against your deployed D1 database.
84
85
 
85
- On direct Cloudflare PostgreSQL/MySQL targets, remote Studio uses `DATABASE_URL` from the current shell. Direct D1 Studio remains unsupported; use `void db execute --remote`.
86
-
87
86
  ## `void db rename-migrations` {#void-db-rename-migrations}
88
87
 
89
88
  Rename existing migrations from the old numeric prefix format (`0001_name.sql`) to timestamp-based format (`20260410161500_name.sql`). Updates local tracking table and remote records if logged in with a linked project.
@@ -62,7 +62,7 @@ If no project is linked and no override is provided, CLI prompts to link or crea
62
62
  To deploy to another connected Void platform for one invocation:
63
63
 
64
64
  ```sh
65
- void connect https://second.example.com
65
+ void connect second.example.com
66
66
  VOID_API_URL=https://second.example.com void deploy --platform void --project my-app
67
67
  ```
68
68
 
@@ -109,7 +109,7 @@ void gen cron hourly-sync
109
109
  void gen queue <name>
110
110
  ```
111
111
 
112
- Create a queue consumer file in `queues/` with `defineQueue`, a `Message` interface, and commented-out batch options.
112
+ Create a queue consumer file in `queues/` with `defineQueue`, a `Message` type, and commented-out batch options.
113
113
 
114
114
  ```sh
115
115
  void gen queue emails
@@ -6,6 +6,8 @@ outline: deep
6
6
 
7
7
  Deploy-on-GitHub works from **any** Void login — Google, GitHub, or other SSO. The first time you connect GitHub, Void links your GitHub identity to your current account (a one-time step, independent of how you logged in); it never creates a second account.
8
8
 
9
+ Project-scoped `github` and `build` commands resolve the project in the same order as deploy: the `[project]` argument or `--project`, then `VOID_PROJECT`, then the linked project (`.void/project.json`).
10
+
9
11
  ## `void github link` {#void-github-link}
10
12
 
11
13
  ```
@@ -78,8 +80,6 @@ void github connect my-app \
78
80
  --branch main
79
81
  ```
80
82
 
81
- **Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
82
-
83
83
  You can connect only repositories your GitHub account can access.
84
84
 
85
85
  A project has one GitHub connection. Running `void github connect` on a project that is already connected fails. To connect a different repository, run `void github disconnect` first.
@@ -107,8 +107,6 @@ The CLI prompts for new settings using the current values as defaults. In CI, pa
107
107
  void github update my-app --executor github_actions
108
108
  ```
109
109
 
110
- **Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
111
-
112
110
  ## `void github status` {#void-github-status}
113
111
 
114
112
  ```
@@ -127,15 +125,13 @@ Show the connected repository, branch, executor, and workflow. Container builds
127
125
  void github status my-app
128
126
  ```
129
127
 
130
- **Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
131
-
132
128
  ## `void github disconnect` {#void-github-disconnect}
133
129
 
134
130
  ```
135
131
  void github disconnect [project]
136
132
  ```
137
133
 
138
- Disconnect a project from its GitHub repository, stopping automatic deploys. Any in-flight builds for the project are cancelled (their deploy tokens are revoked) before the connection is removed. If the project has no connection, it reports that and exits successfully. To point a project at a different repository, disconnect first, then run `void github connect`.
134
+ Disconnect a project from its GitHub repository, stopping automatic deploys. Any in-flight builds for the project are cancelled before the connection is removed. If the project has no connection, it reports that and exits successfully. To point a project at a different repository, disconnect first, then run `void github connect`.
139
135
 
140
136
  You are asked to confirm before anything is removed. Pass `--yes` to skip the prompt; `--yes` is **required** in a non-interactive shell (CI), where there is no prompt to answer.
141
137
 
@@ -150,8 +146,6 @@ You are asked to confirm before anything is removed. Pass `--yes` to skip the pr
150
146
  void github disconnect my-app --yes
151
147
  ```
152
148
 
153
- **Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
154
-
155
149
  ## Build {#build}
156
150
 
157
151
  Inspect Deploy-on-GitHub builds.
@@ -171,9 +165,6 @@ Stream, tail, or download the build logs for a **container** build. With no
171
165
  | `--output <file>`, `-o` | Write logs to a file instead of stdout (appends while following). | stdout |
172
166
  | `--project <slug>`, `-p` | Target project. | linked |
173
167
 
174
- **Project resolution** follows the same order as deploy: positional / `--project`,
175
- `VOID_PROJECT`, linked project (`.void/project.json`).
176
-
177
168
  Builds run on **GitHub Actions** keep their logs on GitHub — the command prints
178
169
  the Actions run URL instead of streaming. Only the last 10,000 log lines of a
179
170
  container build are retained.
@@ -89,4 +89,4 @@ when using `--yes`. Recovery requires Cloudflare management/database authority,
89
89
  original recovery keys, and a successful browser provider test. Use
90
90
  `--client-secret-env <name>` for new or rotated credentials.
91
91
 
92
- For automation, supply `VOID_OPERATOR_TOKEN` with an explicit `VOID_API_URL` or `--connection`. Operator tokens are stored separately from application deployment credentials. The API checks your current administrator access on every request. See [Using Scripts](../../guide/platform/administration/operations.md#using-scripts) for an example.
92
+ For automation, see [operator authentication](./platform.md#operator-authentication).
@@ -42,9 +42,8 @@ has ended and the operation is at least 24 hours old, inspect the exact resource
42
42
  named by the preview and attest whether its write was `applied` or `not-applied`.
43
43
  Applied writes continue at the next step; not-applied writes retry the same
44
44
  persisted intent. The running platform version must match that intent, so restore
45
- the matching version before recovering an operation created by older code. The
46
- preview pins the step, attempt, connection and route generations, resource
47
- identity, and digest used by the apply request. Time alone never retries a write.
45
+ the matching version before recovering an operation created by older code. Time
46
+ alone never retries a write.
48
47
 
49
48
  `shared-recipients` discovers shared inbound addresses, provider rule names and
50
49
  IDs, and interrupted creation intents, including projects awaiting deletion.
@@ -113,7 +113,7 @@ use `repair --dashboard-url <origin>` or `upgrade --dashboard-url <origin>`.
113
113
  Preview with `--plan` first. Existing Access protection must cover the configured
114
114
  dashboard origin before maintenance can proceed. See [Optional Dashboard](../../guide/platform/installation/domains.md#optional-dashboard).
115
115
 
116
- After discovery on another machine, set `VOID_PLATFORM_DATABASE_URL`. An upgrade that preserves every deployed Worker also preserves its secrets. For an email-enabled installation without its encrypted recovery file, restore `VOID_PLATFORM_EMAIL_SIGNING_SECRET`; recreating only the email gateway needs that key and does not need the Cloudflare runtime token or JWT signing key. Recreating the API or proxy also requires the email key when email is enabled, in addition to their normal secrets. Recreating the API requires its original runtime-token, GitHub, R2, JWT, and project-encryption values; recreating the proxy requires the runtime token and JWT signing key.
116
+ After discovery on another machine, set `VOID_PLATFORM_DATABASE_URL`. See [Manage an installation from another machine](../../guide/platform/installation/maintenance.md#manage-an-installation-from-another-machine) for the secrets needed to recreate a missing Worker.
117
117
 
118
118
  | Command | Behavior |
119
119
  | ----------- | ----------------------------------------------------------------------------------------------------------- |
@@ -54,6 +54,7 @@ void platform system asset-migrations [--page <n>] [--limit <n>]
54
54
  void platform system events [--page <n>] [--limit <n>]
55
55
  void platform system backfill-queue-tokens
56
56
  void platform system sandbox-drain [--cursor <opaque-cursor>]
57
+ void platform system rotate-proxy-tokens [--project <id> | --all]
57
58
  ```
58
59
 
59
60
  `overview` shows platform totals and recent activity. `health` checks the configured services and database, and exits with a nonzero status if a check fails. `cli-versions` reports the CLI versions used by deployments.
@@ -64,6 +65,8 @@ void platform system sandbox-drain [--cursor <opaque-cursor>]
64
65
 
65
66
  `sandbox-drain` removes legacy tenant-owned Sandbox resources. Use `--plan` to preview and `--yes` to apply, then pass `nextCursor` as `--cursor` to continue. Application traffic stays paused during cleanup.
66
67
 
68
+ `rotate-proxy-tokens` gives projects new platform credentials on their live Worker and the Workers kept for rollback, without a redeploy. Workers kept for rollback whose author can no longer deploy keep the old credentials. Use `--project <id>` for one project or `--all` for every project, with `--plan` to preview and `--yes` to apply. `--plan` alone shows every rotation that is still running. Each run does a bounded batch and the platform finishes the rest in the background; a rotation takes about 6 minutes per project, longer while a deploy is running. Use `--plan` to check progress until nothing is pending or failed. Running `--yes` again with `--project` or `--all` while a rotation is still running starts one more rotation for that project. When a rotation is finished, the previous credentials no longer work. Each rotation starts a new version of the project's live Worker, so WebSocket connections reconnect once.
69
+
67
70
  Use the [platform lifecycle commands](./platform-installation.md#lifecycle-commands) to maintain your installation's Workers.
68
71
 
69
72
  ## Hosted Workers {#operator-workers}
@@ -16,13 +16,13 @@ void platform user show <id>
16
16
  Use the same ID to change a plan, suspend or restore the account, or delete it:
17
17
 
18
18
  ```sh
19
- void platform user plan <id> <free|solo|pro|sponsored|custom>
19
+ void platform user plan <id> <plan-id>
20
20
  void platform user suspend <id> [--reason <text>]
21
21
  void platform user restore <id>
22
22
  void platform user delete <id>
23
23
  ```
24
24
 
25
- Suspending a user blocks their applications. Deleting a user also deletes their project resources. A plan change updates resource limits while preserving any administrator suspension.
25
+ Suspending a user blocks their applications, including scheduled jobs and queue consumers. While the account is suspended, each queue message is retried about once an hour, and each retry uses one of its queue's retries. Messages that run out of retries are dropped: after about 3 hours with the default of 3 retries, and at once for a queue with `maxRetries: 0`. Restore an account suspended by mistake promptly; queue delivery resumes within about an hour. Deleting a user also deletes their project resources. A plan change updates resource limits while preserving any administrator suspension.
26
26
 
27
27
  The last active administrator cannot be deleted or suspended. Both previews and
28
28
  actual mutations enforce this rule, including in the browser admin UI. Allowed
@@ -10,6 +10,7 @@ Show deployments for the configured target.
10
10
 
11
11
  - Void targets show recent hosted deployments; `[name]` looks up a project by slug and otherwise the linked project is used.
12
12
  - Cloudflare targets list Worker Versions, identify the active version, and show the recorded migration count. A project name is not accepted because the Worker name comes from `cloudflare.name` in `void.config.ts`.
13
+ - Owners and admins also see a warning when the platform cannot finish [replacing the project's credentials](../../guide/project-collaboration.md#change-or-remove-access).
13
14
 
14
15
  ## `void project link [name]` {#void-project-link-name}
15
16
 
@@ -36,7 +37,7 @@ void project team accept <invitation-id>
36
37
  void project team decline <invitation-id>
37
38
  ```
38
39
 
39
- Project-scoped commands use `--project`, then `VOID_PROJECT`, then the linked project. Invitations can target only an email address already registered to a user on that platform; they do not create accounts or grant signup access. Only the invited account can accept or decline its invitation.
40
+ Project-scoped commands use `--project`, then `VOID_PROJECT`, then the linked project. Invitations can target only an email address already registered to a user on that platform; they do not create accounts or grant signup access. Only the invited account can accept or decline its invitation. `list` shows the same credential warning as `void project status`.
40
41
 
41
42
  Readers can view the project but cannot deploy. Collaborators can deploy and manage deploy prerequisites. Project administrators can additionally manage domains, email destinations, GitHub configuration, and the project team. The owner alone can delete the project. See [Project Collaboration](../../guide/project-collaboration.md) for the full role boundaries.
42
43
 
@@ -137,7 +138,7 @@ void project logs --level error --range 12h
137
138
  void project logs --level error --filter websocket
138
139
  ```
139
140
 
140
- Logs include top-level `console.*` calls and uncaught errors captured by Cloudflare Tail. If you catch an error and save it only to your database, it won't appear here. Also log it with `console.error()` or `logger.error()` from `void/log`.
141
+ Logs include top-level `console.*` calls and uncaught errors captured by Cloudflare Tail. If you catch an error and save it only to your database, it won't appear here. Also log it with `console.error()` or `logger.error()` from `void/log`. On hosted Void targets, pass the `Error` object itself to `console.error()`, as in `console.error('Save failed:', error)`, to see its stack trace under the log line. Logging only `error.message` shows no stack.
141
142
 
142
143
  For errors that never reach your Worker, such as edge routing errors or static site requests, use `void project requests --status 5xx`.
143
144
 
@@ -195,7 +196,7 @@ This command is hosted-only. Direct Cloudflare deploys are local operations and
195
196
 
196
197
  ## `void project delete [name]` {#void-project-delete-name}
197
198
 
198
- Permanently delete a hosted Void project and all its resources (databases, KV namespaces, R2 buckets, deployments). Requires typing the project slug to confirm.
199
+ Permanently delete a hosted Void project and all its resources (databases, KV namespaces, R2 buckets, deployments). Requires typing the project slug to confirm; `--force` (`-f`) skips the prompt.
199
200
 
200
201
  If `[name]` is omitted, uses the linked project.
201
202
 
@@ -211,4 +212,4 @@ Purge all cached pages for the linked project. The edge cache will clear within
211
212
 
212
213
  If `--project` is provided, purges that project's cache instead of the linked project.
213
214
 
214
- This command is currently hosted-only. Direct Cloudflare cache purge fails closed with guidance.
215
+ This command is hosted-only. For direct Cloudflare targets, redeploy or purge the configured ISR KV namespace yourself.
@@ -14,8 +14,6 @@ List production secret names for the saved target. Secret values are never print
14
14
 
15
15
  ## `void secret put` {#void-secret-put}
16
16
 
17
- On hosted projects, secret writes and deletes return a retryable conflict while a deployment or rollback is in progress. Wait for that operation to finish and retry; the rejected operation leaves the stored secret unchanged.
18
-
19
17
  ```
20
18
  void secret put <name> [--project <name>]
21
19
  void secret put <name=value> [--project <name>]
@@ -27,7 +25,7 @@ Value input modes:
27
25
  - prompt (TTY): `void secret put API_KEY` (masked input)
28
26
  - stdin: `echo -n "abcd" | void secret put API_KEY`
29
27
 
30
- On a direct Cloudflare target, the value is sent to Cloudflare over stdin and stored as an encrypted Worker secret.
28
+ On a direct Cloudflare target, the value is stored as an encrypted Worker secret.
31
29
 
32
30
  ## `void secret sync` {#void-secret-sync}
33
31
 
@@ -51,6 +49,8 @@ void secret delete <name> [--project <name>]
51
49
 
52
50
  Secret commands use the platform saved in `.void/project.json`. Hosted project resolution follows the same order as deploy (`--project`, env var, linked project). Direct Cloudflare targets reject `--project` and use the pinned root Cloudflare config.
53
51
 
52
+ On hosted projects, secret writes and deletes return a retryable conflict while a deployment or rollback is in progress. Wait for that operation to finish and retry; the rejected operation leaves the stored secret unchanged.
53
+
54
54
  ## Env Schema {#env-schema}
55
55
 
56
56
  ### `void env check` {#void-env-check}
@@ -28,7 +28,7 @@ Resources recorded in `void.lock.json` without a matching definition appear sepa
28
28
  ## `void init` {#void-init}
29
29
 
30
30
  ```sh
31
- void init [--tsconfig] [--github] [--agents] [--git | --no-git]
31
+ void init [--tsconfig] [--github] [--git | --no-git]
32
32
  ```
33
33
 
34
34
  Set up a new or existing Void project. In an empty directory, choose Vite+ or Vite, a framework, and a D1, PostgreSQL, MySQL, or Static Pages starter.
@@ -37,6 +37,12 @@ In an existing app, Void adds missing dependencies and scripts and updates the V
37
37
 
38
38
  The wizard also sets up TypeScript, agent instructions, environment declarations, and a deployment target. Choose Cloudflare, a Void platform, or skip deployment setup. If you skip sign-in, run `void connect` when you're ready. See [Quick Start](../../guide/quickstart.md).
39
39
 
40
+ Every init run sets up coding agents. New projects get a minimal `AGENTS.md`
41
+ pointing to `node_modules/void/docs/`. Existing projects prompt before the file
42
+ is created, appended to, or updated; CI and non-interactive runs leave existing
43
+ projects' instructions unchanged. Skills are linked for detected agents. See
44
+ [Coding Agents](../../integrations/agents.md).
45
+
40
46
  Outside an existing repository or workspace package, Void offers to initialize Git. Use `--git` to initialize without a prompt or `--no-git` to skip it. CI requires `--git` to initialize. Workspace packages do not accept these flags.
41
47
 
42
48
  Run selected setup steps with:
@@ -44,10 +50,10 @@ Run selected setup steps with:
44
50
  | Flag | Purpose |
45
51
  | ------------ | -------------------------------------------------------------- |
46
52
  | `--tsconfig` | Update TypeScript configuration, preserving existing settings. |
47
- | `--agents` | Set up agent instructions and skills for detected agents. |
48
53
  | `--github` | Create the GitHub Actions deployment workflow. |
49
54
 
50
- These flags can be combined and skip the other wizard steps. Add `--git` if you also want Git initialization.
55
+ These flags can be combined and skip the other wizard steps. Coding agent setup
56
+ still runs. Add `--git` if you also want Git initialization.
51
57
 
52
58
  For Cloudflare workflows, add a `CLOUDFLARE_API_TOKEN` repository secret. PostgreSQL and MySQL apps also need `DATABASE_URL`.
53
59
 
@@ -60,11 +66,3 @@ void prepare
60
66
  ```
61
67
 
62
68
  Generates Void’s types and TypeScript configuration without starting the dev server or building the app. Run it after a fresh clone or before typechecking in CI.
63
-
64
- ## Agent {#agent}
65
-
66
- ### `void init --agents` {#void-init-agents}
67
-
68
- Adds Void instructions to `AGENTS.md` and links skills for detected coding agents. Existing instructions outside the Void block are preserved.
69
-
70
- If no supported agent is detected, `AGENTS.md` links to the bundled docs. See [Coding Agents](../../integrations/agents.md).
@@ -73,7 +73,7 @@ Use this page as a command reference. If you are setting up a project for the fi
73
73
  | `void email allow <address>` | Add a recipient and send a verification email |
74
74
  | `void email disallow <address>` | Remove a recipient from the allowlist |
75
75
  | `void email domain` | Send and receive at your own domain on a Cloudflare zone |
76
- | `void init` | Setup wizard for new or existing projects |
76
+ | `void init` | Set up a new or existing project, including coding agents |
77
77
  | `void migrate` | Convert legacy `void.json` and root Wrangler JSON/JSONC into `void.config.ts` |
78
78
 
79
79
  ## Binary Invocation {#binary-invocation}