void 0.23.0 → 0.25.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 (169) hide show
  1. package/AGENTS_TEMPLATE.md +1 -1
  2. package/README.md +19 -106
  3. package/dist/{account-cmd-C84Ee8cO.mjs → account-cmd-DcR1ywt8.mjs} +5 -5
  4. package/dist/{auth-CSkdO2Bb.mjs → auth-7wuZ5ob8.mjs} +22 -49
  5. package/dist/auth-CdgZ9uag.mjs +2 -0
  6. package/dist/{auth-link-CioEg6uY.mjs → auth-link-Z6E5DYvM.mjs} +5 -6
  7. package/dist/{auth-router-BsR981d4.mjs → auth-router-BdM4avI8.mjs} +7 -7
  8. package/dist/{build-cmd-LzvNJORH.mjs → build-cmd-CEE7D-hM.mjs} +7 -8
  9. package/dist/{cache-C4MvnrMH.mjs → cache-TcZnBLtH.mjs} +6 -7
  10. package/dist/{cancel-deploy-abUxpP2n.mjs → cancel-deploy-CYoZmcmR.mjs} +4 -6
  11. package/dist/{cf-access-P0iZnu0q.mjs → cf-access-AHKBzmuu.mjs} +4 -48
  12. package/dist/{cf-access-DRsQRe6k.mjs → cf-access-TWNzXltp.mjs} +3 -11
  13. package/dist/cf-build-output-ChY6-XWP.mjs +2 -0
  14. package/dist/cli/cli.mjs +49 -46
  15. package/dist/cli/cloudflare-operation-process.mjs +16 -7
  16. package/dist/cli/env-schema-probe.mjs +3 -3
  17. package/dist/client-B4Me-9HE.mjs +2 -0
  18. package/dist/{client-RV8NVeB8.mjs → client-RsPo8wsP.mjs} +129 -33
  19. package/dist/{cloudflare-cmd-BcrVyTmJ.mjs → cloudflare-cmd-bhwCxAN6.mjs} +2 -2
  20. package/dist/{cloudflare-connect-B8uPZ4nx.mjs → cloudflare-connect-CuhRgk3k.mjs} +2 -2
  21. package/dist/{cloudflare-operations-AiWashgg.mjs → cloudflare-operations-BhbK6yTq.mjs} +1 -1
  22. package/dist/{cloudflare-operations-fxHb-byx.mjs → cloudflare-operations-CjaV4lZi.mjs} +2 -2
  23. package/dist/{connect-Bd4kJd9U.mjs → connect-DCvUmPXY.mjs} +13 -10
  24. package/dist/{create-project-Boczwj5r.mjs → create-project-C734I-Mu.mjs} +1 -1
  25. package/dist/{create-project-bMf6ffLZ.mjs → create-project-eAPgYq35.mjs} +13 -13
  26. package/dist/{db-8uG64XLl.mjs → db-C07GEdKF.mjs} +27 -30
  27. package/dist/{delete-NvbiyeJf.mjs → delete-pKMVsrpJ.mjs} +5 -6
  28. package/dist/deploy-BDu1vhSH.mjs +2 -0
  29. package/dist/{deploy-DzAIwqNU.mjs → deploy-DfsAe-T0.mjs} +9567 -9215
  30. package/dist/{dev-inbox-P0u4tM8Y.mjs → dev-inbox-D64ZKUod.mjs} +5 -6
  31. package/dist/{domain-y5Tvydvo.mjs → domain-D3uA9ize.mjs} +8 -8
  32. package/dist/{email-B3umsW75.mjs → email-z3o2cwjH.mjs} +8 -8
  33. package/dist/{env-BS6qYHDb.mjs → env-3Q8-_2IH.mjs} +7 -9
  34. package/dist/{env-types-C2_bIk_b.mjs → env-types-D5kds_OZ.mjs} +1 -1
  35. package/dist/{env-validation-DbTg7-ar.mjs → env-validation-cZBvGWaP.mjs} +1 -1
  36. package/dist/{env-validation-BPn7vk-V.mjs → env-validation-vBSQ8gw5.mjs} +3 -3
  37. package/dist/gen-ById9r2j.mjs +2 -0
  38. package/dist/{gen-B580--vC.mjs → gen-NjwoG9FK.mjs} +2 -4
  39. package/dist/{github-cmd-v45BdfKX.mjs → github-cmd-DquUq-b1.mjs} +15 -24
  40. package/dist/{headers-DWi2IXWx.mjs → headers-2rKda9Y6.mjs} +1 -1
  41. package/dist/help-DPGBwomV.mjs +2 -0
  42. package/dist/{help-daGKjXGk.mjs → help-DRZXC4fj.mjs} +8 -4
  43. package/dist/{inbound-aVHEUhKo.mjs → inbound-fRkqcXaC.mjs} +1 -1
  44. package/dist/index.d.mts +18 -14
  45. package/dist/index.mjs +2176 -2110
  46. package/dist/{info-B97bTX9N.mjs → info-BmA3_IFZ.mjs} +1 -3
  47. package/dist/{init-Bvy7zrBo.mjs → init-DT7yuuyl.mjs} +28 -27
  48. package/dist/{link-CDqqCjFl.mjs → link-CXOlqh2F.mjs} +6 -7
  49. package/dist/{list-CZj0dzKY.mjs → list-eEWVJEPn.mjs} +8 -9
  50. package/dist/{local-d1-2CMnpuW_.mjs → local-d1-Df4XpwhW.mjs} +1 -1
  51. package/dist/log-vqY3pqwI.mjs +29 -0
  52. package/dist/login-C98-sw79.mjs +2 -0
  53. package/dist/{login-UZKFM_u7.mjs → login-pWQHYVu2.mjs} +12 -10
  54. package/dist/{logs-CUZ6t9t3.mjs → logs-DnxVX7TR.mjs} +11 -13
  55. package/dist/migrate-CEu2X5DB.mjs +2 -0
  56. package/dist/{migrate-DHul7PRV.mjs → migrate-CV1on-yJ.mjs} +2 -4
  57. package/dist/{operator-args-CLgKGlwU.mjs → operator-args-CAVcmwUt.mjs} +12 -5
  58. package/dist/{operator-auth-8KnOVXVd.mjs → operator-auth-CkmTE3rt.mjs} +2 -2
  59. package/dist/{operator-client-DUwumHpQ.mjs → operator-client-LmwjxT6q.mjs} +3 -3
  60. package/dist/{operator-cmd-DBA6dl0m.mjs → operator-cmd-d-IEKgNk.mjs} +6 -6
  61. package/dist/{output-Dm_A4Tbv.mjs → output-BBsUwdyT.mjs} +22 -14
  62. package/dist/pages/client.d.mts +3 -0
  63. package/dist/pages/client.mjs +120 -29
  64. package/dist/pages/index.mjs +1 -1
  65. package/dist/{platform-args-BJdRtlLq.mjs → platform-args-Bzf8JPc2.mjs} +11 -3
  66. package/dist/platform-args-Cq6EjQro.mjs +2 -0
  67. package/dist/{platform-auth-config-B56E9YP1.mjs → platform-auth-config-0V0lA3pF.mjs} +7 -7
  68. package/dist/{platform-auth-protection-BDWO_aER.mjs → platform-auth-protection-DFeJ-JkK.mjs} +9 -9
  69. package/dist/{platform-auth-recovery-1gg4CSRe.mjs → platform-auth-recovery-ICy4muq6.mjs} +7 -7
  70. package/dist/{platform-cmd-Bt-1w6pY.mjs → platform-cmd-BPySFOew.mjs} +1 -1
  71. package/dist/{platform-cmd-DMcQStSc.mjs → platform-cmd-D7vSWMvV.mjs} +38 -28
  72. package/dist/platform-discovery-DDDUvnqp.mjs +27 -0
  73. package/dist/{platform-domain-BNkcz0OB.mjs → platform-domain-CUdY064e.mjs} +5 -5
  74. package/dist/{platform-lifecycle-BE6C_jxh.mjs → platform-lifecycle-BaUdTRPU.mjs} +1 -1
  75. package/dist/{platform-lifecycle-9OyBALhH.mjs → platform-lifecycle-Dm09JNkn.mjs} +4404 -3297
  76. package/dist/{platform-management-CjwLVQwN.mjs → platform-management-BSEc_ZeG.mjs} +48 -11
  77. package/dist/platform-management-Bp6aoH2C.mjs +2 -0
  78. package/dist/{platform-plans-config-BNGKGr4P.mjs → platform-plans-config-B0pOVQyW.mjs} +3 -3
  79. package/dist/{platform-recovery-D6KSpuFm.mjs → platform-recovery-WOZ95Uze.mjs} +4 -4
  80. package/dist/{platform-registry-QBa4DK32.mjs → platform-registry-KfNEF84O.mjs} +3 -3
  81. package/dist/{prepare-B5Mkic5u.mjs → prepare-39EvOhI6.mjs} +2 -4
  82. package/dist/prepare-CnjcTV2s.mjs +2 -0
  83. package/dist/{prepare-DOsL0CC9.mjs → prepare-DnaKBi--.mjs} +1 -1
  84. package/dist/{project-C0Fqu05O.mjs → project-BkbfDs0V.mjs} +15 -82
  85. package/dist/project-IOjBU8R6.mjs +2 -0
  86. package/dist/{project-cmd-CNzrqvBv.mjs → project-cmd-Bs5A392E.mjs} +21 -22
  87. package/dist/{project-team-DQOWPfQT.mjs → project-team-ohAWWaew.mjs} +8 -9
  88. package/dist/{project-token-CTDYU0Cc.mjs → project-token-CP01Jna6.mjs} +6 -9
  89. package/dist/{project-zero-trust-BNAkW-_0.mjs → project-zero-trust-BzkVgx35.mjs} +5 -6
  90. package/dist/prompts-6OSVA7DJ.mjs +2087 -0
  91. package/dist/prompts-ZAuJlyCj.mjs +2 -0
  92. package/dist/{provision-C4ORE7G7.mjs → provision-BEv0k-qz.mjs} +1 -1
  93. package/dist/{provision-CJFgTZY8.mjs → provision-Btj1jppf.mjs} +5 -7
  94. package/dist/{requests-MhxYnau8.mjs → requests-B3PBuGlX.mjs} +5 -6
  95. package/dist/{rollback-CJ6iSDoU.mjs → rollback-DDub9GsO.mjs} +9 -10
  96. package/dist/runtime/ai.mjs +3 -5
  97. package/dist/runtime/email/testing.mjs +2 -2
  98. package/dist/runtime/email.mjs +36 -18
  99. package/dist/runtime/remote/index.mjs +2 -2
  100. package/dist/runtime/routing.mjs +1 -1
  101. package/dist/{secret-Dli5fP0B.mjs → secret-3c72lY1U.mjs} +15 -16
  102. package/dist/{skills-D1II1Juz.mjs → skills-BPQUGClu.mjs} +1 -1
  103. package/dist/{subcommand-prompt-CY1C4fvl.mjs → subcommand-prompt-Dhom39bd.mjs} +40 -32
  104. package/dist/sveltekit.d.mts +1 -1
  105. package/dist/sveltekit.mjs +4 -9
  106. package/dist/{wrangler-7K-bW_DL.mjs → wrangler-DhUerFkW.mjs} +10 -15
  107. package/package.json +22 -23
  108. package/sandbox.Dockerfile +1 -1
  109. package/skills/void/SKILL.md +6 -1
  110. package/skills/void/docs/guide/ai.md +24 -86
  111. package/skills/void/docs/guide/auth.md +0 -2
  112. package/skills/void/docs/guide/database/d1.md +7 -7
  113. package/skills/void/docs/guide/deployment.md +58 -102
  114. package/skills/void/docs/guide/edge/headers.md +1 -1
  115. package/skills/void/docs/guide/email/domains.md +5 -1
  116. package/skills/void/docs/guide/email/sending.md +1 -1
  117. package/skills/void/docs/guide/env-vars.md +1 -5
  118. package/skills/void/docs/guide/index.md +19 -18
  119. package/skills/void/docs/guide/kv.md +0 -2
  120. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +49 -47
  121. package/skills/void/docs/guide/pages-routing/overview.md +2 -2
  122. package/skills/void/docs/guide/platform/administration/email.md +0 -2
  123. package/skills/void/docs/guide/platform/administration/operations.md +11 -22
  124. package/skills/void/docs/guide/platform/administration/plans.md +1 -5
  125. package/skills/void/docs/guide/platform/administration/zero-trust.md +24 -9
  126. package/skills/void/docs/guide/platform/development/schema-ci.md +7 -1
  127. package/skills/void/docs/guide/platform/installation/ci.md +1 -1
  128. package/skills/void/docs/guide/platform/installation/credentials.md +10 -3
  129. package/skills/void/docs/guide/platform/installation/domains.md +8 -3
  130. package/skills/void/docs/guide/platform/installation/first-deployment.md +2 -2
  131. package/skills/void/docs/guide/platform/installation/maintenance.md +37 -5
  132. package/skills/void/docs/guide/platform/installation/prerequisites.md +87 -14
  133. package/skills/void/docs/guide/platform/installation/setup.md +80 -10
  134. package/skills/void/docs/guide/quickstart.md +37 -80
  135. package/skills/void/docs/guide/remote-dev.md +1 -1
  136. package/skills/void/docs/guide/sandboxes.md +36 -46
  137. package/skills/void/docs/guide/self-hosted-platform.md +20 -0
  138. package/skills/void/docs/guide/websockets.md +0 -2
  139. package/skills/void/docs/integrations/frameworks/overview.md +2 -2
  140. package/skills/void/docs/integrations/frameworks/sveltekit.md +40 -25
  141. package/skills/void/docs/integrations/nodejs-bun-deno.md +7 -2
  142. package/skills/void/docs/reference/api/resources.md +27 -0
  143. package/skills/void/docs/reference/api.md +1 -1
  144. package/skills/void/docs/reference/cli/auth.md +4 -3
  145. package/skills/void/docs/reference/cli/database.md +1 -1
  146. package/skills/void/docs/reference/cli/deploy.md +21 -1
  147. package/skills/void/docs/reference/cli/platform-installation.md +42 -27
  148. package/skills/void/docs/reference/cli/platform-operations.md +4 -8
  149. package/skills/void/docs/reference/cli/platform-zero-trust.md +14 -0
  150. package/skills/void/docs/reference/cli/platform.md +5 -0
  151. package/skills/void/docs/reference/config.md +1 -1
  152. package/skills/void/docs/reference/resource-inference.md +11 -8
  153. package/dist/auth-CCjt0hcq.mjs +0 -2
  154. package/dist/cf-build-output-_0HNWysu.mjs +0 -2
  155. package/dist/client-Cu7jWiF1.mjs +0 -2
  156. package/dist/deploy-bjXdFCtn.mjs +0 -2
  157. package/dist/dist-BuDuKZJv.mjs +0 -2
  158. package/dist/dist-CTBk70IR.mjs +0 -1310
  159. package/dist/gen-BVaUUumi.mjs +0 -2
  160. package/dist/help-DofyZuY7.mjs +0 -2
  161. package/dist/log-ChfPKsVd.mjs +0 -26
  162. package/dist/login-DYt_An22.mjs +0 -2
  163. package/dist/migrate-8_2u55MD.mjs +0 -2
  164. package/dist/platform-args-D3RXyR6h.mjs +0 -2
  165. package/dist/platform-management-CnyTdcWX.mjs +0 -2
  166. package/dist/prepare-cgvDMtSb.mjs +0 -2
  167. package/dist/project-BuUwfj6f.mjs +0 -2
  168. package/skills/void/docs/guide/env-migration.md +0 -109
  169. package/dist/{cf-build-output-BPqOT964.mjs → cf-build-output-U8o1Gl6X.mjs} +1 -1
@@ -8,32 +8,33 @@ outline: deep
8
8
  void platform install [options] [--yes]
9
9
  ```
10
10
 
11
- | Option | Purpose |
12
- | --------------------------------- | ------------------------------------------------------------------------------------ |
13
- | `--name <slug>` | Installation name used in `void-<name>-<role>` resource names; choose an unused name |
14
- | `--display-name <name>` | Human-readable platform name |
15
- | `--account <id>` | Cloudflare account id |
16
- | `--auth-config <path>` | Login methods, signup policy, and environment references for provider secrets |
17
- | `--login-methods <methods>` | Comma-separated `github`, `google`, `oidc`, or `cloudflare-access` login methods |
18
- | `--access-protection` | Protect the platform UI and APIs with Cloudflare Access |
19
- | `--no-access-protection` | Skip Cloudflare Access protection |
20
- | `--hyperdrive <create\|id>` | Create Hyperdrive or use the specified existing configuration |
21
- | `--application-domain <domain>` | Base domain for deployed apps |
22
- | `--workers-dev` | Explicit testing mode; add an application domain later |
23
- | `--zone <domain>` | Cloudflare zone containing the application domain |
24
- | `--dedicated-zone` | Add zone-wide catch-all routes; valid only when the app domain is the whole zone |
25
- | `--no-dedicated-zone` | Skip zone-wide application catch-all routes |
26
- | `--control-plane-domain <domain>` | Optional API custom hostname; defaults to `workers.dev` |
27
- | `--no-control-plane-domain` | Use the default `workers.dev` API hostname |
28
- | `--dashboard-url <origin>` | HTTPS origin of an optional dashboard deployed separately |
29
- | `--plan` | Resolve and print a read-only plan |
30
- | `--resume` | Continue the matching checkpointed installation |
31
- | `--runtime <path>` | Deploy a locally built, integrity-checked runtime directory |
32
- | `--yes` | Acknowledge Cloudflare changes in non-interactive use |
33
-
34
- For a first installation, follow [Install a Void Platform](../../guide/self-hosted-platform.md). The interactive installer recommends using a domain and offers **Use workers.dev for testing** as a visible alternative. Void creates the platform infrastructure and tables. External PostgreSQL and a configured login method are required in either mode; GitHub OAuth is the default login choice, not a requirement. `--workers-dev` skips zone/DNS/certificate operations and cannot be combined with `--application-domain`, `--zone`, or `--dedicated-zone`.
35
-
36
- Read-only plans, workers.dev installations with the default API hostname, and supported lifecycle operations can use Cloudflare browser login and the system keychain. Installation that writes DNS or creates a zone needs an explicit management token through `CLOUDFLARE_API_TOKEN` or `CF_API_TOKEN`.
11
+ | Option | Purpose |
12
+ | ----------------------------------------- | ------------------------------------------------------------------------------------ |
13
+ | `--name <slug>` | Installation name used in `void-<name>-<role>` resource names; choose an unused name |
14
+ | `--display-name <name>` | Human-readable platform name |
15
+ | `--account <id>` | Cloudflare account id |
16
+ | `--auth-config <path>` | Login methods, signup policy, and environment references for provider secrets |
17
+ | `--login-methods <methods>` | Comma-separated `github`, `google`, `oidc`, or `cloudflare-access` login methods |
18
+ | `--access-protection` | Protect the platform UI and APIs with Cloudflare Access |
19
+ | `--no-access-protection` | Skip Cloudflare Access protection |
20
+ | `--app-access <public\|platform\|custom>` | Public apps, the platform's Access policy, or separately selected app policies |
21
+ | `--hyperdrive <create\|id>` | Create Hyperdrive or use the specified existing configuration |
22
+ | `--application-domain <domain>` | Base domain for deployed apps |
23
+ | `--workers-dev` | Explicit testing mode; add an application domain later |
24
+ | `--zone <domain>` | Cloudflare zone containing the application domain |
25
+ | `--dedicated-zone` | Add zone-wide catch-all routes; valid only when the app domain is the whole zone |
26
+ | `--no-dedicated-zone` | Skip zone-wide application catch-all routes |
27
+ | `--control-plane-domain <domain>` | Optional API custom hostname; defaults to `workers.dev` |
28
+ | `--no-control-plane-domain` | Use the default `workers.dev` API hostname |
29
+ | `--dashboard-url <origin>` | HTTPS origin of an optional dashboard deployed separately |
30
+ | `--plan` | Preview Cloudflare changes and save installation choices locally |
31
+ | `--resume` | Continue the matching checkpointed installation |
32
+ | `--runtime <path>` | Deploy a locally built, integrity-checked runtime directory |
33
+ | `--yes` | Acknowledge Cloudflare changes in non-interactive use |
34
+
35
+ For a first installation, follow [Install a Void Platform](../../guide/self-hosted-platform.md). The interactive installer recommends using a domain and offers **Use workers.dev for testing** as a visible alternative. Void creates the platform infrastructure and tables. External PostgreSQL and a configured login method are required in either mode. Select all login methods you want to enable; none are selected initially. Non-interactive installation defaults to GitHub when no login configuration is supplied. `--workers-dev` skips zone/DNS/certificate operations and cannot be combined with `--application-domain`, `--zone`, or `--dedicated-zone`.
36
+
37
+ Read-only plans, workers.dev installations with the default API hostname, and supported lifecycle operations can use Cloudflare browser login and the system keychain. Installation that writes DNS or creates a zone needs a management API token. The interactive installer guides you to create one and paste it into a masked prompt; scripts use `CLOUDFLARE_API_TOKEN` or `CF_API_TOKEN`.
37
38
 
38
39
  The installed platform needs a separate runtime token to provision resources for apps. The interactive installer prompts for it and the other setup values. For non-interactive installs, inject the variables listed in [Install from CI](../../guide/platform/installation/ci.md).
39
40
 
@@ -45,10 +46,24 @@ path, query, or fragment. Void permits that origin's login callbacks and saves
45
46
  it for later maintenance; it does not deploy a dashboard Worker. Omission keeps
46
47
  an existing installation's saved dashboard origin.
47
48
 
48
- `--plan` previews resource names, login methods, callback URLs, and credential requirements. Run the install or resume command printed at the end to continue. For login configuration, use either `--auth-config` or `--login-methods` with the Access protection flags.
49
+ `--plan` previews resource names, login methods, default app access, the login callback URL, database configuration, and credential requirements. An existing Hyperdrive shows its database and configuration name. Setup links are shown during guided credential setup. Completed previews save nonsecret installation choices locally. Rerun `void platform install` to choose a saved plan and review a fresh check of Cloudflare state, or run the install or resume command printed at the end. Started installations use their saved checkpoints; completed installations are excluded from the chooser. For login configuration, use either `--auth-config` or `--login-methods` with the Access protection flags.
50
+
51
+ App access is configured before traffic opens. With platform protection enabled,
52
+ the installer recommends reusing its company policy; otherwise it defaults to
53
+ public apps. Use `--app-access custom` to select separate hosting-account policies.
54
+ Public apps in a Default-Deny account receive scoped public Access rules. The
55
+ installer explains and collects the encrypted management credential when needed;
56
+ scripts supply `VOID_PLATFORM_APP_ACCESS_TOKEN` or `appAccess.tokenEnv` in the
57
+ authentication file. Upgrades preserve administrator settings.
49
58
 
50
59
  New resources use `void-<name>-<role>` names; choose an unused installation name. The installer opens setup pages for missing credentials and reuses values already supplied.
51
60
 
61
+ During Access setup, choose existing company policies or **Create new** for manual
62
+ setup instructions and an account dashboard link. After you save the policy and
63
+ confirm completion, Void reloads the list so you can select it and continue in the
64
+ same run. **Refresh list** reloads policies created in another window. Your
65
+ identity-provider choice and still-available policy selections are retained.
66
+
52
67
  Installation progress and partial credentials are saved encrypted locally. Rerun the installer to continue unfinished setup, or pass `--resume --name <id>`. Use lifecycle commands for completed installations.
53
68
 
54
69
  Use an empty PostgreSQL database dedicated to the installation. You can correct a failed initial connection, but after the database is claimed or Hyperdrive is provisioned, commands reject a different URL.
@@ -17,11 +17,7 @@ void platform deployment migrate-assets <id> [--cursor <cursor>] [--plan|--yes]
17
17
 
18
18
  Cancellation applies while a deployment is pending, uploading, migrating, or prerendering, and can be requested again while it is canceling. A deployment that has begun switching traffic, is compensating for a failure, or has finished cannot be canceled through this command.
19
19
 
20
- `migrate-assets` copies legacy assets to scoped R2 storage, verifies their contents, and updates each batch only after all its assets are verified. Original assets remain in place, and application traffic stays on the same deployment. Upgrade the platform runtime before using this command. Migrate both active deployments and retained rollback deployments before removing support for older asset storage.
21
-
22
- Use `--plan` to preview the first batch. Applying authorizes all remaining batches for that deployment; the CLI previews each batch and prints its result, including `nextCursor`. With `--json`, results are JSON Lines. If a later batch fails or the command is interrupted, resume with the cursor from the last successful result. An ambiguous request is never retried automatically; inspect the deployment before resuming. A completed migration reports `complete: true` and `nextCursor: null`.
23
-
24
- Use [`void platform system asset-migrations`](#operator-system) to find deployments requiring migration. Inspect every inventory page, migrate each deployment with `needsMigration` greater than zero, then inspect every page again. Include retained rollback deployments and stored bundles. Investigate rows marked `invalid` before considering migration complete. Keep the older asset readers until the full inventory is valid and no protected deployment needs migration.
20
+ `migrate-assets` copies a deployment's legacy assets to scoped R2 storage without changing application traffic. Use `--plan` to preview and `--cursor` to resume from a successful batch. Original assets remain in place.
25
21
 
26
22
  Read its runtime logs with:
27
23
 
@@ -44,7 +40,7 @@ void platform build logs <id> [--since <sequence>] [--limit <n>] [--follow]
44
40
 
45
41
  Build logs start at sequence `0` and return up to 500 lines. Use the returned `lastSeq` as `--since` to continue; `--limit` accepts 1 to 500. Container log retrieval requires managed builds to be enabled. GitHub Actions builds return an external log URL.
46
42
 
47
- Following waits for the final logs after the build becomes terminal. If completion cannot be confirmed within two minutes, the command exits with an error. Older builds without a completion signal may wait for 30 seconds without new lines before following stops.
43
+ Following waits for the final logs after the build becomes terminal. If completion cannot be confirmed within two minutes, the command exits with an error.
48
44
 
49
45
  ## System {#operator-system}
50
46
 
@@ -62,11 +58,11 @@ void platform system sandbox-drain [--cursor <opaque-cursor>]
62
58
 
63
59
  `overview` shows platform totals and recent activity. `health` checks the configured services and database, and exits with a nonzero status if a check fails. `cli-versions` reports the CLI versions used by deployments.
64
60
 
65
- `asset-migrations` inventories active deployments, retained rollback deployments, and deployments with stored bundles. It reports their asset counts, `needsMigration`, and an `invalid` flag for unreadable metadata. Read all pages using the response's pagination fields. Migrate each deployment with `needsMigration` greater than zero through [`deployment migrate-assets`](#operator-deployments), then rerun the full inventory. Migration keeps the original assets; removing those assets or their older readers requires separate verification.
61
+ `asset-migrations` inventories stored deployment assets and reports `needsMigration` and `invalid` counts. Use the response's pagination fields to read all entries.
66
62
 
67
63
  `events` shows the administrator, target, and outcome of changes. A pending event means the outcome has not been recorded. Previews and session login/logout do not create these events. `backfill-queue-tokens` repairs older queue entries that are missing authentication tokens and supports `--plan` before applying the repair.
68
64
 
69
- Use `sandbox-drain` when an upgrade from the legacy tenant-owned Sandbox runtime asks you to finish cleanup. Preview with `--plan`; pass the returned `nextCursor` as `--cursor` to inspect later pages. Apply with `--yes` and rerun until it reports `complete: true`, then rerun the interrupted upgrade. Application traffic stays paused during cleanup, while administrator login remains available. The completed upgrade enables the current managed Sandbox controller automatically.
65
+ `sandbox-drain` removes legacy tenant-owned Sandbox resources. Use `--plan` to preview and `--yes` to apply, then pass `nextCursor` as `--cursor` to continue. Application traffic stays paused during cleanup.
70
66
 
71
67
  Use the [platform lifecycle commands](./platform-installation.md#lifecycle-commands) to maintain your installation's Workers.
72
68
 
@@ -26,6 +26,20 @@ void platform zero-trust project-public <project-id>
26
26
  void platform zero-trust project-reconcile <project-id>
27
27
  ```
28
28
 
29
+ New installations configure app access in `void platform install`. Use these
30
+ commands to inspect or change it later. To configure or renew public-only rules
31
+ for a Default-Deny account, omit identity policies and use `--public-apps`:
32
+
33
+ ```sh
34
+ printf '%s' "$ACCESS_API_TOKEN" | void platform zero-trust configure \
35
+ --public-apps --token-stdin --yes
36
+ ```
37
+
38
+ Add `--existing-projects public` when enabling from a disabled configuration.
39
+ Public-only rules cannot be combined with protected project choices. To switch an
40
+ already protected configuration to public-only rules, first disable it; Access may
41
+ block traffic during that transition in a Default-Deny account.
42
+
29
43
  Mutations support `--plan`, `--yes`, and `--timeout`; use `--plan` instead of
30
44
  `--yes` to inspect this change without applying it. The Access management token
31
45
  is accepted only on standard input. Zero Trust uses the Cloudflare account that
@@ -16,6 +16,11 @@ void platform status [id]
16
16
 
17
17
  `use` and `status` auto-select the only configured platform; with multiple platforms they show a picker interactively and require an id or URL in non-interactive use. A project with a recorded platform URL keeps using that platform when the global default changes.
18
18
 
19
+ For a self-hosted installation, `status <installation-id>` prints locally saved
20
+ lifecycle progress before checking the live API. The saved checkpoint may be out
21
+ of date. If live discovery fails during maintenance, the command still shows that
22
+ checkpoint and exits with an error; it does not confirm current availability.
23
+
19
24
  ## Operator commands {#operator-commands}
20
25
 
21
26
  Use `void platform` to administer the users and apps on your selected platform. Start with the [Platform Administration guide](../../guide/platform-administration.md) for signing in, giving people access, and investigating deployments.
@@ -156,7 +156,7 @@ Configuration for the [email integration](../guide/email.md).
156
156
 
157
157
  During development, `email.from` is the default sender in the local inbox. On a Void platform, use your project's shared sender or registered domain.
158
158
 
159
- For direct Cloudflare deployment, this address selects the mail domain and default sender. Use a zone or subdomain in your account; an existing mail provider's MX records are preserved. See [Email setup](../guide/email/domains.md#your-own-cloudflare-account).
159
+ For direct Cloudflare deployment, this address selects the mail domain and default sender. Use a zone or subdomain in your account; an existing mail provider's MX records are preserved. Without `email.from`, Void skips automatic setup and preserves authored `cloudflare.send_email` bindings and `cloudflare.addresses`; check their readiness yourself. `--require-email` still refuses deployment when automatic setup cannot be verified. See [Email setup](../guide/email/domains.md#your-own-cloudflare-account).
160
160
 
161
161
  ### `head`
162
162
 
@@ -27,7 +27,7 @@ Durable state is inferred from files in `durable-objects/`. For example, `durabl
27
27
 
28
28
  ### Standard mode
29
29
 
30
- When using Void's built-in routing (no meta-framework), these directories are scanned:
30
+ Native Void apps scan these directories by default. With [`sourceDir`](./config.md#sourcedir) configured, Void scans that source tree instead:
31
31
 
32
32
  | Directory | Contains |
33
33
  | ------------- | ------------------------------------------- |
@@ -36,10 +36,12 @@ When using Void's built-in routing (no meta-framework), these directories are sc
36
36
  | `queues/` | Queue consumers |
37
37
  | `pages/` | Page components and `.server.ts` companions |
38
38
  | `crons/` | Scheduled job handlers |
39
+ | `email/` | Inbound email handlers |
40
+ | `src/` | Application source |
39
41
 
40
42
  ### Framework mode
41
43
 
42
- When a meta-framework is detected (TanStack Start, React Router, SvelteKit, Nuxt, or Astro), a broader set of directories is scanned instead:
44
+ For [supported meta frameworks](../integrations/frameworks/overview.md), Void scans these directories:
43
45
 
44
46
  | Directory | Contains |
45
47
  | --------- | ----------------------- |
@@ -47,17 +49,18 @@ When a meta-framework is detected (TanStack Start, React Router, SvelteKit, Nuxt
47
49
  | `app/` | Framework app directory |
48
50
  | `routes/` | Framework routes |
49
51
  | `server/` | Server-side code |
52
+ | `pages/` | Framework pages |
53
+ | `crons/` | Scheduled job handlers |
54
+ | `queues/` | Queue consumers |
50
55
 
51
- Framework detection checks `package.json` for `@tanstack/react-start`, `@react-router/dev`, `@sveltejs/kit`, `nuxt`, or `astro` in dependencies.
52
-
53
- For SvelteKit, Nuxt, and Astro, add `voidPlugin()` to the framework's Vite config to enable inference during dev. See [Frameworks Integration](../integrations/frameworks/overview.md) for setup details.
56
+ Framework detection uses `package.json` dependencies and dev dependencies. Add `voidPlugin()` to your framework's Vite config to enable inference during development. The integration guides show the setup for each framework.
54
57
 
55
58
  ### Always scanned
56
59
 
57
60
  Regardless of mode, these are always checked:
58
61
 
59
62
  - **SSR entry** such as `src/main.ssr.ts`, for SSR apps that access bindings during rendering
60
- - **`src/`**, which is always scanned for auth imports unless it is already in the scan list for framework mode
63
+ - **Application source** in `src/` or your configured `sourceDir`, including resource and auth imports
61
64
  - **`durable-objects/`**, which is scanned for typed Durable Object state modules in native Void apps
62
65
 
63
66
  ## Custom Scan Directories
@@ -72,7 +75,7 @@ If your project organizes code in non-standard directories, you can override whi
72
75
  }
73
76
  ```
74
77
 
75
- Paths are relative to the project root. When `inference.scanDirs` is set, it replaces the default directories entirely. Defaults for the current mode are not merged in. The SSR entry and `src/` auth scan still apply either way.
78
+ Paths are relative to the project root. When `inference.scanDirs` is set, it replaces the default directories entirely. The SSR entry and application source scan still apply.
76
79
 
77
80
  ## Explicit Binding Overrides
78
81
 
@@ -95,4 +98,4 @@ Explicit values override only their named bindings. Omitted bindings continue to
95
98
 
96
99
  ## File Types
97
100
 
98
- Inference scans files matching `**/*.{ts,tsx,mts,js,jsx,mjs}` within each directory. Non-JS files (CSS, HTML, images) are ignored.
101
+ Inference scans `.ts`, `.tsx`, `.mts`, `.js`, `.jsx`, `.mjs`, and Astro frontmatter. Put server resource imports in these files or a page's `.server.ts` companion; Vue and Svelte component files are not scanned directly.
@@ -1,2 +0,0 @@
1
- import { a as getApiUrl, h as runPlatformLogin, s as getSiteDomain } from "./auth-CSkdO2Bb.mjs";
2
- export { getApiUrl, getSiteDomain, runPlatformLogin };
@@ -1,2 +0,0 @@
1
- import { t as prepareCfBuildOutput } from "./cf-build-output-BPqOT964.mjs";
2
- export { prepareCfBuildOutput };
@@ -1,2 +0,0 @@
1
- import { n as PlatformClient } from "./client-RV8NVeB8.mjs";
2
- export { PlatformClient };
@@ -1,2 +0,0 @@
1
- import { A as parseRootWranglerConfig, J as runDeploy, f as checkWranglerMigrationApplySet } from "./deploy-DzAIwqNU.mjs";
2
- export { checkWranglerMigrationApplySet, parseRootWranglerConfig, runDeploy };
@@ -1,2 +0,0 @@
1
- import { B as text, I as select, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
2
- export { isCancel, log, select, text };