void 0.21.8 → 0.22.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 (132) hide show
  1. package/dist/{account-cmd-CQ2wi4Th.mjs → account-cmd-CjyxcGkM.mjs} +4 -4
  2. package/dist/{auth-link-B_lceSHK.mjs → auth-link-BLO4ptzo.mjs} +4 -4
  3. package/dist/{auth-router-cZq0HuWe.mjs → auth-router-ZUg9MF_U.mjs} +5 -5
  4. package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-BxR5FROK.mjs} +3 -3
  5. package/dist/{cache-7_UeZdTk.mjs → cache-D0sWhgKI.mjs} +3 -3
  6. package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-D4NUqFbi.mjs} +3 -3
  7. package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BJ6yGEIS.mjs} +139 -62
  8. package/dist/cli/cf-compat.mjs +164 -42
  9. package/dist/cli/cli.mjs +73 -44
  10. package/dist/cli/env-schema-probe.d.mts +1 -1
  11. package/dist/{client-QTl6ko_D.mjs → client-BTZ3XkrB.mjs} +25 -0
  12. package/dist/client-Czz8o5jP.mjs +2 -0
  13. package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-DQkqoMYa.mjs} +1 -6
  14. package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BKlfGHAy.mjs} +6 -7
  15. package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-Ctmrw579.mjs} +3 -3
  16. package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-B9tzgjmf.mjs} +10 -39
  17. package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-BT6OWFBk.mjs} +1 -1
  18. package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
  19. package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
  20. package/dist/{config-CF69HgXc.d.mts → config-VavjpDnp.d.mts} +1 -2
  21. package/dist/config-entry.d.mts +1 -1
  22. package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
  23. package/dist/{connect-BY38i-9E.mjs → connect-Dg-WkW-C.mjs} +5 -5
  24. package/dist/{create-project-BniEV0OW.mjs → create-project-DdoqwFLF.mjs} +1 -1
  25. package/dist/{create-project-DBfFSZKY.mjs → create-project-l9J7pbtm.mjs} +8 -4
  26. package/dist/{db-BIo37Y7H.mjs → db-gp2sCXyN.mjs} +14 -14
  27. package/dist/{delete-D6dZ9B6B.mjs → delete-TTedbH6B.mjs} +3 -3
  28. package/dist/{deploy-BM_LoBXC.mjs → deploy-B19L2Bra.mjs} +1 -1
  29. package/dist/{deploy-C0JaQSWS.mjs → deploy-CH-o2CaZ.mjs} +47 -36
  30. package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
  31. package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
  32. package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
  33. package/dist/{domain-Dmhvb2oU.mjs → domain-JRF59P_r.mjs} +4 -4
  34. package/dist/{email-dMnE_Lat.mjs → email-Bo6G9LOZ.mjs} +6 -6
  35. package/dist/{env-Csi-tMbT.mjs → env-BYOrWQnv.mjs} +4 -4
  36. package/dist/{env-public-D_6u46fX.d.mts → env-public-BxU_0yTL.d.mts} +2 -1
  37. package/dist/gen-CNJ62MM7.mjs +2 -0
  38. package/dist/{gen-Dz3X1Qab.mjs → gen-sCtlCOdA.mjs} +3 -3
  39. package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-0-7PexDq.mjs} +5 -7
  40. package/dist/{handler-BXJTXd02.d.mts → handler-HEcZsaij.d.mts} +2 -1
  41. package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
  42. package/dist/help-CmZzxUba.mjs +2 -0
  43. package/dist/{help-DC7gdz7L.mjs → help-GKtwl07I.mjs} +124 -4
  44. package/dist/index.d.mts +1 -1
  45. package/dist/index.mjs +53 -24
  46. package/dist/{init-CJSnEcuj.mjs → init-FZx3Elvz.mjs} +13 -13
  47. package/dist/{link-CsHOinF7.mjs → link-BrQfb_CU.mjs} +4 -4
  48. package/dist/{list-CDb-4bZ1.mjs → list-D44jmIAM.mjs} +4 -4
  49. package/dist/{live-CKiJilLr.d.mts → live-CKJlvlNp.d.mts} +1 -1
  50. package/dist/{local-d1-CC8sKFGu.mjs → local-d1-Bg9OzEEO.mjs} +1 -1
  51. package/dist/{login-DZldyb8c.mjs → login-CAsAsQ-_.mjs} +4 -4
  52. package/dist/login-CGcRKEoi.mjs +2 -0
  53. package/dist/{logs-BdfiOezj.mjs → logs-BjKvFnVM.mjs} +4 -4
  54. package/dist/{migrate-B8KuoYsO.mjs → migrate-BPITvDJN.mjs} +4 -4
  55. package/dist/migrate-CYfbKkXh.mjs +2 -0
  56. package/dist/{node-BM43oz4G.mjs → node-Dt7z256D.mjs} +1 -1
  57. package/dist/{operator-cmd-B9dbG3Od.mjs → operator-cmd-BK5CCiT9.mjs} +4 -4
  58. package/dist/output-Dm_A4Tbv.mjs +81 -0
  59. package/dist/pages/client.d.mts +1 -1
  60. package/dist/pages/index.d.mts +1 -1
  61. package/dist/pages/index.mjs +2 -2
  62. package/dist/pages/islands-plugin.d.mts +16 -6
  63. package/dist/pages/islands-plugin.mjs +1 -1
  64. package/dist/pages/protocol.d.mts +2 -2
  65. package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
  66. package/dist/{platform-auth-config-Bex45lQt.mjs → platform-auth-config-BlN8xTdD.mjs} +3 -3
  67. package/dist/{platform-auth-protection-Dma02l6-.mjs → platform-auth-protection-7d5aV2Jg.mjs} +3 -3
  68. package/dist/{platform-auth-recovery-COOhMCvx.mjs → platform-auth-recovery-Dxij8ZbR.mjs} +3 -3
  69. package/dist/{platform-cmd-BtxZrT6w.mjs → platform-cmd-B3hwKrFK.mjs} +5 -5
  70. package/dist/{platform-cmd-CjNB09OF.mjs → platform-cmd-E0FuL212.mjs} +1 -1
  71. package/dist/{platform-domain-DppaTARe.mjs → platform-domain-D6Xcy9ZX.mjs} +36 -9
  72. package/dist/{platform-lifecycle-CYll-oKE.mjs → platform-lifecycle-DMh_qrry.mjs} +1 -1
  73. package/dist/{platform-lifecycle-BpDlxT3t.mjs → platform-lifecycle-k0E0xoxx.mjs} +769 -59
  74. package/dist/{platform-management-BKYenDlE.mjs → platform-management-Brz_BDiT.mjs} +72 -10
  75. package/dist/{platform-management-BS5r6Ao8.mjs → platform-management-DOtss0BN.mjs} +1 -1
  76. package/dist/{platform-recovery-dJ5Me-I0.mjs → platform-recovery-BvtcXON5.mjs} +2 -2
  77. package/dist/prepare-Bm3iq-u4.mjs +2 -0
  78. package/dist/{prepare-DyZ-Yok5.mjs → prepare-C-6YZyyg.mjs} +3 -3
  79. package/dist/{prepare-C3kt3Rst.mjs → prepare-CRhJbVrG.mjs} +1 -1
  80. package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-BZLCqOqw.mjs} +29 -15
  81. package/dist/{project-team-BkbYIsXN.mjs → project-team-BvgM0WoX.mjs} +3 -3
  82. package/dist/{project-token-C8xEEQnB.mjs → project-token-l5DqK6Az.mjs} +3 -3
  83. package/dist/project-zero-trust-v6Mvpp8y.mjs +63 -0
  84. package/dist/{protocol-ZH3jP4a7.d.mts → protocol-BBa6cstI.d.mts} +1 -1
  85. package/dist/{provision-BhreDAOS.mjs → provision-C4IGqkBf.mjs} +24 -19
  86. package/dist/{provision-DNtrtaVD.mjs → provision-Fr9pRqce.mjs} +1 -1
  87. package/dist/{requests-DFyhBMaf.mjs → requests-DN-BbNiM.mjs} +3 -3
  88. package/dist/{rollback-DHHxXZiS.mjs → rollback-D7rzSaZM.mjs} +4 -4
  89. package/dist/runtime/env-public.d.mts +1 -1
  90. package/dist/runtime/handler.d.mts +1 -1
  91. package/dist/runtime/live-client.d.mts +1 -1
  92. package/dist/runtime/live.d.mts +1 -1
  93. package/dist/runtime/sandbox-container.d.mts +3 -0
  94. package/dist/runtime/sandbox-container.mjs +2 -0
  95. package/dist/runtime/sandbox.d.mts +4 -32
  96. package/dist/runtime/sandbox.mjs +118 -72
  97. package/dist/runtime/validator.d.mts +1 -1
  98. package/dist/runtime/ws-server.d.mts +1 -1
  99. package/dist/runtime/ws.d.mts +1 -1
  100. package/dist/sandbox-container-4fdqLnyb.mjs +279 -0
  101. package/dist/sandbox-container-DdNEBfCc.d.mts +72 -0
  102. package/dist/sandbox-qpNBT8a3.d.mts +49 -0
  103. package/dist/{secret-DN9sSNiV.mjs → secret-BOtOl_cb.mjs} +4 -4
  104. package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
  105. package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
  106. package/dist/{wrangler-BymcxrRa.mjs → wrangler-DQF1vKyf.mjs} +37 -27
  107. package/dist/{ws-BwcqizuH.d.mts → ws-BoY7vQML.d.mts} +1 -1
  108. package/package.json +40 -32
  109. package/sandbox.Dockerfile +4 -0
  110. package/schema.json +10 -22
  111. package/skills/void/SKILL.md +2 -0
  112. package/skills/void/docs/guide/deployment.md +1 -1
  113. package/skills/void/docs/guide/edge/revalidation.md +1 -1
  114. package/skills/void/docs/guide/edge/static-assets.md +1 -0
  115. package/skills/void/docs/guide/platform/administration/zero-trust.md +318 -0
  116. package/skills/void/docs/guide/platform/development/local.md +2 -2
  117. package/skills/void/docs/guide/platform/installation/domains.md +1 -1
  118. package/skills/void/docs/guide/platform/installation/first-deployment.md +4 -0
  119. package/skills/void/docs/guide/platform/installation/prerequisites.md +1 -1
  120. package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
  121. package/skills/void/docs/guide/platform-administration.md +1 -0
  122. package/skills/void/docs/guide/sandboxes.md +70 -41
  123. package/skills/void/docs/integrations/cloudflare.md +1 -1
  124. package/skills/void/docs/reference/api.md +35 -35
  125. package/skills/void/docs/reference/cli.md +68 -6
  126. package/skills/void/docs/reference/config.md +16 -16
  127. package/dist/client-4cDVv7BO.mjs +0 -2
  128. package/dist/gen-Vnv2f65C.mjs +0 -2
  129. package/dist/help-DQMfeKMz.mjs +0 -2
  130. package/dist/login-t6rndSRW.mjs +0 -2
  131. package/dist/migrate-TsHGBnDA.mjs +0 -2
  132. package/dist/prepare-BZXkjdNe.mjs +0 -2
@@ -842,7 +842,7 @@ interface CloudEnv extends Env {
842
842
  KV: KVNamespace;
843
843
  STORAGE: R2Bucket;
844
844
  AI: Ai;
845
- SANDBOX: DurableObjectNamespace<import('@cloudflare/sandbox').Sandbox>;
845
+ SANDBOX: DurableObjectNamespace<import('void/sandbox').VoidPlatformSandbox>;
846
846
  [key: string]: unknown;
847
847
  };
848
848
  Variables: CloudContextVariables;
@@ -1195,37 +1195,37 @@ See [Markdown Pages](../guide/pages-routing/markdown.md) for setup and framework
1195
1195
 
1196
1196
  Import Void's app-facing APIs from these paths:
1197
1197
 
1198
- | Import path | Contents |
1199
- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1200
- | `void` | `voidPlugin`, handler/type re-exports, `defer`, `Deferred`, `DeferredState`, `InferProps`, `HeadDescriptor` |
1201
- | `void/handler` | `defineHandler`, `defineMiddleware`, `basicAuth`, `defineScheduled`, `defineQueue`, `defineRender`, `defineHead`, types |
1202
- | `void/auth` | `defineAuth`, `getUser`, `getSession`, `requireAuth`, `AuthUser`, `AuthSession`, `AuthState` |
1203
- | `void/client` | `fetch`, `fetchStream`, `FetchError`, `auth`, `createAuthClient`, `AuthUser`, `AuthSession`, `AuthState` |
1204
- | `void/client/{framework}` | Same as `void/client`, with framework-specific Better Auth clients for `react`, `vue`, `svelte`, and `solid` |
1205
- | `void/ws` | `defineRoom`, `defineWebSocket`, `connect`, WebSocket context and connection types |
1206
- | `void/durable` | `defineDurableState`, typed state/RPC/context/migration types |
1207
- | `void/sse` | `eventStream`, `formatSse`, `formatSseText`, `getLastEventId`, `SseStreamClosedError`, SSE message and stream types |
1208
- | `void/sse/client` | `connectEventStream`, browser `EventSource` wrapper types |
1209
- | `void/live` | `defineLiveStream`, SSE topic fanout runtime types. Server-only. |
1210
- | `void/live/client` | `connectLiveStream`, browser helper for one SSE connection plus POST subscribe/unsubscribe control. |
1211
- | `void/response` | `convertReturnValue` |
1212
- | `void/validator` | `runValidation`, `ValidatorSlots`, `HandlerInput` |
1213
- | `void/drizzle-zod` | Re-exports [`drizzle-zod`](https://orm.drizzle.team/docs/zod) for schema-derived Zod validators for Drizzle tables |
1214
- | `void/drizzle-valibot` | Re-exports [`drizzle-valibot`](https://orm.drizzle.team/docs/typebox) for schema-derived Valibot validators for Drizzle tables |
1215
- | `void/drizzle-arktype` | Re-exports [`drizzle-arktype`](https://orm.drizzle.team/docs/arktype) for schema-derived ArkType validators for Drizzle tables |
1216
- | `void/schema-d1` | Re-exports [`drizzle-orm/sqlite-core`](https://orm.drizzle.team/docs/column-types/sqlite) for D1 table and column builders |
1217
- | `void/schema-pg` | Re-exports [`drizzle-orm/pg-core`](https://orm.drizzle.team/docs/column-types/pg) for PostgreSQL table and column builders |
1218
- | `void/schema-mysql` | Re-exports `drizzle-orm/mysql-core` for MySQL table and column builders |
1219
- | `void/database-provider` | `defineDatabaseProvider` and adapter types for `void db connect --provider` |
1220
- | `void/db` | `db` (Drizzle D1, PostgreSQL, or MySQL instance for the active dialect), `createDb`, query operators (`eq`, `and`, `or`, `desc`, `like`, `inArray`, etc.) |
1221
- | `void/seed` | `defineSeed`, `SeedContext`, `SeedFn` for programmatic `void db seed` modules |
1222
- | `void/kv` | `kv`, `createKV`, typed KV client/map types |
1223
- | `void/storage` | `storage`, `createStorage` for the inferred R2 binding or a specific `R2Bucket` |
1224
- | `void/ai` | `ai`, `VoidAi`, model input and response types |
1225
- | `void/isr` | `revalidate(options)` for on-demand ISR cache invalidation |
1226
- | `void/log` | `logger` structured logging helper |
1227
- | `void/routes` | `RouteMap` and `WebSocketRouteMap` stubs (types only) |
1228
- | `void/queues` | `queues` proxy for sending messages to typed queues |
1229
- | `void/sandbox` | `getSandbox`, `sandbox`, `Sandbox`, and sandbox option types from the Cloudflare Sandbox SDK. `getSandbox(id)` resolves to the same Durable Object instance for a given `id` within a deployment. Native Cloudflare preserves the namespace across Worker versions; managed platform deployments use deployment-scoped namespaces. The container filesystem, processes, and exposed ports are tied to one container lifetime and are lost on idle (`sleepAfter`, default `10m`), crash, or platform restart. See [Sandboxes › State persistence](../guide/sandboxes.md#state-persistence). |
1230
- | `void/env` | `defineEnv`, `env`, schema helpers (`string`, `number`, `boolean`, `url`, `email`, `oneOf`, `json`), and global Cloudflare env types |
1231
- | `void/sveltekit` | SvelteKit integration helpers: `withVoidTSConfig()` and `mergeVoidSvelteKitTsconfig()` |
1198
+ | Import path | Contents |
1199
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1200
+ | `void` | `voidPlugin`, handler/type re-exports, `defer`, `Deferred`, `DeferredState`, `InferProps`, `HeadDescriptor` |
1201
+ | `void/handler` | `defineHandler`, `defineMiddleware`, `basicAuth`, `defineScheduled`, `defineQueue`, `defineRender`, `defineHead`, types |
1202
+ | `void/auth` | `defineAuth`, `getUser`, `getSession`, `requireAuth`, `AuthUser`, `AuthSession`, `AuthState` |
1203
+ | `void/client` | `fetch`, `fetchStream`, `FetchError`, `auth`, `createAuthClient`, `AuthUser`, `AuthSession`, `AuthState` |
1204
+ | `void/client/{framework}` | Same as `void/client`, with framework-specific Better Auth clients for `react`, `vue`, `svelte`, and `solid` |
1205
+ | `void/ws` | `defineRoom`, `defineWebSocket`, `connect`, WebSocket context and connection types |
1206
+ | `void/durable` | `defineDurableState`, typed state/RPC/context/migration types |
1207
+ | `void/sse` | `eventStream`, `formatSse`, `formatSseText`, `getLastEventId`, `SseStreamClosedError`, SSE message and stream types |
1208
+ | `void/sse/client` | `connectEventStream`, browser `EventSource` wrapper types |
1209
+ | `void/live` | `defineLiveStream`, SSE topic fanout runtime types. Server-only. |
1210
+ | `void/live/client` | `connectLiveStream`, browser helper for one SSE connection plus POST subscribe/unsubscribe control. |
1211
+ | `void/response` | `convertReturnValue` |
1212
+ | `void/validator` | `runValidation`, `ValidatorSlots`, `HandlerInput` |
1213
+ | `void/drizzle-zod` | Re-exports [`drizzle-zod`](https://orm.drizzle.team/docs/zod) for schema-derived Zod validators for Drizzle tables |
1214
+ | `void/drizzle-valibot` | Re-exports [`drizzle-valibot`](https://orm.drizzle.team/docs/typebox) for schema-derived Valibot validators for Drizzle tables |
1215
+ | `void/drizzle-arktype` | Re-exports [`drizzle-arktype`](https://orm.drizzle.team/docs/arktype) for schema-derived ArkType validators for Drizzle tables |
1216
+ | `void/schema-d1` | Re-exports [`drizzle-orm/sqlite-core`](https://orm.drizzle.team/docs/column-types/sqlite) for D1 table and column builders |
1217
+ | `void/schema-pg` | Re-exports [`drizzle-orm/pg-core`](https://orm.drizzle.team/docs/column-types/pg) for PostgreSQL table and column builders |
1218
+ | `void/schema-mysql` | Re-exports `drizzle-orm/mysql-core` for MySQL table and column builders |
1219
+ | `void/database-provider` | `defineDatabaseProvider` and adapter types for `void db connect --provider` |
1220
+ | `void/db` | `db` (Drizzle D1, PostgreSQL, or MySQL instance for the active dialect), `createDb`, query operators (`eq`, `and`, `or`, `desc`, `like`, `inArray`, etc.) |
1221
+ | `void/seed` | `defineSeed`, `SeedContext`, `SeedFn` for programmatic `void db seed` modules |
1222
+ | `void/kv` | `kv`, `createKV`, typed KV client/map types |
1223
+ | `void/storage` | `storage`, `createStorage` for the inferred R2 binding or a specific `R2Bucket` |
1224
+ | `void/ai` | `ai`, `VoidAi`, model input and response types |
1225
+ | `void/isr` | `revalidate(options)` for on-demand ISR cache invalidation |
1226
+ | `void/log` | `logger` structured logging helper |
1227
+ | `void/routes` | `RouteMap` and `WebSocketRouteMap` stubs (types only) |
1228
+ | `void/queues` | `queues` proxy for sending messages to typed queues |
1229
+ | `void/sandbox` | `getSandbox`, `sandbox`, `SandboxLimitError`, `SandboxUnavailableError`, and the SDK 1.0 file, backup, and mount helpers. `getSandbox(id)` returns command execution, files, port requests, and lifecycle operations. Container state lasts until inactivity (default ten minutes), a crash, or a restart. See [Sandboxes](../guide/sandboxes.md) for the API and deployment requirements. |
1230
+ | `void/env` | `defineEnv`, `env`, schema helpers (`string`, `number`, `boolean`, `url`, `email`, `oneOf`, `json`), and global Cloudflare env types |
1231
+ | `void/sveltekit` | SvelteKit integration helpers: `withVoidTSConfig()` and `mergeVoidSvelteKitTsconfig()` |
@@ -38,6 +38,7 @@ Use this page as a command reference. If you are setting up a project for the fi
38
38
  | `void project requests` | Show request-level traffic (status, method, timing) |
39
39
  | `void project rollback` | Roll back to a previous deployment |
40
40
  | `void project cancel` | Cancel an active deployment |
41
+ | `void project zero-trust` | Inspect or override project Zero Trust protection |
41
42
  | `void project purge-cache` | Purge all cached pages |
42
43
  | `void build logs` | Stream, tail, or download build logs |
43
44
  | `void email status` | Show email readiness on your own Cloudflare account (`--platform cloudflare`) |
@@ -282,6 +283,27 @@ platform, and accepting an invitation leaves directory links intact. To link
282
283
  the invited application, run `void project link` in an unlinked checkout of
283
284
  that application.
284
285
 
286
+ ### `void project zero-trust`
287
+
288
+ Inspect or override protection for a project on a Void platform:
289
+
290
+ ```sh
291
+ void project zero-trust status [--project <slug>]
292
+ void project zero-trust protect [--project <slug>]
293
+ void project zero-trust public [--project <slug>]
294
+ void project zero-trust reconcile [--project <slug>]
295
+ ```
296
+
297
+ Project selection follows `--project`, then `VOID_PROJECT`, then the linked
298
+ project.
299
+
300
+ Readers can inspect the state. The owner or a project administrator can protect
301
+ the project, make it public, or repair drift. `public` does not change the
302
+ platform default for future projects. Deploys and rollbacks wait until a
303
+ protection change is finished; if one is refused, the owner or a project
304
+ administrator can run `void project zero-trust reconcile` before you retry.
305
+ These commands do not apply to direct Cloudflare deployments.
306
+
285
307
  ### `void project token <create|list|renew|revoke>`
286
308
 
287
309
  Manage revocable `aud: deploy` credentials for one Void platform project. The
@@ -585,6 +607,46 @@ Search matches a project's slug, ID, or owner's login. `show` includes resources
585
607
 
586
608
  `owner` transfers a project to another registered user. Preview it with `--plan`; apply it interactively or with `--yes`. The preview reports active-work blockers and the account plan that will apply. The former owner becomes a project administrator, existing project-scoped CI deploy credentials are revoked, and usage already incurred remains with the former owner.
587
609
 
610
+ #### Project Zero Trust {#operator-zero-trust}
611
+
612
+ Configure the installation-wide Cloudflare Access policy and project overrides:
613
+
614
+ ```sh
615
+ void platform zero-trust status [--check]
616
+ printf '%s' "$ACCESS_API_TOKEN" | void platform zero-trust configure \
617
+ --identity-providers <id[,id...]> \
618
+ --policies <id[,id...]> \
619
+ [--existing-projects <protected|public>] \
620
+ [--protect-new-projects] \
621
+ --token-stdin \
622
+ --yes
623
+ void platform zero-trust reconcile
624
+ void platform zero-trust disable
625
+
626
+ void platform zero-trust project-status <project-id>
627
+ void platform zero-trust project-protect <project-id>
628
+ void platform zero-trust project-public <project-id>
629
+ void platform zero-trust project-reconcile <project-id>
630
+ ```
631
+
632
+ Mutations support `--plan`, `--yes`, and `--timeout`; use `--plan` instead of
633
+ `--yes` to inspect this change without applying it. The Access management token
634
+ is accepted only on standard input. Zero Trust uses the Cloudflare account that
635
+ hosts the platform. Omit `--protect-new-projects` to make new projects public
636
+ by default. `--existing-projects` is required when you enable Zero Trust and
637
+ rejected once it is enabled; later configuration changes keep each project's
638
+ protection. `status` reports saved state; `--check` also compares it with
639
+ Cloudflare Access. If status remains `configuring` or `disabling`, run
640
+ `void platform zero-trust reconcile` to resume the saved operation. Protected
641
+ projects support up to 100 custom domains.
642
+
643
+ The token needs **Access: Apps and Policies Write** plus **Access:
644
+ Organizations, Identity Providers, and Groups Read**, scoped to the platform's
645
+ Cloudflare account. Select at least one Allow policy that matches people by
646
+ identity; Void rejects Bypass and Service Auth policies and rules that allow
647
+ Everyone or any service token. See [Project Zero Trust](../guide/platform/administration/zero-trust.md)
648
+ for requirements and recovery.
649
+
588
650
  #### Deployments {#operator-deployments}
589
651
 
590
652
  Find a deployment, inspect its manifest, or request cancellation:
@@ -818,7 +880,7 @@ See [Self-host a Void platform](../guide/self-hosted-platform.md) for prerequisi
818
880
  void platform domain set <domain> [--installation <id>] [--zone <domain>] [--dedicated-zone] [--plan] [--yes]
819
881
  ```
820
882
 
821
- Add an application domain to a workers.dev test platform. Domain-based installations remain the recommended default. The command detects the zone when possible, creates missing DNS and routes after confirmation, and checks HTTPS before making the domain canonical. If DNS or certificates are pending, rerun the same command to resume. `--plan` is read-only; non-interactive mutations require `--yes`.
883
+ Add an application domain to a workers.dev test platform. Domain-based installations remain the recommended default. The command detects the zone when possible, creates missing DNS and routes after confirmation, and checks HTTPS and project Zero Trust protection before making the domain canonical. If DNS, certificates, or protection are pending, rerun the same command to resume. `--plan` is read-only; non-interactive mutations require `--yes`.
822
884
 
823
885
  Existing workers.dev URLs remain available, and the platform API origin, OAuth callback, projects, and deployments stay unchanged. The command verifies the running runtime token's Cache Purge permission for the new zone. A disabled platform stays disabled. Use the database URL from the original installation when administering from another machine. Replacing an already configured application domain is not supported. See [Adding a Domain](../guide/platform/installation/domains.md#adding-a-domain).
824
886
 
@@ -866,11 +928,11 @@ An upgrade completes after the new Workers pass health checks. If rollout fails,
866
928
 
867
929
  `platform rollback` restores a compatible earlier runtime without reversing database migrations. Pass its files with `--runtime`. If the installed version is a custom build, also supply that version with `--from-runtime`. Void refuses targets that are incompatible with the current database or predate installed authentication, sandbox-drain, or ownership-aware usage protocols. A later `upgrade` can move forward again.
868
930
 
869
- Uninstall verifies remote ownership before removing anything. Data resources are retained unless you pass `--purge-data`. Workers, R2, AI Gateway, DNS records, routes, custom domains, adopted resources, external PostgreSQL, and zones are always retained for manual review.
931
+ Uninstall verifies remote ownership before removing anything. Data resources are retained unless you pass `--purge-data`. Workers, the Queues they use, R2, AI Gateway, DNS records, routes, custom domains, adopted resources, external PostgreSQL, and zones are always retained for manual review.
870
932
 
871
933
  Resources that may have been shared or repurposed are retained for manual review. Platform traffic stays blocked. External PostgreSQL and its data are never deleted.
872
934
 
873
- See [Disable and Uninstall](../guide/platform/installation/uninstall.md) for the full removal policy.
935
+ See [Disable and Uninstall](../guide/platform/installation/uninstall.md#remove-retained-resources) for the full removal policy and the cleanup order.
874
936
 
875
937
  ## Deploy
876
938
 
@@ -1400,7 +1462,7 @@ void github connect my-app \
1400
1462
 
1401
1463
  For every organization installation, `void github connect` confirms that you personally have access to the specific repository, including when you originally installed the App. Interactively (TTY), it opens your browser once to authorize access to that repo on GitHub (a localhost + PKCE handshake), then completes the connection automatically. Without a TTY, this per-repo authorization never opens a browser: connect fails closed with an error explaining that the installation requires per-repo authorization and telling you to run `void github connect` locally. Interactively, connect joins the shared installation automatically when your account has no active installations linked, so running `void github join` first is optional. You can only connect repositories you can access on GitHub; seeing the organization installation never grants access to its other private repositories.
1402
1464
 
1403
- After upgrading from a platform version that treated an organization installer as an owner, existing organization connections show **Reconnect required** and stop starting builds until their repository access is proven. Run `void github connect <project> --repo <owner/repo>` again. The command reauthorizes the same connection in place after the browser proof; if the repository or installation changed, disconnect it first and connect the intended repository.
1465
+ 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.
1404
1466
 
1405
1467
  ### `void github update`
1406
1468
 
@@ -1433,7 +1495,7 @@ void github update my-app --executor github_actions
1433
1495
  void github status [project]
1434
1496
  ```
1435
1497
 
1436
- Show a project's current GitHub connection: the connected **repository**, the deploy **branch**, the **build executor** (`container` or `github_actions`), and the authorized **deploy workflow file**. Read-only — it never changes anything. The workflow file is the OIDC pin used only for `github_actions` builds; on a `container` connection it is still shown but marked unused. Legacy organization connections also show **Reconnect required** until `void github connect` proves current access to that repository. The project must already be connected (run `void github connect` first, otherwise it reports that and exits).
1498
+ Show a project's current GitHub connection: the connected **repository**, the deploy **branch**, the **build executor** (`container` or `github_actions`), and the authorized **deploy workflow file**. Read-only — it never changes anything. The workflow file is the OIDC pin used only for `github_actions` builds; on a `container` connection it is still shown but marked unused. The project must already be connected (run `void github connect` first, otherwise it reports that and exits).
1437
1499
 
1438
1500
  **Options**
1439
1501
 
@@ -1522,7 +1584,7 @@ Add a custom domain to the saved target. Hosted Void projects print the DNS reco
1522
1584
  void domain delete <hostname> [--project <name>]
1523
1585
  ```
1524
1586
 
1525
- Direct Cloudflare projects apply the change immediately. Deleting the final custom domain requires `CLOUDFLARE_API_TOKEN` with Workers Scripts: Edit permission because the standard trigger operation does not reconcile an empty custom-domain set; Void fails before changing local or remote state when that token is unavailable.
1587
+ Direct Cloudflare projects apply the change immediately. Deleting the final custom domain uses your browser session from `void cloudflare login` or an API token with Workers Scripts: Edit permission. If Cloudflare rejects the change, Void attempts to restore the previous domain configuration and reports whether recovery succeeded.
1526
1588
 
1527
1589
  Remove a custom domain from the saved target. For Cloudflare, this removes the matching `custom_domain` route and synchronizes triggers. If Cloudflare rejects the update, Void restores the exact previous local config and immediately reapplies it remotely. If that second synchronization also fails, the CLI reports that remote route state may be partial instead of claiming a successful rollback.
1528
1590
 
@@ -229,31 +229,31 @@ VOID_REMOTE=1 pnpm dev
229
229
 
230
230
  ### `sandbox`
231
231
 
232
- Enable and configure Cloudflare Sandboxes for Void apps. Importing from `void/sandbox` enables this automatically; set `sandbox` when you need custom container settings.
232
+ Enable and configure Cloudflare Sandboxes. Importing from `void/sandbox` enables this automatically.
233
233
 
234
234
  ```json
235
235
  {
236
236
  "sandbox": {
237
237
  "image": "./Dockerfile.sandbox",
238
- "platformImage": "registry.example.com/acme/sandbox:latest",
239
- "instanceType": "lite",
240
- "maxInstances": 2
238
+ "platformImage": "registry.cloudflare.com/<account-id>/sandbox@sha256:<digest>",
239
+ "instanceType": "standard-1"
241
240
  }
242
241
  }
243
242
  ```
244
243
 
245
- | Field | Type | Default |
246
- | ------------------- | -------- | ------------------------------------ |
247
- | `binding` | `string` | `SANDBOX` |
248
- | `className` | `string` | `Sandbox` |
249
- | `containerName` | `string` | `void-sandbox` |
250
- | `image` | `string` | Matching published sandbox SDK image |
251
- | `imageBuildContext` | `string` | Directory of `image` |
252
- | `platformImage` | `string` | Matching sandbox SDK registry image |
253
- | `instanceType` | `string` | `lite` on Void deploy |
254
- | `maxInstances` | `number` | `20` on Void deploy |
255
-
256
- Sandbox is available to Void apps on the Cloudflare target and requires [Workers Paid](https://dash.cloudflare.com/?to=/:account/workers/plans) and Containers access. Void checks access before provisioning or building. For a managed platform, its runtime token needs Account / Containers: Edit and Account / Cloudchamber: Edit. Apps without Sandbox use neither Containers nor an entitlement check. The default image matches the installed `@cloudflare/sandbox` version. If `sandbox.image` points to a local Dockerfile, set `sandbox.platformImage` to the pushed image for the platform.
244
+ | Field | Type | Default |
245
+ | ------------------- | -------- | --------------------------- |
246
+ | `binding` | `string` | `SANDBOX` |
247
+ | `className` | `string` | `SandboxV1` |
248
+ | `containerName` | `string` | `void-sandbox-v1` |
249
+ | `image` | `string` | Packaged Node.js Dockerfile |
250
+ | `imageBuildContext` | `string` | Directory of `image` |
251
+ | `platformImage` | `string` | `cloudflare/debian-trixie` |
252
+ | `instanceType` | `string` | `lite` |
253
+
254
+ Supported sizes are `lite` and `standard-1` through `standard-4`. Native deploys build Dockerfiles with Docker; registry images must be digest-pinned references from the Cloudflare managed registry. Custom images must include the matching Sandbox SDK helper. For a local Dockerfile, supply `platformImage` when deploying to a managed platform. See [Sandboxes](../guide/sandboxes.md) for image setup and runtime examples.
255
+
256
+ Sandbox requires [Workers Paid](https://dash.cloudflare.com/?to=/:account/workers/plans) and Containers access, checked before provisioning or building. Managed runtime tokens need Account / Containers: Edit and Account / Cloudchamber: Edit. Apps without Sandbox use neither Containers nor an entitlement check.
257
257
 
258
258
  ### `target`
259
259
 
@@ -1,2 +0,0 @@
1
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
2
- export { PlatformClient };
@@ -1,2 +0,0 @@
1
- import { r as runGenCommand } from "./gen-Dz3X1Qab.mjs";
2
- export { runGenCommand };
@@ -1,2 +0,0 @@
1
- import { r as printHelpPage } from "./help-DC7gdz7L.mjs";
2
- export { printHelpPage };
@@ -1,2 +0,0 @@
1
- import { r as selectPlatformLoginMethod } from "./login-DZldyb8c.mjs";
2
- export { selectPlatformLoginMethod };
@@ -1,2 +0,0 @@
1
- import { n as runMigrateCommand } from "./migrate-B8KuoYsO.mjs";
2
- export { runMigrateCommand };
@@ -1,2 +0,0 @@
1
- import { t as prepareProject } from "./prepare-C3kt3Rst.mjs";
2
- export { prepareProject };