void 0.22.0 → 0.24.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 (301) hide show
  1. package/AGENTS_TEMPLATE.md +1 -1
  2. package/README.md +5 -1
  3. package/dist/{account-cmd-CjyxcGkM.mjs → account-cmd-vJhh5lrb.mjs} +5 -5
  4. package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
  5. package/dist/application-routing-B7QEjqSR.mjs +27 -0
  6. package/dist/{auth-DLNN0D3Z.mjs → auth-CQkSDS50.mjs} +26 -96
  7. package/dist/auth-DX3JURcX.mjs +2 -0
  8. package/dist/{auth-link-BLO4ptzo.mjs → auth-link-D75t9wO2.mjs} +5 -5
  9. package/dist/{auth-router-ZUg9MF_U.mjs → auth-router-ClfhL1J7.mjs} +7 -7
  10. package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
  11. package/dist/{build-cmd-BxR5FROK.mjs → build-cmd-zMi1iFnS.mjs} +21 -9
  12. package/dist/{cache-D0sWhgKI.mjs → cache-ZtQmyxVV.mjs} +5 -5
  13. package/dist/{cancel-deploy-D4NUqFbi.mjs → cancel-deploy-Box0kkEV.mjs} +5 -5
  14. package/dist/{cf-access-P0iZnu0q.mjs → cf-access-BGe5sWXF.mjs} +4 -48
  15. package/dist/{cf-access-DRsQRe6k.mjs → cf-access-TWNzXltp.mjs} +3 -11
  16. package/dist/{cf-build-output-BJ6yGEIS.mjs → cf-build-output-BPqOT964.mjs} +2 -1
  17. package/dist/cf-build-output-_0HNWysu.mjs +2 -0
  18. package/dist/cli/cli.mjs +89 -461
  19. package/dist/cli/{cf-compat.mjs → cloudflare-operation-process.mjs} +454 -424
  20. package/dist/cli/env-schema-probe.d.mts +2 -1
  21. package/dist/cli/env-schema-probe.mjs +4 -4
  22. package/dist/client-B9UBI03V.mjs +2 -0
  23. package/dist/{client-BTZ3XkrB.mjs → client-DKAsFA4X.mjs} +161 -24
  24. package/dist/{cloudflare-auth-DQkqoMYa.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -38
  25. package/dist/{cloudflare-cmd-BKlfGHAy.mjs → cloudflare-cmd-CmY8dGkd.mjs} +6 -6
  26. package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
  27. package/dist/{cloudflare-connect-Ctmrw579.mjs → cloudflare-connect-IiR3ZieC.mjs} +4 -4
  28. package/dist/{cloudflare-operations-BT6OWFBk.mjs → cloudflare-operations-BCdXSsmo.mjs} +1 -1
  29. package/dist/{cloudflare-operations-B9tzgjmf.mjs → cloudflare-operations-DzH-A966.mjs} +116 -172
  30. package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
  31. package/dist/{config-VavjpDnp.d.mts → config-BMHb8RCj.d.mts} +1 -0
  32. package/dist/config-C_XRIPx2.mjs +89 -0
  33. package/dist/config-entry.d.mts +1 -1
  34. package/dist/{connect-Dg-WkW-C.mjs → connect-B-usTnlF.mjs} +9 -9
  35. package/dist/{create-project-l9J7pbtm.mjs → create-project-CYOOAYcn.mjs} +12 -12
  36. package/dist/{create-project-DdoqwFLF.mjs → create-project-FWbf5Olo.mjs} +1 -1
  37. package/dist/{db-gp2sCXyN.mjs → db-Ck2eZ2iB.mjs} +26 -26
  38. package/dist/{delete-TTedbH6B.mjs → delete-sK56qtzZ.mjs} +5 -5
  39. package/dist/{deploy-CH-o2CaZ.mjs → deploy-gCVaiJbS.mjs} +984 -616
  40. package/dist/{deploy-B19L2Bra.mjs → deploy-irP5q0-x.mjs} +1 -1
  41. package/dist/{domain-JRF59P_r.mjs → domain-DFfQE8jg.mjs} +6 -6
  42. package/dist/{email-Bo6G9LOZ.mjs → email-CdnhUHvJ.mjs} +15 -30
  43. package/dist/{env-BYOrWQnv.mjs → env-DmGdHi5i.mjs} +8 -8
  44. package/dist/{env-public-BxU_0yTL.d.mts → env-public-BX_r8HR6.d.mts} +1 -1
  45. package/dist/{env-types-C2_bIk_b.mjs → env-types-D5kds_OZ.mjs} +1 -1
  46. package/dist/{env-validation-BB4GkLxn.mjs → env-validation-C_8tPdhs.mjs} +20 -73
  47. package/dist/{env-validation-BXge7uyK.mjs → env-validation-zZOCcQVZ.mjs} +1 -1
  48. package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
  49. package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
  50. package/dist/{gen-sCtlCOdA.mjs → gen-CshAkukR.mjs} +4 -4
  51. package/dist/gen-DvQTWzDU.mjs +2 -0
  52. package/dist/{github-cmd-0-7PexDq.mjs → github-cmd-DftuEvIt.mjs} +13 -13
  53. package/dist/{handler-HEcZsaij.d.mts → handler-CZ4nAylQ.d.mts} +1 -1
  54. package/dist/{headers-DWi2IXWx.mjs → headers-2rKda9Y6.mjs} +1 -1
  55. package/dist/{help-GKtwl07I.mjs → help-Dotbf6iz.mjs} +236 -750
  56. package/dist/help-mabuIV98.mjs +2 -0
  57. package/dist/{inbound-aVHEUhKo.mjs → inbound-fRkqcXaC.mjs} +1 -1
  58. package/dist/index.d.mts +1 -1
  59. package/dist/index.mjs +299 -1517
  60. package/dist/info-B97bTX9N.mjs +113 -0
  61. package/dist/{init-FZx3Elvz.mjs → init-BTQEZZGJ.mjs} +61 -27
  62. package/dist/limits-Bq5LG8Id.d.mts +27 -0
  63. package/dist/limits-Cjuk2VPm.mjs +68 -0
  64. package/dist/{link-BrQfb_CU.mjs → link-B46sYH0K.mjs} +6 -6
  65. package/dist/{list-D44jmIAM.mjs → list-BnPrIsU_.mjs} +6 -6
  66. package/dist/{live-CKJlvlNp.d.mts → live-Chw1eIMv.d.mts} +1 -1
  67. package/dist/{local-d1-Bg9OzEEO.mjs → local-d1-2CMnpuW_.mjs} +2 -2
  68. package/dist/log-vqY3pqwI.mjs +29 -0
  69. package/dist/{login-CAsAsQ-_.mjs → login-BuiMyUrx.mjs} +8 -8
  70. package/dist/login-DIy9Sb-U.mjs +2 -0
  71. package/dist/{logs-BjKvFnVM.mjs → logs-CZG9d-ic.mjs} +10 -11
  72. package/dist/migrate-BCiJ8w0f.mjs +2 -0
  73. package/dist/{migrate-BPITvDJN.mjs → migrate-q4_njtaW.mjs} +4 -3
  74. package/dist/{node-Dt7z256D.mjs → node-BkyRWRx8.mjs} +1 -1
  75. package/dist/operator-args-B3BTmSoi.mjs +697 -0
  76. package/dist/{operator-auth-8KnOVXVd.mjs → operator-auth-7erYc6Lt.mjs} +2 -2
  77. package/dist/{operator-client-DUwumHpQ.mjs → operator-client-CpHjTd0t.mjs} +3 -3
  78. package/dist/{operator-cmd-BK5CCiT9.mjs → operator-cmd-DGqPJUD3.mjs} +70 -24
  79. package/dist/{output-Dm_A4Tbv.mjs → output-CbM85T4k.mjs} +18 -10
  80. package/dist/pages/client.d.mts +34 -2
  81. package/dist/pages/client.mjs +59 -3
  82. package/dist/pages/index.d.mts +1 -1
  83. package/dist/pages/index.mjs +2 -2
  84. package/dist/pages/islands-plugin.mjs +1 -1
  85. package/dist/pages/protocol.d.mts +2 -2
  86. package/dist/pages/protocol.mjs +2 -308
  87. package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
  88. package/dist/plan-D1Q5rf-r.mjs +2 -0
  89. package/dist/plan-NPpwZ_kc.mjs +58 -0
  90. package/dist/platform-args-3k8X9-H_.mjs +514 -0
  91. package/dist/platform-args-DdnM6WIf.mjs +2 -0
  92. package/dist/{platform-auth-config-BlN8xTdD.mjs → platform-auth-config-DDrxUy4m.mjs} +6 -6
  93. package/dist/{platform-auth-protection-7d5aV2Jg.mjs → platform-auth-protection-BLadnnct.mjs} +8 -8
  94. package/dist/{platform-auth-recovery-Dxij8ZbR.mjs → platform-auth-recovery-CmCzX2Fl.mjs} +6 -6
  95. package/dist/{platform-cmd-B3hwKrFK.mjs → platform-cmd-DMDEc9uS.mjs} +29 -8
  96. package/dist/{platform-cmd-E0FuL212.mjs → platform-cmd-pMTRhvYs.mjs} +1 -1
  97. package/dist/{platform-domain-D6Xcy9ZX.mjs → platform-domain-Di6EYrQl.mjs} +5 -5
  98. package/dist/{platform-lifecycle-k0E0xoxx.mjs → platform-lifecycle-BBoNzojY.mjs} +1541 -572
  99. package/dist/{platform-lifecycle-DMh_qrry.mjs → platform-lifecycle-BFdSi9Qt.mjs} +1 -1
  100. package/dist/{platform-management-Brz_BDiT.mjs → platform-management-CWOQOWXm.mjs} +10 -7
  101. package/dist/{platform-management-DOtss0BN.mjs → platform-management-DG47jys8.mjs} +1 -1
  102. package/dist/platform-plans-config-Vl9BP3H4.mjs +359 -0
  103. package/dist/{platform-recovery-BvtcXON5.mjs → platform-recovery-BJnQJEtQ.mjs} +4 -4
  104. package/dist/{platform-registry-QBa4DK32.mjs → platform-registry-DkPPXfp_.mjs} +2 -2
  105. package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
  106. package/dist/{prepare-C-6YZyyg.mjs → prepare-CBLT3CHH.mjs} +3 -3
  107. package/dist/prepare-CnjcTV2s.mjs +2 -0
  108. package/dist/{prepare-CRhJbVrG.mjs → prepare-DnaKBi--.mjs} +5 -21
  109. package/dist/{project-C0Fqu05O.mjs → project-DKG5Ra8p.mjs} +15 -82
  110. package/dist/project-DsblYifa.mjs +2 -0
  111. package/dist/{project-cmd-BZLCqOqw.mjs → project-cmd-DxnXstAq.mjs} +19 -19
  112. package/dist/{project-team-BvgM0WoX.mjs → project-team-BmHcaALJ.mjs} +5 -5
  113. package/dist/{project-token-l5DqK6Az.mjs → project-token-GionZlBI.mjs} +5 -5
  114. package/dist/{project-zero-trust-v6Mvpp8y.mjs → project-zero-trust-JLCjVQA7.mjs} +5 -5
  115. package/dist/prompts-2TGE6oXx.mjs +2 -0
  116. package/dist/prompts-BNUoTiaf.mjs +2044 -0
  117. package/dist/{protocol-BBa6cstI.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
  118. package/dist/protocol-U7bfjHmA.mjs +331 -0
  119. package/dist/{provision-Fr9pRqce.mjs → provision-CVku1JFU.mjs} +1 -1
  120. package/dist/{provision-C4IGqkBf.mjs → provision-CaoxO_U7.mjs} +90 -199
  121. package/dist/{requests-DN-BbNiM.mjs → requests-BOjIVAeF.mjs} +5 -5
  122. package/dist/resource-name-C7LVpcRm.mjs +11 -0
  123. package/dist/{rollback-D7rzSaZM.mjs → rollback-CwR3pLj3.mjs} +6 -6
  124. package/dist/route-url-CG7U-cRN.mjs +15 -0
  125. package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
  126. package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
  127. package/dist/runtime/ai.d.mts +12 -8
  128. package/dist/runtime/ai.mjs +87 -22
  129. package/dist/runtime/better-auth-mysql.mjs +1 -1
  130. package/dist/runtime/better-auth-pg.mjs +1 -1
  131. package/dist/runtime/better-auth.mjs +1 -1
  132. package/dist/runtime/client-react.mjs +2 -2
  133. package/dist/runtime/client-solid.mjs +2 -2
  134. package/dist/runtime/client-svelte.mjs +2 -2
  135. package/dist/runtime/client-vue.mjs +2 -2
  136. package/dist/runtime/client.mjs +2 -2
  137. package/dist/runtime/durable.d.mts +3 -1
  138. package/dist/runtime/durable.mjs +4 -1
  139. package/dist/runtime/email/testing.mjs +2 -2
  140. package/dist/runtime/email.mjs +1 -1
  141. package/dist/runtime/env-public.d.mts +1 -1
  142. package/dist/runtime/fetch-stream.mjs +1 -1
  143. package/dist/runtime/fetch.mjs +1 -1
  144. package/dist/runtime/handler.d.mts +1 -1
  145. package/dist/runtime/kv.mjs +0 -1
  146. package/dist/runtime/limits.d.mts +2 -0
  147. package/dist/runtime/limits.mjs +2 -0
  148. package/dist/runtime/live-client.d.mts +1 -1
  149. package/dist/runtime/live-server.mjs +25 -16
  150. package/dist/runtime/live.d.mts +1 -1
  151. package/dist/runtime/migration-handler.mjs +62 -42
  152. package/dist/runtime/remote/index.mjs +2 -2
  153. package/dist/runtime/route-url.d.mts +4 -0
  154. package/dist/runtime/route-url.mjs +2 -0
  155. package/dist/runtime/routing.d.mts +180 -0
  156. package/dist/runtime/routing.mjs +1082 -0
  157. package/dist/runtime/sandbox-container.d.mts +1 -1
  158. package/dist/runtime/sandbox-container.mjs +1 -1
  159. package/dist/runtime/sandbox.d.mts +3 -3
  160. package/dist/runtime/sandbox.mjs +75 -45
  161. package/dist/runtime/sse.mjs +1 -1
  162. package/dist/runtime/validator.d.mts +1 -1
  163. package/dist/runtime/ws-server.d.mts +4 -2
  164. package/dist/runtime/ws-server.mjs +27 -2
  165. package/dist/runtime/ws.d.mts +2 -2
  166. package/dist/runtime/ws.mjs +8 -6
  167. package/dist/{sandbox-qpNBT8a3.d.mts → sandbox-XZAqzFlG.d.mts} +11 -8
  168. package/dist/{sandbox-container-DdNEBfCc.d.mts → sandbox-container-Bo0eiFKz.d.mts} +2 -1
  169. package/dist/{sandbox-container-4fdqLnyb.mjs → sandbox-container-C6ItmVuN.mjs} +4 -2
  170. package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
  171. package/dist/{secret-BOtOl_cb.mjs → secret-ByWJWBUG.mjs} +7 -7
  172. package/dist/{skills-D1II1Juz.mjs → skills-C1PlclPt.mjs} +1 -1
  173. package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
  174. package/dist/{subcommand-prompt-CY1C4fvl.mjs → subcommand-prompt-klFCfcor.mjs} +40 -32
  175. package/dist/validate-Dq_L3s0S.mjs +2 -0
  176. package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
  177. package/dist/{wrangler-DQF1vKyf.mjs → wrangler-7K-bW_DL.mjs} +8 -239
  178. package/dist/{ws-BoY7vQML.d.mts → ws-CL1w7GXU.d.mts} +13 -2
  179. package/package.json +16 -10
  180. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
  181. package/skills/void/SKILL.md +55 -135
  182. package/skills/void/docs/guide/ai.md +94 -84
  183. package/skills/void/docs/guide/app-types.md +3 -32
  184. package/skills/void/docs/guide/auth.md +12 -116
  185. package/skills/void/docs/guide/database/d1.md +9 -54
  186. package/skills/void/docs/guide/database/mysql.md +1 -1
  187. package/skills/void/docs/guide/database/postgresql.md +5 -26
  188. package/skills/void/docs/guide/database.md +23 -75
  189. package/skills/void/docs/guide/deployment.md +48 -112
  190. package/skills/void/docs/guide/durable-state.md +43 -18
  191. package/skills/void/docs/guide/edge/headers.md +4 -48
  192. package/skills/void/docs/guide/edge/prerendering.md +5 -20
  193. package/skills/void/docs/guide/edge/redirects.md +11 -64
  194. package/skills/void/docs/guide/edge/revalidation.md +5 -18
  195. package/skills/void/docs/guide/edge/rewrites.md +56 -284
  196. package/skills/void/docs/guide/edge/static-assets.md +22 -72
  197. package/skills/void/docs/guide/email/domains.md +116 -0
  198. package/skills/void/docs/guide/email/receiving.md +139 -0
  199. package/skills/void/docs/guide/email/sending.md +231 -0
  200. package/skills/void/docs/guide/email.md +13 -619
  201. package/skills/void/docs/guide/env-migration.md +11 -11
  202. package/skills/void/docs/guide/env-vars.md +9 -29
  203. package/skills/void/docs/guide/index.md +0 -15
  204. package/skills/void/docs/guide/jobs.md +3 -18
  205. package/skills/void/docs/guide/kv.md +5 -11
  206. package/skills/void/docs/guide/live.md +5 -56
  207. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
  208. package/skills/void/docs/guide/pages-routing/head.md +10 -10
  209. package/skills/void/docs/guide/pages-routing/islands.md +6 -36
  210. package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
  211. package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
  212. package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
  213. package/skills/void/docs/guide/pages-routing/overview.md +7 -17
  214. package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
  215. package/skills/void/docs/guide/platform/administration/access.md +1 -4
  216. package/skills/void/docs/guide/platform/administration/email.md +35 -8
  217. package/skills/void/docs/guide/platform/administration/operations.md +26 -4
  218. package/skills/void/docs/guide/platform/administration/plans.md +126 -0
  219. package/skills/void/docs/guide/platform/administration/projects.md +5 -2
  220. package/skills/void/docs/guide/platform/administration/zero-trust.md +49 -160
  221. package/skills/void/docs/guide/platform/development/runtime.md +3 -13
  222. package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
  223. package/skills/void/docs/guide/platform/installation/ci.md +1 -1
  224. package/skills/void/docs/guide/platform/installation/credentials.md +15 -6
  225. package/skills/void/docs/guide/platform/installation/domains.md +35 -2
  226. package/skills/void/docs/guide/platform/installation/first-deployment.md +4 -2
  227. package/skills/void/docs/guide/platform/installation/maintenance.md +15 -1
  228. package/skills/void/docs/guide/platform/installation/prerequisites.md +24 -18
  229. package/skills/void/docs/guide/platform/installation/setup.md +88 -14
  230. package/skills/void/docs/guide/platform-administration.md +1 -0
  231. package/skills/void/docs/guide/queues.md +7 -9
  232. package/skills/void/docs/guide/quickstart.md +38 -37
  233. package/skills/void/docs/guide/remote-dev.md +5 -10
  234. package/skills/void/docs/guide/sandboxes.md +29 -21
  235. package/skills/void/docs/guide/server-routing.md +9 -72
  236. package/skills/void/docs/guide/sse.md +4 -18
  237. package/skills/void/docs/guide/ssg.md +3 -15
  238. package/skills/void/docs/guide/ssr.md +14 -62
  239. package/skills/void/docs/guide/storage.md +9 -4
  240. package/skills/void/docs/guide/type-safety.md +3 -14
  241. package/skills/void/docs/guide/typed-fetch.md +3 -7
  242. package/skills/void/docs/guide/websockets.md +68 -40
  243. package/skills/void/docs/integrations/agents.md +3 -3
  244. package/skills/void/docs/integrations/cloudflare.md +85 -316
  245. package/skills/void/docs/integrations/frameworks/analog.md +5 -64
  246. package/skills/void/docs/integrations/frameworks/astro.md +4 -73
  247. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
  248. package/skills/void/docs/integrations/frameworks/overview.md +11 -54
  249. package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
  250. package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
  251. package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
  252. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
  253. package/skills/void/docs/reference/api/auth.md +156 -0
  254. package/skills/void/docs/reference/api/client.md +87 -0
  255. package/skills/void/docs/reference/api/database.md +95 -0
  256. package/skills/void/docs/reference/api/durable.md +46 -0
  257. package/skills/void/docs/reference/api/env.md +50 -0
  258. package/skills/void/docs/reference/api/handlers.md +254 -0
  259. package/skills/void/docs/reference/api/pages.md +241 -0
  260. package/skills/void/docs/reference/api/plugin.md +39 -0
  261. package/skills/void/docs/reference/api/resources.md +109 -0
  262. package/skills/void/docs/reference/api/rewrites.md +76 -0
  263. package/skills/void/docs/reference/api/types.md +92 -0
  264. package/skills/void/docs/reference/api.md +56 -1218
  265. package/skills/void/docs/reference/cli/auth.md +89 -0
  266. package/skills/void/docs/reference/cli/database.md +128 -0
  267. package/skills/void/docs/reference/cli/deploy.md +105 -0
  268. package/skills/void/docs/reference/cli/domains.md +41 -0
  269. package/skills/void/docs/reference/cli/email.md +129 -0
  270. package/skills/void/docs/reference/cli/generate.md +116 -0
  271. package/skills/void/docs/reference/cli/github.md +189 -0
  272. package/skills/void/docs/reference/cli/platform-config.md +92 -0
  273. package/skills/void/docs/reference/cli/platform-email.md +81 -0
  274. package/skills/void/docs/reference/cli/platform-installation.md +142 -0
  275. package/skills/void/docs/reference/cli/platform-operations.md +90 -0
  276. package/skills/void/docs/reference/cli/platform-users.md +89 -0
  277. package/skills/void/docs/reference/cli/platform-zero-trust.md +59 -0
  278. package/skills/void/docs/reference/cli/platform.md +70 -0
  279. package/skills/void/docs/reference/cli/project.md +214 -0
  280. package/skills/void/docs/reference/cli/secrets.md +76 -0
  281. package/skills/void/docs/reference/cli/setup.md +70 -0
  282. package/skills/void/docs/reference/cli.md +32 -1682
  283. package/skills/void/docs/reference/config.md +12 -18
  284. package/skills/void/docs/reference/resource-inference.md +3 -58
  285. package/skills/void/docs/reference/structure.md +14 -41
  286. package/dist/auth-CZuiVsFh.mjs +0 -2
  287. package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
  288. package/dist/client-Czz8o5jP.mjs +0 -2
  289. package/dist/dist-BuDuKZJv.mjs +0 -2
  290. package/dist/dist-CTBk70IR.mjs +0 -1310
  291. package/dist/gen-CNJ62MM7.mjs +0 -2
  292. package/dist/help-CmZzxUba.mjs +0 -2
  293. package/dist/log-ChfPKsVd.mjs +0 -26
  294. package/dist/login-CGcRKEoi.mjs +0 -2
  295. package/dist/migrate-CYfbKkXh.mjs +0 -2
  296. package/dist/plan-BEZ8VJW0.mjs +0 -256
  297. package/dist/plan-DpuOr14e.mjs +0 -2
  298. package/dist/prepare-Bm3iq-u4.mjs +0 -2
  299. package/dist/project-BuUwfj6f.mjs +0 -2
  300. package/dist/validate-EKmJWxmy.mjs +0 -2
  301. /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
@@ -51,6 +51,30 @@ Following waits for the final logs before stopping, including diagnostics writte
51
51
 
52
52
  ## Checking the Platform
53
53
 
54
+ ### Migrating older deployment assets
55
+
56
+ After upgrading the platform, inspect every page of its asset inventory:
57
+
58
+ ```sh
59
+ void platform system asset-migrations --page 1 --limit 100
60
+ void platform deployment migrate-assets <deployment-id> --plan
61
+ void platform deployment migrate-assets <deployment-id> --yes
62
+ ```
63
+
64
+ Migrate every deployment with a nonzero `needsMigration` count, including retained
65
+ rollback targets and stored Worker bundles. Investigate entries marked `invalid`
66
+ before continuing. The command verifies each copied asset, preserves originals,
67
+ and applies successive batches. If interrupted, inspect the result and resume
68
+ with the last successful `nextCursor` using `--cursor`; restarting without a
69
+ cursor also verifies and reuses completed copies.
70
+
71
+ Run the inventory again across all pages when finished. Existing applications
72
+ continue serving during this migration, and the provider asset mirror remains.
73
+ Legacy reads remain available while older platform runtimes and cached manifests
74
+ can still reference original assets.
75
+
76
+ ### Health checks
77
+
54
78
  Use the overview to see recent activity, or run a health check to test the platform's services and database:
55
79
 
56
80
  ```sh
@@ -60,7 +84,7 @@ void platform system health
60
84
 
61
85
  Health checks use the services configured for the selected platform. An unhealthy result exits with a nonzero status, so the same command can be used in a script.
62
86
 
63
- The browser dashboard's **System Status** checks refresh every 30 seconds. Failed checks show an HTTP status or connection error beside the service name. If the dashboard cannot refresh the checks, it reports that status is unavailable instead of displaying stale results.
87
+ The dashboard’s **System Status** page refreshes health checks every 30 seconds and shows errors beside the affected service.
64
88
 
65
89
  Use `void platform upgrade`, `repair`, `disable`, and `enable` to maintain your platform. See [platform maintenance](/guide/platform/installation/maintenance#resume-repair-recover-and-upgrade).
66
90
 
@@ -92,6 +116,4 @@ unset VOID_OPERATOR_TOKEN
92
116
 
93
117
  Disable shell tracing for the exchange and do not write either token to logs or plaintext files. A full API login session expires after 30 days and can be revoked sooner; renew it through the normal authenticated login flow and update the protected CI secret. A job that runs longer than one hour must repeat the exchange while its full API session is still valid. An expired operator token cannot refresh itself, and Void does not issue permanent service tokens for administrator automation.
94
118
 
95
- `auth login --token-stdin` performs the same elevation and saves the one-hour operator token in the system keychain for interactive use. See [operator authentication](/reference/cli#operator-authentication) for the full command syntax.
96
-
97
- An email zone has one connection and ingress Worker shared by its exact domain assignments. Removing one assignment preserves resources used by the others. The Email administration page can explicitly rotate that connection secret; ordinary synchronization does not rotate it. Setup and cleanup outcomes include operation IDs, and uncertain provider writes remain recorded until reconciled.
119
+ `auth login --token-stdin` performs the same elevation and saves the one-hour operator token in the system keychain for interactive use. See [operator authentication](../../../reference/cli/platform.md#operator-authentication) for the full command syntax.
@@ -0,0 +1,126 @@
1
+ ---
2
+ outline: deep
3
+ ---
4
+
5
+ # Plans and Limits
6
+
7
+ Plans define the resource limits you assign to accounts on your platform. They do not bill users or purchase Cloudflare services. Sign in with an administrator account and open **Plans** in the administration dashboard, or use the CLI:
8
+
9
+ ```sh
10
+ void platform auth login
11
+ void platform config plans
12
+ ```
13
+
14
+ Choose a plan to inspect or edit it, copy one into a new plan, or choose the default for new accounts. Existing installations keep their plans, limits, and default until you change them. After upgrading the platform to support plan configuration, these changes require no app or platform redeploy.
15
+
16
+ Inspection and previews are available immediately after a platform upgrade. Allow 15 minutes before applying changes.
17
+
18
+ ## Use the Dashboard
19
+
20
+ Open **Plans** to see each plan's stable ID, account count, and signup default. Choose **Add plan** to copy an existing plan, or **Edit** to change its display name, limits, build size, and permission to use short project slugs.
21
+
22
+ Choose **Review changes** to compare the current and proposed settings and see how many accounts are affected. Review any quota warnings, then choose **Apply changes**. If someone changed the catalog while you were reviewing, open the plan again and create a fresh review.
23
+
24
+ The edit page also lets you choose the signup default, archive or restore assignments, reset a built-in plan, or remove a plan with an active replacement. Every action has a review step.
25
+
26
+ Account updates continue automatically on the result page. If you leave the page or an update pauses, open **Plans** and choose **Continue account updates**. Finish pending account updates before changing plans again. Recorded usage and billing periods are preserved.
27
+
28
+ ## Add a Plan
29
+
30
+ Each plan has a stable ID and an editable display name. Copying a plan copies its limits, build instance size, and permission to use short project slugs:
31
+
32
+ ```sh
33
+ void platform config plans add team --copy pro --name "Team" --plan
34
+ void platform config plans add team --copy pro --name "Team" --yes
35
+ ```
36
+
37
+ Assign it to an existing account or make it the default for new accounts:
38
+
39
+ ```sh
40
+ void platform user plan <user-id> team --yes
41
+ void platform config plans default team --yes
42
+ ```
43
+
44
+ Changing the default does not move existing accounts. Renaming a plan does not change its ID or assignments.
45
+
46
+ ## Edit Limits
47
+
48
+ The interactive menu lets you change one limit at a time. For scripts or several changes, create a JSON file:
49
+
50
+ ```json
51
+ {
52
+ "name": "Team",
53
+ "limits": {
54
+ "requestsPerMonth": 10000000,
55
+ "concurrentBuilds": 3,
56
+ "buildTimeoutMinutes": 15
57
+ },
58
+ "buildInstanceType": "standard-4"
59
+ }
60
+ ```
61
+
62
+ Omitted settings keep their current values. Preview, then apply:
63
+
64
+ ```sh
65
+ void platform config plans set team --file team-plan.json --plan
66
+ void platform config plans set team --file team-plan.json --yes
67
+ ```
68
+
69
+ Limits are nonnegative whole numbers; `0` means unlimited by the plan. Build timeouts always have a platform maximum of 60 minutes; `0` uses that maximum. You can configure:
70
+
71
+ | Setting | Limit |
72
+ | ------------------------------- | ------------------------------------------------- |
73
+ | `requestsPerMonth` | Application requests per account billing month |
74
+ | `cpuMsPerRequest` | Default CPU milliseconds per application request |
75
+ | `maxCpuMsPerRequest` | Highest CPU limit an application can request |
76
+ | `subRequestsPerInvocation` | Subrequests per invocation |
77
+ | `deploysPerDay` | Deployments per day |
78
+ | `aiNeuronsPerMonth` | AI neurons per account billing month |
79
+ | `retainedDeployments` | Retained Worker deployments |
80
+ | `sandboxRuntimeSecondsPerMonth` | Sandbox runtime seconds per account billing month |
81
+ | `sandboxMaxConcurrentInstances` | Simultaneous Sandbox instances |
82
+ | `concurrentBuilds` | Simultaneous builds |
83
+ | `buildTimeoutMinutes` | Build timeout in minutes |
84
+
85
+ `cpuMsPerRequest` cannot exceed `maxCpuMsPerRequest`. An unlimited default CPU limit requires an unlimited ceiling. Build instance sizes are `standard-3` (2 vCPU, 8 GiB) and `standard-4` (4 vCPU, 12 GiB). New builds use the new size and timeout; running builds keep their recorded settings.
86
+
87
+ Advanced files can also set `"allowShortSlugs": true` to permit project slugs of five characters or fewer, or `false` to require longer slugs for future changes. Existing project URLs are preserved. Copying a plan inherits this setting; the built-in `free` plan disables it and the other built-in plans enable it.
88
+
89
+ Storage figures shown for D1, R2, and KV are informational and cannot be edited as enforced quotas. Static deployments keep their existing retention policy.
90
+
91
+ The preview shows the affected account count and checks a sample for accounts already above a proposed quota. Lowering a quota can restrict existing apps, including accounts outside that sample. Usage history and billing periods are preserved, so a plan change does not reset usage. Manual administrator suspensions remain in effect.
92
+
93
+ After the initial platform upgrade, request quota accounting includes unlimited plans too. For an account that was unlimited before that upgrade, its quota counter may not include earlier requests in the current billing period. Historical analytics remain available. When introducing its first cap, allow for the remaining period or wait until its next billing period.
94
+
95
+ ## Archive or Remove a Plan
96
+
97
+ Archive a plan to stop assigning it to new accounts while preserving its current accounts:
98
+
99
+ ```sh
100
+ void platform config plans archive team --yes
101
+ void platform config plans restore team --yes
102
+ ```
103
+
104
+ Choose another default before archiving the current default. To remove a plan with accounts, choose a replacement and review the changes first:
105
+
106
+ ```sh
107
+ void platform config plans remove team --replacement pro --plan
108
+ void platform config plans remove team --replacement pro --yes
109
+ ```
110
+
111
+ Removing the default also requires a replacement. An unused plan that is not the default can be removed without one. Accounts keep their usage when moved to a replacement plan. Restore the original limits and build size of a built-in plan with `void platform config plans reset <plan-id>`; custom plans have no built-in reset values.
112
+
113
+ The removal review shows the replacement plan and any changes to its limits, build size, and short-slug permission before you confirm.
114
+
115
+ ## Complete Pending Updates
116
+
117
+ After applying a change, the CLI continues account updates until complete. If an update fails or stops making progress, the configuration remains saved, the result reports pending work, and the command exits with a nonzero status. Inspect the catalog, then continue:
118
+
119
+ ```sh
120
+ void platform config plans show
121
+ void platform config plans sync --yes
122
+ ```
123
+
124
+ `sync` continues the saved policy's account updates until completion. Finish pending updates before editing the catalog again. If a request loses its connection, inspect the catalog and [operator events](/guide/platform/administration/operations) before retrying it.
125
+
126
+ All commands accept `--connection <registered-id-or-url>` and `--json`. Scripted changes require `--yes`; use `--plan` for a read-only preview.
@@ -21,7 +21,7 @@ void platform project list --user <user-id>
21
21
  void platform project show <project-id>
22
22
  ```
23
23
 
24
- Project details include resources, domains, and recent builds and deployments. The [command reference](/reference/cli#operator-commands) also covers suspending and restoring users, deleting projects, and removing accounts.
24
+ Project details include resources, domains, and recent builds and deployments. The [command reference](../../../reference/cli/platform.md#operator-commands) also covers suspending and restoring users, deleting projects, and removing accounts.
25
25
 
26
26
  In the admin dashboard, open a project to view its team. Search for a platform user and choose a role to add them immediately; an email address is not required. You can also change or remove existing members. Pending invitations created through other project workflows remain visible until accepted or revoked. If email is unavailable for a pending invitation, share its ID so the user can accept it with `void project team accept <invitation-id>`. The owner cannot be removed from the team; transfer ownership first.
27
27
 
@@ -38,13 +38,16 @@ The preview shows both owners, their plans and suspension state, blockers, and t
38
38
 
39
39
  After the transfer, the former owner becomes a project administrator. Existing project-scoped CI deploy credentials are revoked; create replacements as the new owner. The new owner's plan and limits apply immediately. Usage before the transfer remains charged to the former owner; later usage is charged to the new owner. If an apply reports partial convergence, inspect the project and operator event log before repeating it.
40
40
 
41
- New users on a self-hosted installation start with the `custom` profile, which
41
+ By default, new users on a self-hosted installation start with the `custom` profile, which
42
42
  does not cap application requests, AI usage, deployment frequency, or retained
43
43
  Worker deployments. Named profiles such as `pro` apply the platform's quota and
44
44
  retention policies; they do not purchase Cloudflare services or bill your users.
45
45
  Storage figures are not a hard storage-quota boundary. Set an operating budget
46
46
  and retention policy before opening signup beyond your invited team.
47
47
 
48
+ Use [Plans and Limits](/guide/platform/administration/plans) to define your own
49
+ plans, change limits, or choose a different default for new accounts.
50
+
48
51
  The last active administrator cannot be deleted or suspended, including through
49
52
  the browser admin UI. Another administrator must still have access. Automatic
50
53
  usage limits do not remove administrator access and do not count as a manual
@@ -8,7 +8,16 @@ Project Zero Trust puts Cloudflare Access in front of the hostnames of projects
8
8
 
9
9
  This is separate from the Access login and protection for the platform API. Projects deployed directly to Cloudflare are not affected.
10
10
 
11
- The steps below set it up. [How Protection Works](#how-protection-works) explains what visitors see, which Access applications Void creates, and what happens while settings change.
11
+ New installations choose app access during `void platform install`. The installer
12
+ reuses the platform policy or helps you select separate company rules, and finishes
13
+ setup before opening traffic. Existing installations keep their settings when
14
+ upgraded; use this page to configure app access if it has not been set up yet.
15
+
16
+ If you choose public apps in an account with Default-Deny, Void manages scoped
17
+ public rules instead. New projects and custom domains remain public automatically.
18
+ Keep these rules enabled while Default-Deny is on; removing them can block traffic.
19
+ Public-only installations need no identity providers or company policies until you
20
+ choose to protect apps. To renew their token in Admin, leave the policy fields blank.
12
21
 
13
22
  ## Requirements
14
23
 
@@ -71,26 +80,11 @@ void platform zero-trust disable
71
80
 
72
81
  This removes the Access applications Void created and makes all projects public. On large installations it runs in steps; run it again, or check `void platform zero-trust status`, until Zero Trust shows as disabled with no operation running.
73
82
 
74
- Uninstalling the platform does not remove these applications. `void platform uninstall` refuses to start while Zero Trust is enabled, a change is still running, or some Void-managed Access applications are left. Its error lists their names. Disable Zero Trust first, then uninstall. Once the uninstall starts turning the platform off, Zero Trust changes and deployments are refused. If it stops after that point, run it again, or bring the platform back with `void platform enable` or `void platform repair`. If a project's applications could not be removed, Void retries every hour while the platform is enabled. If the error says a project deletion stopped partway, run `void project delete` for that project again to remove them.
83
+ Disable Zero Trust and wait for its applications to be removed before [uninstalling the platform](/guide/platform/installation/uninstall). If project deletion stopped partway, retry `void project delete` for that project.
75
84
 
76
85
  ## How Protection Works
77
86
 
78
- Every request to a protected project passes two checks before your code runs:
79
-
80
- ```text
81
- Visitor
82
- │
83
- ▼
84
- Cloudflare Access ─── not signed in ─────────▶ sign-in page
85
- │ signed in and allowed by your policies
86
- ▼
87
- Void checks the Access token ─── rejected ───▶ 403 page
88
- │ token is valid for this hostname
89
- ▼
90
- Your project: routes, pages, assets, WebSockets
91
- ```
92
-
93
- A public project skips both. Access lets every visitor through, and Void does not look for a token.
87
+ Cloudflare Access handles sign-in and applies your policies. Void also verifies the token before serving a protected project. Public projects allow visitors without sign-in.
94
88
 
95
89
  ### What Visitors See
96
90
 
@@ -108,7 +102,7 @@ Void only covers the `workers.dev` testing URLs of this installation. Other Work
108
102
 
109
103
  #### The 403 Page
110
104
 
111
- Void answers `403 Cloudflare Access authentication required` when a request reaches a protected project without a valid Access token for it. Page requests get a short HTML error page. Requests under `/api`, requests for files, requests that are not `GET` or `HEAD`, and requests that do not accept HTML get the same message as plain text. The response is never cached.
105
+ A request without a valid token receives `403 Cloudflare Access authentication required`. Page requests show an HTML error; API and asset requests receive plain text. These responses are never cached.
112
106
 
113
107
  Visitors who went through the sign-in page normally never see it. They can see it:
114
108
 
@@ -122,193 +116,88 @@ Protection applies to the whole hostname. There are no path exceptions. `/api/*`
122
116
 
123
117
  #### Webhooks and Other Non-Browser Clients
124
118
 
125
- Void only accepts policies that match people by identity. It rejects Bypass and Service Auth policies, and rules that allow Everyone or any service token. So a machine cannot pass on its own. Payment and Git webhooks, CI jobs, uptime checks, and plain `curl` calls get the sign-in page or the 403 response.
119
+ Project protection requires a person’s identity. Webhooks, CI jobs, uptime checks, and unauthenticated `curl` calls receive the sign-in page or a 403.
126
120
 
127
121
  If a project must accept such requests:
128
122
 
129
123
  - make the project public with `void project zero-trust public` and check callers in your own code, or
130
124
  - move the endpoints that machines call into a separate project, and make only that project public.
131
125
 
132
- ### Two Checks on Every Request
133
-
134
- Cloudflare Access is the first check. It runs at Cloudflare's edge, shows the sign-in page, and applies your policies. Only visitors your policies allow get an Access token for the project.
135
-
136
- Void is the second check. Before a protected project runs, Void confirms that the request carries an Access token that:
137
-
138
- - was issued by your Zero Trust team;
139
- - belongs to one of the Access applications Void created for this project's hostname;
140
- - has not expired.
141
-
142
- If any of this fails, the visitor gets the [403 page](#the-403-page). Your routes, assets, and caches are never reached.
143
-
144
- This gives you one guarantee: **deleting a Void-managed Access application, or changing its hostnames, cannot make a protected project public.** If someone deletes Void's application, or points it at other hostnames, visitors are refused instead of let in. Loosening the policies of Void's application in the dashboard does widen who can sign in, until the next update puts Void's policies back.
145
-
146
- The second check does not look at your policies again. Who may sign in is decided only by the policies in Cloudflare Access. If you loosen a selected policy, the change applies to every protected project.
147
-
148
126
  ### Access Applications Void Creates
149
127
 
150
128
  Void creates and owns these self-hosted applications in your Zero Trust organization:
151
129
 
152
- | Application | Covers | Policy | Exists |
153
- | -------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------ |
154
- | Shared project application | `*.<your domain>` and this installation's `workers.dev` testing URLs | Your selected policies and identity providers | Once, while Zero Trust is enabled |
155
- | Public exception | One public project's `<slug>.<your domain>` and `workers.dev` testing URL | A Bypass policy for Everyone, named `Void project is public` | One for each public project |
156
- | Custom domain application | All custom domains of one protected project | Your selected policies and identity providers | One for each protected project that has custom domains |
157
- | Health check exception | `void-platform-health.<your domain>/health` | A Bypass policy for Everyone, named `Void platform health check` | Once, while Zero Trust is enabled on an installation with a domain |
130
+ | Application | Covers | Policy | Exists |
131
+ | --------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------ |
132
+ | Shared project application | `*.<your domain>` and this installation's `workers.dev` testing URLs | Your selected policies and identity providers | Once for protected-app configurations |
133
+ | Public app management check | A reserved, unused dispatch check path | Deny Everyone; verifies management permissions without opening hostnames | Once, instead of the shared wildcard in public-only mode |
134
+ | Public exception | One public project's `<slug>.<your domain>` and `workers.dev` testing URL | A Bypass policy for Everyone, named `Void project is public` | One for each public project |
135
+ | Custom domain application | All managed custom domains of one project | Company policies for protected projects; Bypass for public ones | One for each project with managed custom domains |
136
+ | Health check exception | `void-platform-health.<your domain>/health` | A Bypass policy for Everyone, named `Void platform health check` | Once, while Zero Trust is enabled on an installation with a domain |
137
+
138
+ Installations configured through the installer also manage public custom-domain
139
+ rules. Their custom-domain application changes policy when a project switches
140
+ between public and protected access.
158
141
 
159
- Custom domains of a public project need no Access application.
142
+ If the installer already configured the same health-check exception, Zero Trust
143
+ reuses it. Disabling project Zero Trust leaves that existing exception in place
144
+ so platform health checks continue to work.
160
145
 
161
146
  The number of applications Void needs is:
162
147
 
163
148
  ```text
164
- 2 + public projects + protected projects that have custom domains
149
+ 1 + health-check applications + public projects + projects with managed custom domains
165
150
  ```
166
151
 
167
- Use 1 instead of 2 on an installation without a domain. For example, 40 projects with 10 public and 5 protected projects that have custom domains need 2 + 10 + 5 = 17 applications. Void stops with an error when the account has more than 500 Access applications.
152
+ The first application is the shared company policy or the public-app management check. Count a health exception once, including when it is shared with the installer. For example, 40 projects with one health exception, 10 public projects, and 5 projects with managed custom domains need 1 + 1 + 10 + 5 = 17 applications. Void stops with an error when the account has more than 500 Access applications.
168
153
 
169
154
  #### Recognizing Void's Applications
170
155
 
171
- Void adds no tags. Its application names follow this pattern:
172
-
173
- ```text
174
- void-<installation>-<code>-<random>-project-zero-trust shared project application
175
- void-<installation>-<code>-<random>-public-<project-id> public exception
176
- void-<installation>-<code>-<random>-protected-<project-id> custom domain application
177
- void-<installation>-<code>-<random>-platform-health health check exception
178
- ```
179
-
180
- - `<installation>` is the start of your installation ID, which begins with your installation name.
181
- - `<code>` is 16 characters. It is the same for every application of one installation.
182
- - `<random>` is 32 random characters.
183
- - `<project-id>` is the project ID, such as `proj_abc123def456`. The project slug is not part of the name.
184
-
185
- To see the exact names Void recorded, run `void platform zero-trust status` for the shared application and the health check exception, and `void platform zero-trust project-status <project-id>` for a project's applications. There, the public exception is listed as `bypass application name` and the custom domain application as `protected application name`.
156
+ Run `void platform zero-trust status` for the shared and health-check applications, or `void platform zero-trust project-status <project-id>` for a project's applications. These commands show their exact names and IDs.
186
157
 
187
158
  ### Editing Applications in the Dashboard
188
159
 
189
- Do not edit, rename, or delete Void's applications in the Cloudflare dashboard. Change the identity providers and policies with `void platform zero-trust configure` instead. See [Enable Zero Trust](#enable-zero-trust).
190
-
191
- You can still edit the rules inside a selected reusable policy. Void's applications use your policies as they are. Void checks them again during `void platform zero-trust configure` and `void platform zero-trust reconcile`, which stop with an error, and during `status --check`, which reports `present: false`. A policy fails this check when it now allows Everyone or any service token, or uses a Bypass or Service Auth decision.
192
-
193
- #### What Happens If You Do
160
+ Manage Void’s applications through `void platform zero-trust configure` and the project commands. Editing or deleting them in Cloudflare can block access until you reconcile. Dashboard edits may be replaced the next time Void updates an application.
194
161
 
195
- Void writes an application when it updates it: during platform `configure` or `reconcile`, during a project's `protect`, `public`, or `reconcile`, when a custom domain is added to or removed from that project, and while it retries a project that is not settled. Scheduled maintenance does not look for dashboard changes on settled projects. Until one of these runs, your change stays in effect.
196
-
197
- | Change in the dashboard | Effect | Repair |
198
- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
199
- | Edit hostnames, policies, providers, or session length | Your change stays until the next update, which puts Void's settings back. | Run the reconcile command for that application |
200
- | Delete the shared project application | Protected projects answer 403 on `<slug>.<your domain>` and `workers.dev` URLs. Their custom domains and public projects keep working. | `void platform zero-trust reconcile` |
201
- | Delete a public exception | Visitors of that public project are asked to sign in, because the shared application now covers it. | `void project zero-trust reconcile` in that project |
202
- | Delete a custom domain application | That protected project answers 403 on its custom domains. | `void project zero-trust reconcile` in that project |
203
- | Delete the health check exception | Platform health checks fail with a redirect to sign-in, so the admin dashboard shows `dispatch` as unhealthy and `void platform upgrade` and `repair` stop at their health check. | `void platform zero-trust reconcile` |
204
- | Rename an application | Void stops updating or deleting it. Reconcile fails with `The recorded Access application no longer has its Void-owned name.` For the shared application, platform status then shows `error`. | Rename it back to the recorded name, then reconcile |
205
- | Copy an application with the same name | Void ignores the copy while the original exists, and `disable` does not remove it. If the original is later deleted, reconcile fails with `Multiple Cloudflare Access applications are named <name>.` | Delete the copy, then reconcile |
206
-
207
- When Void recreates a deleted shared project application, the new application issues different Access tokens. Void then moves each protected project to it. On large installations this runs in steps, and protected projects answer 403 until Void reaches them.
208
-
209
- #### Checking for Changes
162
+ You can edit a selected reusable policy’s rules in Cloudflare. Changes affect every project using that policy. Keep an identity-based Allow policy without Everyone or service tokens, then check it with:
210
163
 
211
164
  ```sh
212
165
  void platform zero-trust status --check
213
166
  ```
214
167
 
215
- This compares the shared project application and the health check exception with the saved settings, and checks your selected identity providers and policies again. The output includes:
216
-
217
- ```text
218
- checked: true
219
- live:
220
- present: true
221
- drifted: false
222
- ```
223
-
224
- - `drifted: true` means the shared application or the health check exception no longer matches. Run `void platform zero-trust reconcile`.
225
- - `present: false` means Void could not read it. The application may be deleted, a selected identity provider or policy may be gone or no longer allowed, or the token may not work. Check the token and selections, then run `void platform zero-trust reconcile`.
168
+ - `drifted: true`: run `void platform zero-trust reconcile`.
169
+ - `present: false`: check the token, application, identity providers, and policies, then reconcile.
226
170
 
227
- `--check` only reads. It changes nothing. It does not check public exceptions or custom domain applications. If you think one was changed, run a reconcile command.
171
+ This checks the shared and health-check applications. For a public exception or custom-domain application, use the project's reconcile command.
228
172
 
229
173
  #### Repair Commands
230
174
 
231
- | Command | Rewrites | Who can run it |
232
- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------- |
233
- | `void platform zero-trust reconcile` | The shared project application, the health check exception, and every project's applications | Installation administrators |
234
- | `void platform zero-trust project-reconcile <project-id>` | One project's applications | Installation administrators |
235
- | `void project zero-trust reconcile` | The linked project's applications, or pass `--project <slug>` | The project owner and project administrators |
236
-
237
- The two project commands work only when platform status is `ready`. While a platform change runs, or after it fails, run `void platform zero-trust reconcile` first.
238
-
239
- ### What Happens During Changes
240
-
241
- Void orders every change so that a protected project never becomes public by mistake. If a step fails, the project keeps its protection, or refuses visitors with the 403 page, until the change can finish.
242
-
243
- Void's router can keep a project's previous setting for up to about a minute. During that time, some visitors may see the 403 page instead of the sign-in page.
244
-
245
- #### Protecting or Making a Project Public
246
-
247
- `void project zero-trust protect` and `void project zero-trust public` usually finish before the command returns.
248
-
249
- - **Protect.** Void covers the custom domains first, then turns on its own check, then removes the public exception. Visitors may see the 403 page for a moment before Access starts asking them to sign in.
250
- - **Public.** Void adds the public exception first, then turns off its own check, then removes the custom domain application. Visitors may see the 403 page for a moment before the project opens.
251
-
252
- If the command prints `Zero Trust update is still in progress`, run `void project zero-trust reconcile` to continue, or wait for the hourly maintenance. If it fails with `Cloudflare Access could not be updated. Protection remains fail closed.`, fix the cause, then run `void project zero-trust reconcile`. Until then, a project that was protected stays protected. A project you were protecting may already ask for sign-in, or answer with the 403 page, but it is never more open than before. A project you were making public may already be open on some hostnames.
253
-
254
- Run `void project zero-trust status` to follow a change. `State:` shows `reconciling` while it runs, `error` when it needs attention, and `protected` or `public` when it is done. `Last error:` explains a failure.
255
-
256
- #### Enabling and Disabling Zero Trust
257
-
258
- Large changes run in steps. Platform status shows `configuring` or `disabling`, and project owners see `Available: no`. Scheduled maintenance continues within a few minutes.
175
+ | Command | Scope | Who can run it |
176
+ | --------------------------------------------------------- | ------------------------------------- | ---------------------------------------- |
177
+ | `void platform zero-trust reconcile` | Platform and all projects | Installation administrators |
178
+ | `void platform zero-trust project-reconcile <project-id>` | One project | Installation administrators |
179
+ | `void project zero-trust reconcile` | Linked project, or `--project <slug>` | Project owner and project administrators |
259
180
 
260
- When you **enable** Zero Trust:
181
+ Project reconciliation requires platform status `ready`. Otherwise, reconcile the platform first.
261
182
 
262
- 1. Void adds the public exception for each project that stays public. These projects never ask visitors to sign in.
263
- 2. Void creates the health check exception, then the shared project application. From here, the `<slug>.<your domain>` and `workers.dev` URLs of protected projects require sign-in.
264
- 3. Void goes through the protected projects and covers their custom domains. A project's custom domains stay open until Void reaches it.
183
+ If an application was renamed, restore its recorded name before reconciling. Remove duplicate copies yourself. Deleting the shared application temporarily blocks protected projects; deleting the health-check exception can block upgrades and repair until it is restored.
265
184
 
266
- If Void cannot add a project's public exception, the project shows `error`, and its visitors are asked to sign in until the next retry succeeds. Void retries every hour, or run `void project zero-trust reconcile` once platform status is `ready`.
267
-
268
- When you **disable** Zero Trust:
269
-
270
- 1. Void turns off its own check for each protected project and removes its custom domain application. Custom domains open here.
271
- 2. Void deletes the shared project application, then the health check exception. `<slug>.<your domain>` and `workers.dev` URLs open here.
272
- 3. Void deletes the public exceptions. Public projects stay open the whole time.
273
-
274
- #### Custom Domains
275
-
276
- A custom domain on a protected project goes live only after Void adds it to the project's custom domain application. If Access cannot be updated, the domain stays pending and is not reachable. Void tries again each time it checks the domain.
277
-
278
- When you remove a custom domain, Void removes it from the project first, then from the Access application. If the Access update fails, the project shows `reconciling` or `error` and Void retries every hour. A protected project can have up to 100 custom domains. Custom domains on public projects need no Access change.
279
-
280
- #### New Projects
281
-
282
- A new project starts protected or public based on the default for new projects. If Void cannot set up its protection, creating the project still succeeds with a warning. See [Recovery](#recovery).
283
-
284
- #### Deploys and Rollbacks
185
+ ### What Happens During Changes
285
186
 
286
- Deploys and rollbacks wait while a project's protection is not settled, so a deploy cannot publish a project before its protection is in place. They are refused with `Zero Trust protection for this project is not ready`, followed by the reason:
187
+ Protection changes can temporarily return a 403. If a step fails, a protected project stays protected or refuses visitors until the change finishes.
287
188
 
288
- - `Project Zero Trust is still being initialized.`
289
- - `The project public exception is still reconciling.`
290
- - `Project Zero Trust is still reconciling.`
189
+ Protecting or making a project public usually finishes before the command returns. If it is still running or reports an error, inspect `void project zero-trust status`, fix the reported cause, and run `void project zero-trust reconcile`.
291
190
 
292
- If the saved platform configuration is invalid, they are refused with `The platform Zero Trust configuration is invalid.` instead. Ask a platform administrator to repair it.
191
+ Platform-wide changes run in steps. During initial setup, custom domains stay public until Void reaches their project. During disable, hostnames can become public at different times. Follow progress with `void platform zero-trust status`.
293
192
 
294
- A project that is already protected can still deploy during a platform-wide change. While it is being made public, deploys wait until that finishes. See [Project Overrides](#project-overrides) for what to do when a deploy is refused.
193
+ A new custom domain becomes reachable only after its project’s protection is ready.
295
194
 
296
195
  ### Caching
297
196
 
298
- Responses for signed-in visitors are never shared between visitors. Void skips its shared caches for every request that carries an Access token: [ISR](/guide/edge/revalidation#cache-bypass) and the [static asset edge cache](/guide/edge/static-assets#non-hashed-assets). Each visitor gets a response made for their request.
299
-
300
- On a protected project, this means:
301
-
302
- - pages render on every request, and ISR never serves a cached page;
303
- - static files and hashed assets skip the edge cache;
304
- - the project handles more requests and may respond more slowly than a public project.
305
-
306
- Public projects keep using the shared caches as usual.
197
+ Requests carrying an Access token bypass [ISR](/guide/edge/revalidation#cache-bypass) and the [static asset edge cache](/guide/edge/static-assets#non-hashed-assets). Protected pages render on each request, which can increase latency and request usage. Public projects keep their shared caches.
307
198
 
308
199
  ## Recovery
309
200
 
310
- A project never becomes public by mistake while a change is in progress. See [What Happens During Changes](#what-happens-during-changes).
311
-
312
201
  - **Status stays `configuring` or `disabling`.** Large changes run in steps. Scheduled maintenance continues them within a few minutes, or run `void platform zero-trust reconcile`.
313
202
  - **Status shows an error.** Fix the cause shown, such as token permissions or the application limit, then run `void platform zero-trust reconcile`. Otherwise Void retries every hour.
314
203
  - **One project shows an error.** The rest of the change still finishes. Void retries the project every hour, or its owner or a project administrator can run `void project zero-trust reconcile`. Until then, a project that was already protected stays protected, and a project being newly protected is never more open than before.
@@ -52,12 +52,7 @@ If your fork has added managed GitHub builds and Cloudflare Access protects its
52
52
  to `/webhooks/github`: GitHub does not present your Access credentials. Do not add
53
53
  an Everyone or bypass policy to the API application.
54
54
 
55
- The API source package includes an optional, path-isolated Worker for this case.
56
- It accepts only `POST /github`, validates GitHub's signature over the raw body,
57
- and forwards one authenticated internal operation over an API service binding.
58
- The API independently verifies both that internal proof and GitHub's signature
59
- before running the normal webhook handler. Installations without perimeter
60
- protection can continue using the API's direct `/webhooks/github` endpoint.
55
+ Deploy the optional webhook ingress at a separate public hostname. It accepts signed GitHub deliveries at `POST /github` and forwards them to your API through a service binding. Without Access protection, use the API’s `/webhooks/github` endpoint directly.
61
56
 
62
57
  To deploy the optional ingress:
63
58
 
@@ -87,18 +82,13 @@ To deploy the optional ingress:
87
82
  ingress URL ending in `/github`. Use GitHub's test delivery and confirm a 2xx
88
83
  response before relying on push builds.
89
84
 
90
- The ingress has no login, dashboard, project, operator, proxy, or arbitrary
91
- forwarding route. It does not make the GitHub integration part of the core
92
- installer, provision build executors, create a GitHub App, configure Cloudflare
93
- Access, or manage either Worker's secrets. Its body limit is 25 MiB, based on
94
- GitHub's [documented 25 MB webhook payload cap](https://docs.github.com/en/webhooks/webhook-events-and-payloads#payload-cap);
95
- malformed or larger deliveries are rejected before event processing.
85
+ The ingress accepts payloads up to 25 MiB. See [GitHub’s payload limit](https://docs.github.com/en/webhooks/webhook-events-and-payloads#payload-cap).
96
86
 
97
87
  ## Deploying Source Builds from CI
98
88
 
99
89
  Build `@void/platform` from your checkout and pass its runtime directory to `install`, `upgrade`, `repair`, `enable`, or `rollback` with `--runtime`. Custom runtimes get the same integrity, migration, health, and rollback checks as packaged releases.
100
90
 
101
- Void records the runtime's manifest digest, whether it was packaged or custom, and its source revision. A build from a Git checkout automatically records `HEAD`, or `<HEAD>-dirty` when the checkout has uncommitted files. Build systems can set `VOID_PLATFORM_SOURCE_REVISION` to override automatic detection.
91
+ Use a clean Git checkout or set `VOID_PLATFORM_SOURCE_REVISION` to identify the revision you deploy.
102
92
 
103
93
  A fresh CI runner can discover the installation each time. Set `CLOUDFLARE_API_TOKEN` and `VOID_PLATFORM_DATABASE_URL` through its protected environment, then:
104
94
 
@@ -35,61 +35,3 @@ workflows that call platform CI must grant `deployments: read` alongside
35
35
  `contents: read`.
36
36
 
37
37
  The upstream repository also contains workflows for deploying Void Cloud and publishing the official npm packages. Forks should configure their own release workflow around the built CLI and `platform upgrade --runtime`; the [source-build CI example](/guide/platform/development/runtime#deploying-source-builds-from-ci) shows the required inputs. Keep production credentials in protected environments restricted to the appropriate release refs.
38
-
39
- Public releases use matching versions for the CLI, scaffolder, adapters, and
40
- packaged platform. The publish workflow rejects mismatched versions and previously
41
- unpublished `void` versions that npm cannot reuse. Stable versions use `latest`;
42
- prereleases use their named channel, such as `beta` or `rc`. Numeric prereleases
43
- use `next`. The scaffolder installs its exact matching CLI version, so
44
- `create-void@beta` cannot silently select the stable CLI. Packaged platform
45
- runtimes record the release commit as their source revision.
46
-
47
- The npm release job uses [trusted publishing](https://docs.npmjs.com/trusted-publishers/)
48
- from GitHub-hosted runners, with `id-token: write` and no stored npm publishing
49
- token. Configure a trusted publisher for each public package using this
50
- repository, `publish.yml`, and the `Release` environment, allowing direct
51
- `npm publish`. A brand-new package
52
- needs an initial authenticated publication before its trusted publisher can be
53
- configured; subsequent releases use OIDC.
54
-
55
- The managed build fallback CLI also derives its version from
56
- `packages/void/package.json`; there are no separate version pins to update.
57
- Build its image from the repository root with
58
- `docker build --file platform/packages/api/container/Dockerfile .`.
59
- The root `.dockerignore` limits that build context to the agent, Dockerfile,
60
- and public SDK manifest.
61
-
62
- Publishing requires both SDK CI and platform CI, including the platform unit and
63
- API integration suites. Release tags also run the Windows SDK checks; a passing
64
- SDK-only build cannot publish a changed control plane.
65
-
66
- ### Retrying a Release
67
-
68
- To retry a failed release without moving an existing tag, add `+retry.N` to a
69
- new Git tag, with `N` starting at `1`. Keep the package versions unchanged:
70
-
71
- | Git tag | Package version | npm channel |
72
- | ------------------------ | --------------- | ----------- |
73
- | `v0.21.0` | `0.21.0` | `latest` |
74
- | `v0.21.0+retry.1` | `0.21.0` | `latest` |
75
- | `v0.21.0-beta.1+retry.2` | `0.21.0-beta.1` | `beta` |
76
-
77
- For example, when the packages are at `0.21.0`, commit the release fix and tag
78
- that commit:
79
-
80
- ```sh
81
- git tag -a 'v0.21.0+retry.1' -m 'Retry 0.21.0 publication.'
82
- git push origin 'refs/tags/v0.21.0+retry.1'
83
- ```
84
-
85
- The retry suffix belongs only in the Git tag, not in `package.json`. A `-1`
86
- suffix is a distinct prerelease version, not a retry. Tag and package versions
87
- are checked before dependency installation and the full CI jobs; retries still
88
- run the normal release checks.
89
-
90
- Retries publish only package versions that are still missing from npm. They
91
- cannot replace an already-published version. If an earlier attempt partially
92
- published the release and you changed its package contents, bump the version
93
- instead of combining different contents under the same version.
94
-
95
- For implementation history, use the design archive at `platform/meta/design-docs/README.md`. Its proposals explain earlier decisions; the source and current guides define the supported behavior.
@@ -49,7 +49,7 @@ void platform install \
49
49
  --yes
50
50
  ```
51
51
 
52
- Mutations require `--yes` in CI; a read-only `--plan` does not. Custom runtimes also require `--runtime <directory>`. For a new installation, run `--plan` with the same account, name, and domain options as the unattended install. If you use `--auth-config`, pass the same file to both commands. Register the printed callback when creating a login provider's OAuth or OIDC client manually; automatic Access setup manages its own application. A custom API hostname is optional.
52
+ Mutations require `--yes` in CI; a read-only `--plan` does not. Custom runtimes also require `--runtime <directory>`. For a new installation, run `--plan` with the same account, name, and domain options as the unattended install. If you use `--auth-config`, pass the same file to both commands. Register `<platform-api-url>/auth/callback` when creating a login provider's OAuth or OIDC client manually; automatic Access setup manages its own application. A custom API hostname is optional.
53
53
 
54
54
  :::
55
55