void 1.1.0 → 1.1.11

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 (194) hide show
  1. package/dist/{account-cmd-BTcUzv9L.mjs → account-cmd-R35a4Oa8.mjs} +3 -3
  2. package/dist/{application-analysis-AB_YYWgH.mjs → application-analysis-D7nNmNJb.mjs} +6 -6
  3. package/dist/{application-routing-L7V-TFhZ.mjs → application-routing-CZH66gXn.mjs} +1 -1
  4. package/dist/{auth-link-DUJuvRx5.mjs → auth-link-VHmiKZmP.mjs} +3 -3
  5. package/dist/{auth-migrations-Cgs0k6lS.mjs → auth-migrations-BO27GDNr.mjs} +38 -2
  6. package/dist/{auth-router-CIxiMG7i.mjs → auth-router-O_Wrs5kg.mjs} +5 -4
  7. package/dist/{better-auth-shared-B74NJIus.d.mts → better-auth-shared-Bv18bB-l.d.mts} +2 -0
  8. package/dist/{better-auth-shared-CMXlZG7W.mjs → better-auth-shared-D-6z0q0f.mjs} +28 -1
  9. package/dist/{build-cmd-BkIv25PA.mjs → build-cmd-CMZiMn46.mjs} +1 -1
  10. package/dist/{cache-Ctzfig-W.mjs → cache-TZ5Ab3d7.mjs} +1 -1
  11. package/dist/{cancel-deploy-CD9o-SsC.mjs → cancel-deploy-DXoR6oC3.mjs} +1 -1
  12. package/dist/cli/cli.mjs +69 -50
  13. package/dist/cli/env-schema-probe.mjs +3 -3
  14. package/dist/client-DrdeJgHR.mjs +1 -0
  15. package/dist/{client-DM9Kcf4e.mjs → client-GuSO3v_x.mjs} +1 -1
  16. package/dist/{cloudflare-auth-CqFBDo52.mjs → cloudflare-auth-DSvBc1Gu.mjs} +1 -1
  17. package/dist/{cloudflare-cmd-BIAF_BIY.mjs → cloudflare-cmd-ZSErUl6Y.mjs} +3 -3
  18. package/dist/{cloudflare-config-DV60XFFK.mjs → cloudflare-config-rdFOys4X.mjs} +2 -2
  19. package/dist/{cloudflare-connect-WjwnVOJA.mjs → cloudflare-connect-BN-k2kD-.mjs} +2 -2
  20. package/dist/{cloudflare-operations-CrSUFRzJ.mjs → cloudflare-operations-Cm8lVx7W.mjs} +1 -1
  21. package/dist/{cloudflare-operations-B42EZeJy.mjs → cloudflare-operations-DH3GedbV.mjs} +6 -6
  22. package/dist/{cloudflare-process-CeDWJRhj.mjs → cloudflare-process-CZJ4viYl.mjs} +2 -2
  23. package/dist/collect-BWhkgtAn.mjs +1 -0
  24. package/dist/{collect-xjffdCdk.mjs → collect-Dew86qce.mjs} +4 -3
  25. package/dist/{config-D0GY5ItR.mjs → config-CyUJzi3q.mjs} +1 -1
  26. package/dist/{config-Bx_1SpnO.mjs → config-D26zcdKy.mjs} +2 -2
  27. package/dist/{config-BEm9vRvS.mjs → config-DC5llZaI.mjs} +2 -2
  28. package/dist/{config-QrJWu0IX.mjs → config-DYJV8aEH.mjs} +1 -1
  29. package/dist/{connect-CKtk-EZe.mjs → connect-yQuLbuiJ.mjs} +4 -4
  30. package/dist/{create-project-B-ewF_Af.mjs → create-project-CGOo_OL_.mjs} +1 -1
  31. package/dist/{create-project-yInGo72M.mjs → create-project-DEEWJX_M.mjs} +1 -1
  32. package/dist/database-provider.d.mts +6 -0
  33. package/dist/{db-7I_gfdVq.mjs → db-COI-yTJE.mjs} +255 -110
  34. package/dist/{db-types-Bb4WBWIs.mjs → db-types-NGxPwnlt.mjs} +1 -1
  35. package/dist/{delete-Cy-M1u-r.mjs → delete-PgN6L_9N.mjs} +1 -1
  36. package/dist/deploy-CxNgEYr4.mjs +2 -0
  37. package/dist/{deploy-BYYlnsiy.mjs → deploy-DsW-PrRQ.mjs} +38 -36
  38. package/dist/{deploy-managed-static-Ca4TFdmx.mjs → deploy-managed-static-Dqz06S2u.mjs} +20 -20
  39. package/dist/{deploy-transport-DWlWBe6M.mjs → deploy-transport-nY3vLXPL.mjs} +2 -2
  40. package/dist/deploy.mjs +5 -5
  41. package/dist/discover-D4TPKo57.mjs +1 -0
  42. package/dist/{discover-D2PGT63u.mjs → discover-LaV0tbIu.mjs} +1 -1
  43. package/dist/{dispatch-DrTTk8Xg.mjs → dispatch-BAbbn3jg.mjs} +6 -6
  44. package/dist/{domain-CZGxPv9u.mjs → domain-DKlNI0SR.mjs} +2 -2
  45. package/dist/{drizzle-CF84FOVM.mjs → drizzle-BQfyvQKX.mjs} +13 -2
  46. package/dist/{email-DzyNVuoU.mjs → email-C0s3OvJk.mjs} +10 -11
  47. package/dist/{email-cloudflare-DfG6UEMm.mjs → email-cloudflare-etpKiITL.mjs} +7 -10
  48. package/dist/{entry-ehmBvs5w.mjs → entry-B_0IhV64.mjs} +1 -1
  49. package/dist/{env-Nx3yf50r.mjs → env-BX2JFsgF.mjs} +4 -4
  50. package/dist/{env-types-DS2_y4X8.mjs → env-types-GRchm5dw.mjs} +1 -1
  51. package/dist/{env-validation-BT7z-qpQ.mjs → env-validation-CuGfWRJd.mjs} +1 -1
  52. package/dist/{env-validation-DYxjz_Wo.mjs → env-validation-D_KyMdab.mjs} +2 -2
  53. package/dist/{fetch-BPCYVi3H.d.mts → fetch-DHLOuPyk.d.mts} +2 -2
  54. package/dist/{fetch-stream-obvZ7fvO.d.mts → fetch-stream-CNxOrBdP.d.mts} +1 -1
  55. package/dist/{gen-CufHEf42.mjs → gen-Bj6ZkOcI.mjs} +25 -19
  56. package/dist/gen-DsCukhuw.mjs +1 -0
  57. package/dist/{generate-Dat0UTry.mjs → generate-B1m4Cm4n.mjs} +1 -1
  58. package/dist/{generate-ClI89brV.mjs → generate-DkEb9rL-.mjs} +1 -1
  59. package/dist/{github-cmd-FU8EjFyU.mjs → github-cmd-DQDryS-5.mjs} +1 -1
  60. package/dist/{headers-Di1FsD3e.mjs → headers-Bi4bOAwp.mjs} +1 -1
  61. package/dist/{help-BT2hovNI.mjs → help-D49SL_lN.mjs} +16 -12
  62. package/dist/help-DOFygYi4.mjs +1 -0
  63. package/dist/{inbound-brj2-TM5.d.mts → inbound-Da7XsjH3.d.mts} +6 -12
  64. package/dist/index.mjs +103 -57
  65. package/dist/{info-l249eUdH.mjs → info-Bxunp14X.mjs} +4 -4
  66. package/dist/{init-D0A6M64Q.mjs → init-DyTEY04s.mjs} +50 -27
  67. package/dist/{link-WMoJFf4i.mjs → link-CgOVn9EC.mjs} +2 -2
  68. package/dist/{list-CQ2EQEHL.mjs → list-CUfD9RSb.mjs} +2 -2
  69. package/dist/{local-d1-BxvQYEFi.mjs → local-d1-CpaPbd_L.mjs} +5 -5
  70. package/dist/{login-C2T1oVG-.mjs → login-BJvGW5Eu.mjs} +2 -2
  71. package/dist/login-alAlxw4S.mjs +1 -0
  72. package/dist/{logs-DnC1d7xB.mjs → logs-DeizBI4j.mjs} +2 -2
  73. package/dist/{migrate-BDIprOYd.mjs → migrate-8rk56vV8.mjs} +4 -4
  74. package/dist/migrate-D2odrAmh.mjs +1 -0
  75. package/dist/{neon-n74ta1Pr.mjs → neon-DTZr7Bu7.mjs} +0 -1
  76. package/dist/nitro.mjs +3 -3
  77. package/dist/{node-cPadMgUO.mjs → node-uN8_zxJr.mjs} +15 -9
  78. package/dist/{operator-cmd-DHieWtFp.mjs → operator-cmd-CA5QQyvE.mjs} +3 -3
  79. package/dist/operator-cmd-D7toMPJ9.mjs +1 -0
  80. package/dist/pages/client.d.mts +1 -1
  81. package/dist/pages/index.d.mts +1 -1
  82. package/dist/pages/index.mjs +4 -4
  83. package/dist/pages/islands-plugin.d.mts +1 -1
  84. package/dist/pages/islands-plugin.mjs +1 -1
  85. package/dist/pages/protocol.d.mts +1 -1
  86. package/dist/{platform-args-CaCL_1Ch.mjs → platform-args-B7ke06up.mjs} +1 -4
  87. package/dist/platform-args-B_LrqEZB.mjs +1 -0
  88. package/dist/{platform-auth-config-Z16-I8nT.mjs → platform-auth-config-CZaY812e.mjs} +3 -3
  89. package/dist/{platform-auth-protection-BXwZiJSF.mjs → platform-auth-protection-U9HCqoXv.mjs} +2 -2
  90. package/dist/{platform-auth-recovery-CXjfqyOv.mjs → platform-auth-recovery-B0BV2hfV.mjs} +2 -2
  91. package/dist/{platform-cmd-DaAOiWTl.mjs → platform-cmd-CXrjk4fb.mjs} +4 -4
  92. package/dist/{platform-cmd-PT4YwMLM.mjs → platform-cmd-D9lwFpcl.mjs} +1 -1
  93. package/dist/{platform-domain-CxpvUeo0.mjs → platform-domain-CXyq-68_.mjs} +2 -2
  94. package/dist/{platform-lifecycle-DBiS0cJd.mjs → platform-lifecycle-D0TdyXbN.mjs} +20 -11
  95. package/dist/{platform-lifecycle-u9pMOvxC.mjs → platform-lifecycle-Dz2cJsLX.mjs} +1 -1
  96. package/dist/{platform-management-DvBS83rC.mjs → platform-management-BvgbusqL.mjs} +1 -1
  97. package/dist/{platform-management-DhEFdQAf.mjs → platform-management-CnXhgxTM.mjs} +1 -3
  98. package/dist/{platform-recovery-BUGOB4RC.mjs → platform-recovery-CH_fThW6.mjs} +2 -2
  99. package/dist/{plugin-inference-DsARdQKE.mjs → plugin-inference-Bekzjuqw.mjs} +2 -2
  100. package/dist/{prepare-PQCgsny0.mjs → prepare-2XD6kh77.mjs} +1 -1
  101. package/dist/{prepare-DEB5SeVJ.mjs → prepare-DepAGBcV.mjs} +9 -9
  102. package/dist/prepare-EVEbQ9n2.mjs +1 -0
  103. package/dist/{project-cmd-DVatD8Ev.mjs → project-cmd-CpLYflCH.mjs} +16 -16
  104. package/dist/{project-paths-DMvEeSau.mjs → project-paths-DGu_QZ_Q.mjs} +1 -1
  105. package/dist/{project-team-DJrWEAG1.mjs → project-team-CTSY7W7Q.mjs} +1 -1
  106. package/dist/{project-token-CBgLBuL6.mjs → project-token-Cybtlfbl.mjs} +1 -1
  107. package/dist/{project-tsconfig-bveqhlYA.mjs → project-tsconfig-Itv1f4WC.mjs} +1 -1
  108. package/dist/{project-zero-trust-92gLtZ25.mjs → project-zero-trust-DKOtqyvu.mjs} +1 -1
  109. package/dist/{protocol-4H7V_3Os.d.mts → protocol-B8sI8dRD.d.mts} +1 -1
  110. package/dist/{providers-BXuhmuub.mjs → providers-BUHwJlmM.mjs} +10 -1
  111. package/dist/{provision-BnSSkiED.mjs → provision-BuifYvLc.mjs} +63 -64
  112. package/dist/provision-UcYjpTRh.mjs +1 -0
  113. package/dist/r2-conditions-B8xUgJRc.mjs +61 -0
  114. package/dist/{requests-7W1Pygt2.mjs → requests-Ryiazz9i.mjs} +1 -1
  115. package/dist/{rollback-BcASVnwP.mjs → rollback-Or0EV3rP.mjs} +2 -2
  116. package/dist/{runner-CabsQ-iM.mjs → runner-3uGC-oLF.mjs} +9 -7
  117. package/dist/{runner-So9mYfcm.mjs → runner-WCdfeI0q.mjs} +1 -1
  118. package/dist/{runner-mysql-BhRaONkO.mjs → runner-mysql-BWmbk5IE.mjs} +1 -1
  119. package/dist/{runner-mysql-DWwE8jKi.mjs → runner-mysql-BcHnLUuM.mjs} +1 -1
  120. package/dist/{runner-pg-_Xncr3H5.mjs → runner-pg-Cgp-cr_p.mjs} +1 -1
  121. package/dist/{runner-pg-BRemq_GX.mjs → runner-pg-Cr3qrqi4.mjs} +1 -1
  122. package/dist/runtime/ai.d.mts +4 -0
  123. package/dist/runtime/ai.mjs +2 -37
  124. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  125. package/dist/runtime/better-auth-mysql.mjs +2 -2
  126. package/dist/runtime/better-auth-pg.d.mts +1 -1
  127. package/dist/runtime/better-auth-pg.mjs +2 -2
  128. package/dist/runtime/better-auth.d.mts +1 -1
  129. package/dist/runtime/better-auth.mjs +2 -2
  130. package/dist/runtime/client-react.d.mts +2 -2
  131. package/dist/runtime/client-solid.d.mts +2 -2
  132. package/dist/runtime/client-svelte.d.mts +2 -2
  133. package/dist/runtime/client-vue.d.mts +2 -2
  134. package/dist/runtime/client.d.mts +2 -2
  135. package/dist/runtime/email/testing.d.mts +1 -1
  136. package/dist/runtime/email.d.mts +2 -3
  137. package/dist/runtime/email.mjs +2 -3
  138. package/dist/runtime/fetch-stream.d.mts +2 -2
  139. package/dist/runtime/fetch.d.mts +1 -1
  140. package/dist/runtime/migration-handler-mysql.mjs +4 -4
  141. package/dist/runtime/migration-handler-pg.mjs +9 -1
  142. package/dist/runtime/remote/binding-handler.mjs +25 -25
  143. package/dist/runtime/remote/index.d.mts +3 -0
  144. package/dist/runtime/remote/index.mjs +86 -23
  145. package/dist/runtime/routing.d.mts +2 -2
  146. package/dist/runtime/sse-client.d.mts +4 -0
  147. package/dist/runtime/ws-server.d.mts +2 -2
  148. package/dist/runtime/ws.d.mts +1 -1
  149. package/dist/{scan-C0BMdmEd.mjs → scan-D2-FcLHs.mjs} +13 -5
  150. package/dist/{secret-bg73f1Ge.mjs → secret-CClHaFxm.mjs} +3 -3
  151. package/dist/{types-BAp5AEBU.d.mts → types-7AIz0OZu.d.mts} +1 -1
  152. package/dist/{validate-CheZGRE7.mjs → validate-CnZPMq4q.mjs} +22 -17
  153. package/dist/validate-D7Wn8PUX.mjs +1 -0
  154. package/dist/{version-metadata-DIrqEHQo.mjs → version-metadata-B1Bm2wSq.mjs} +1 -1
  155. package/dist/{wrangler-BYs07Rxy.mjs → wrangler-C9XSzrju.mjs} +3 -3
  156. package/dist/wrangler-DAdxHEzh.mjs +1 -0
  157. package/dist/{wrapper-CwhpNWtH.mjs → wrapper-BOigE1xJ.mjs} +4 -4
  158. package/dist/{ws-aKVYB-fA.d.mts → ws-CsBNxv86.d.mts} +5 -0
  159. package/docs/guide/auth.md +1 -1
  160. package/docs/guide/database/d1.md +2 -2
  161. package/docs/guide/database/mysql.md +1 -1
  162. package/docs/guide/edge/headers.md +10 -2
  163. package/docs/guide/edge/revalidation.md +2 -0
  164. package/docs/guide/email/receiving.md +1 -1
  165. package/docs/guide/email/sending.md +1 -1
  166. package/docs/guide/pages-routing/islands.md +2 -2
  167. package/docs/guide/platform/administration/connected-apps.md +18 -2
  168. package/docs/guide/remote-dev.md +2 -0
  169. package/docs/guide/websockets.md +2 -2
  170. package/docs/index.md +78 -22
  171. package/docs/reference/api/pages.md +7 -5
  172. package/docs/reference/api.md +2 -0
  173. package/docs/reference/cli/database.md +7 -5
  174. package/docs/reference/cli/deploy.md +12 -10
  175. package/docs/reference/cli/email.md +1 -1
  176. package/docs/reference/cli/generate.md +1 -1
  177. package/docs/reference/cli/platform-installation.md +2 -2
  178. package/docs/reference/cli/project.md +4 -2
  179. package/docs/reference/cli.md +1 -1
  180. package/docs/reference/config.md +11 -1
  181. package/package.json +7 -7
  182. package/dist/client-B60PwCC4.mjs +0 -1
  183. package/dist/collect-Cae8A7Zr.mjs +0 -1
  184. package/dist/deploy-9lgfhrXS.mjs +0 -2
  185. package/dist/discover-ClzFSwns.mjs +0 -1
  186. package/dist/gen-sXyp5DFO.mjs +0 -1
  187. package/dist/help-i2YGGnTH.mjs +0 -1
  188. package/dist/login-XD844Xs-.mjs +0 -1
  189. package/dist/migrate-BRwU-blY.mjs +0 -1
  190. package/dist/operator-cmd-D6gnZsnK.mjs +0 -1
  191. package/dist/platform-args-B0HeTh0C.mjs +0 -1
  192. package/dist/prepare-CYT6tAzD.mjs +0 -1
  193. package/dist/r2-conditions-D1Wk8i7b.mjs +0 -30
  194. package/dist/validate-BQFdf0Pi.mjs +0 -1
@@ -59,6 +59,8 @@ When the dev server starts with remote mode active, it prints:
59
59
 
60
60
  - **Network latency:** each binding call makes a network request, so responses may be slower than local development.
61
61
  - **R2 multipart uploads:** `createMultipartUpload()` and `resumeMultipartUpload()` are not supported in remote mode.
62
+ - **R2 range and conditional reads:** in remote mode, `get()` ignores request headers passed as `range` or `onlyIf` and returns the whole object. For example, `get(key, { range: request.headers, onlyIf: request.headers })` returns the whole object when the request has a `Range` or `If-None-Match` header. `get()` throws when `range` or `onlyIf` is an object that asks for a byte range or a condition, such as `{ offset: 0, length: 100 }` or `{ etagMatches: etag }`.
62
63
  - **R2 conditional writes:** `put(..., { onlyIf })` requires an updated platform and project deployment. Failed preconditions return `null`.
64
+ - **R2 metadata and list options:** custom metadata, HTTP metadata, and `list()` with `delimiter`, `startAfter`, or `include` require an updated project deployment. Without one, `list()` with these options and `put()` with metadata other than `contentType` throw an error.
63
65
  - **D1 dump:** `db.dump()` is not supported in remote mode.
64
66
  - **D1 batches:** `db.batch()` requires an updated platform and project deployment.
@@ -151,7 +151,7 @@ Messages are JSON events. Raw string and binary messages are not supported.
151
151
 
152
152
  When Void auth is enabled, every WebSocket hook receives the current user as `ctx.user`, or `null` for an anonymous connection. Use `onBeforeConnect` to reject unauthenticated clients.
153
153
 
154
- Connections from another origin are anonymous unless that origin is in your auth `trustedOrigins`. If you read your own cookies from `ctx.request`, check its `Origin` header yourself.
154
+ Connections from another origin are anonymous unless that origin is in your auth `trustedOrigins`. If you read your own cookies from `ctx.request` in `onBeforeConnect`, check its `Origin` header yourself.
155
155
 
156
156
  `ctx.user` is resolved when the socket connects and stays the same for that connection, even if the user later signs out or the session is revoked. For actions that must respect a ban or role change, re-check your own records in `onMessage` and close the connection with `ctx.connection.close()` in rooms or `ctx.socket.close()` in `defineWebSocket()`.
157
157
 
@@ -173,7 +173,7 @@ Every hook receives a context with:
173
173
  - `ctx.id`: deterministic route instance id
174
174
  - `ctx.params`: matched route params
175
175
  - `ctx.user`: resolved auth user or `null`
176
- - `ctx.request`
176
+ - `ctx.request`: the HTTP request in `onBeforeConnect`, `onConnect`, and `onRequest`. In `onMessage` and `onClose`, it is a placeholder without headers, cookies, or query. To keep request data, save it in `onConnect` with `ctx.connection.setState()` in rooms or `ctx.socket.setState()` in `defineWebSocket()`. Read it later from `ctx.connection.state` or `ctx.socket.state`.
177
177
  - `ctx.env`
178
178
  - `ctx.storage`
179
179
 
package/docs/index.md CHANGED
@@ -4,36 +4,92 @@ theme: dark
4
4
 
5
5
  hero:
6
6
  name: Void
7
- text: Full-stack apps with Vite
8
- tagline: Add server routes, data, and Cloudflare resources to your app. Deploy with one command.
7
+ text: Build with Vite. Deploy with Void.
8
+ tagline: Void is a CLI, platform, and full-stack SDK that unifies building & deploying apps.
9
9
  actions:
10
10
  - theme: brand
11
11
  text: Get Started
12
12
  link: ./guide/
13
- image:
14
- src: /hero.svg
15
- alt: Void deployment platform
16
-
13
+ - theme: alt
14
+ text: View on GitHub
15
+ link: https://github.com/voidzero-dev/void
16
+ - theme: alt
17
+ text: Read the Announcement
18
+ link: https://blog.cloudflare.com/deploy-with-void
17
19
  features:
18
- - iconify: lucide:terminal
19
- title: Deploy with One Command
20
- details: '`void deploy` builds your app, provisions resources, applies migrations, and deploys it.'
21
20
  - iconify: lucide:layers
22
- title: Full-Stack Features
23
- details: Use a database, KV, object storage, AI, authentication, queues, and cron jobs as your app needs them.
21
+ visual: stack
22
+ title: Full-Stack, Inferred
23
+ details: Import what you need. Void provides local resources and provisions them on deploy.
24
+ highlights:
25
+ - Server routes and authentication
26
+ - Databases, storage, and AI
27
+ - Queues and scheduled jobs
28
+ guide:
29
+ text: Explore the SDK
30
+ link: /guide/
24
31
  - iconify: lucide:wand-sparkles
25
- title: Resources from Your Code
26
- details: Void detects supported resources from your imports and provisions them on deploy. Configure existing resources explicitly.
27
- - iconify: lucide:shield-check
28
- title: Deploy with Confidence
29
- details: Run on Cloudflare Workers with checked migrations, versioned deployments, logs, and rollback.
32
+ visual: resources
33
+ title: Typed from Database to UI
34
+ details: Share types across your database, server loaders, and page components.
35
+ highlights:
36
+ - Types from your database schema
37
+ - Typed loaders, actions, and APIs
38
+ - Server code stays on the server
39
+ guide:
40
+ text: Explore Type Safety
41
+ link: /guide/type-safety
30
42
  - iconify: lucide:blocks
31
- title: Choose Your Framework
32
- details: Use React, Vue, Svelte, Solid, or a supported Vite framework with SSR, SSG, ISR, and islands.
33
- - iconify: lucide:bot
34
- title: Work with Coding Agents
35
- details: Void provides project instructions and skills to help coding agents build and deploy your app.
36
-
43
+ visual: frameworks
44
+ title: Use Your Favorite Framework
45
+ details: Build with Void's adapters or keep your existing Vite framework.
46
+ highlights:
47
+ - Ships with adapters for Async React, Vue, Svelte, and Solid
48
+ - Supports TanStack Start, SvelteKit, Nuxt, and more
49
+ - Build APIs, SPAs, or server-rendered pages
50
+ guide:
51
+ text: Explore Frameworks
52
+ link: /integrations/frameworks/overview
53
+ platform_features:
54
+ - id: platform-ai-coding
55
+ iconify: lucide:bot
56
+ title: Secure Vibe Coding for Your Team
57
+ details: Let your team build and deploy with coding agents while admins retain control of Cloudflare access.
58
+ highlights:
59
+ - Enable non-technical teammates to build their own apps
60
+ - Keep Cloudflare credentials with your admin team
61
+ - Deploy prototypes fast and share apps for feedback
62
+ guide:
63
+ text: Explore team deployments
64
+ link: /guide/self-hosted-platform
65
+ visual: rive
66
+ image_alt: Animated illustration of apps being built for a team
67
+ - id: platform-control-plane
68
+ iconify: lucide:panels-top-left
69
+ visual: resources
70
+ title: Control Plane for Managing Apps
71
+ details: Manage users, projects, deployments, and platform health from the admin UI or CLI.
72
+ highlights:
73
+ - Manage users and project access & resources
74
+ - Inspect deployments, logs, and rollbacks
75
+ - Monitor platform health and usage
76
+ guide:
77
+ text: Platform administration
78
+ link: /guide/platform-administration
79
+ image_alt: List of Void platform commands for access, builds, invitations, and administration
80
+ - id: platform-security
81
+ iconify: lucide:shield-check
82
+ title: Bring your Own Security
83
+ details: Fork and customize your own Void platform based on your team's security standards.
84
+ highlights:
85
+ - Manage access through Cloudflare Access, Google, GitHub, or OIDC
86
+ - Control who can sign in and deploy
87
+ - Protect projects with your access policies
88
+ guide:
89
+ text: Configure platform access
90
+ link: /guide/platform/administration/access
91
+ visual: rive
92
+ image_alt: Animated illustration of self-hosted platform security
37
93
  footer_heading: Build with Vite. Deploy with Void.
38
94
  footer_subheading: Server code, resources, and deployment in one workflow.
39
95
  ---
@@ -50,7 +50,7 @@ Imported from `"@void/vue"`.
50
50
  | `useParams()` | Returns dynamic route params for the page currently being rendered. |
51
51
  | `useNavigation()` | Returns pending navigation state: `{ state, location, method }`, where `state` is `"idle"`, `"loading"`, or `"submitting"` and `location` is the pending destination. |
52
52
  | `useForm(url, defaults, options?)` | Typed reactive form helper bound to a page action URL. Returns `{ data, post, put, patch, delete, pending, errors, error, hasChanges, wasSuccessful, recentlySuccessful, reset, clearErrors, clearError }`. |
53
- | `useIslandForm(defaults)` | Form helper for island components where the action URL is inferred from the current island request. Returns the same form state and submit helpers as `useForm()`. |
53
+ | `useIslandForm(defaults)` | Form helper for island components. Same form state as `useForm()`, plus `submit(url, method)`. `post(url)`, `put(url)`, `patch(url)`, and `delete(url)` take the action URL and submit with `fetch()`. |
54
54
  | `action(url, options?)` | Awaitable one-shot page action helper. Uses `POST` by default and accepts `{ data, method, params }`, where `method` can be `"PUT"`, `"PATCH"`, or `"DELETE"`. Returns an `ActionResult`. |
55
55
  | `useShared()` | Returns shared data injected by middleware via `c.set("shared", {...})`. |
56
56
 
@@ -102,7 +102,7 @@ Imported from `"@void/react"`.
102
102
  | `useParams()` | Returns dynamic route params for the page currently being rendered. |
103
103
  | `useNavigation()` | Returns pending navigation state: `{ state, location, method }`, where `state` is `"idle"`, `"loading"`, or `"submitting"` and `location` is the pending destination. |
104
104
  | `useForm(url, defaults, options?)` | Form helper hook. Returns `{ data, setData, post, put, patch, delete, pending, errors, error, hasChanges, wasSuccessful, recentlySuccessful, reset, clearErrors, clearError }`. |
105
- | `useIslandForm(defaults)` | Form helper hook for island components where the action URL is inferred from the current island request. Returns the same form state and submit helpers as `useForm()`. |
105
+ | `useIslandForm(defaults)` | Form helper hook for island components. Same form state as `useForm()`. `post(url)`, `put(url)`, `patch(url)`, and `delete(url)` take the action URL and submit with `fetch()`. |
106
106
  | `action(url, options?)` | Awaitable one-shot page action helper. Uses `POST` by default and accepts `{ data, method, params }`, where `method` can be `"PUT"`, `"PATCH"`, or `"DELETE"`. Returns an `ActionResult`. |
107
107
  | `useShared()` | Returns shared data injected by middleware via `c.set("shared", {...})`. |
108
108
  | `Deferred<T>` | React-only prop type for `defer()` results. It is `Promise<T>` and is consumed with React `use()`. |
@@ -159,7 +159,7 @@ Imported from `"@void/svelte"`.
159
159
  | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
160
160
  | `Link` | Svelte component for SPA navigation. Renders `<a>` for GET, `<button>` for non-GET methods. Props: `href`, `method`, `data`, `prefetch`, `cacheFor`, `preserveScroll`, `preserveState`, `replace`, `reloadDocument`, `viewTransition`, `onNavigate`. |
161
161
  | `useForm(url, defaults, options?)` | Form helper using Svelte 5 runes. Returns `{ data, post, put, patch, delete, pending, errors, error, hasChanges, wasSuccessful, recentlySuccessful, reset, clearErrors, clearError }`. |
162
- | `useIslandForm(defaults)` | Form helper for island components where the action URL is inferred from the current island request. Returns the same form state and submit helpers as `useForm()`. |
162
+ | `useIslandForm(defaults)` | Form helper for island components. Same form state as `useForm()`, plus `submit(url, method)`. `post(url)`, `put(url)`, `patch(url)`, and `delete(url)` take the action URL and submit with `fetch()`. |
163
163
  | `action(url, options?)` | Awaitable one-shot page action helper. Uses `POST` by default and accepts `{ data, method, params }`, where `method` can be `"PUT"`, `"PATCH"`, or `"DELETE"`. Returns an `ActionResult`. |
164
164
  | `useShared()` | Returns shared data injected by middleware via `c.set("shared", {...})`. |
165
165
  | `useRouter()` | Returns the Void Router with current route state (`url`, `path`, `query`, `params`) and navigation methods: `visit`, `refresh`, awaitable `prefetch`, `flush`, `flushAll`. |
@@ -209,7 +209,7 @@ Imported from `"@void/solid"`.
209
209
  | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
210
210
  | `Link` | Solid component for SPA navigation. Renders `<a>` for GET, `<button>` for non-GET methods. Props: `href`, `method`, `data`, `prefetch`, `cacheFor`, `preserveScroll`, `preserveState`, `replace`, `reloadDocument`, `viewTransition`, `onNavigate`. |
211
211
  | `useForm(url, defaults, options?)` | Form helper using Solid stores. Returns `{ data, setData, post, put, patch, delete, pending, errors, error, hasChanges, wasSuccessful, recentlySuccessful, reset, clearErrors, clearError }`. |
212
- | `useIslandForm(defaults)` | Form helper for island components where the action URL is inferred from the current island request. Returns the same form state and submit helpers as `useForm()`. |
212
+ | `useIslandForm(defaults)` | Form helper for island components. Same form state as `useForm()`. `post(url)`, `put(url)`, `patch(url)`, and `delete(url)` take the action URL and submit with `fetch()`. |
213
213
  | `action(url, options?)` | Awaitable one-shot page action helper. Uses `POST` by default and accepts `{ data, method, params }`, where `method` can be `"PUT"`, `"PATCH"`, or `"DELETE"`. Returns an `ActionResult`. |
214
214
  | `useShared()` | Returns shared data injected by middleware via `c.set("shared", {...})`. |
215
215
  | `useRouter()` | Returns the Void Router with current route state (`url`, `path`, `query`, `params`) and navigation methods: `visit`, `refresh`, awaitable `prefetch`, `flush`, `flushAll`. |
@@ -235,11 +235,13 @@ export default defineConfig({
235
235
  | Import path | Contents |
236
236
  | ---------------------------- | ---------------------------------------------------------------------------------------- |
237
237
  | `@void/md/plugin` | `voidMarkdown(options?)`, `MarkdownOptions`, `MdPage` |
238
- | `@void/md` | `useFrontmatter()`, `FrontmatterContext`, `setFrontmatter()`, `MdPage` |
238
+ | `@void/md` | `useFrontmatter()`, `MdPage` |
239
239
  | `@void/md/pages` | Generated metadata for Markdown pages, used for navigation, sidebars, and search indexes |
240
240
  | `@void/md/theme.css` | Full Markdown theme styles |
241
241
  | `@void/md/theme-content.css` | Content-only Markdown styles for apps that provide their own shell/layout |
242
242
 
243
+ `FrontmatterContext` and `setFrontmatter()` are deprecated. Use `useFrontmatter()`.
244
+
243
245
  See [Markdown Pages](../../guide/pages-routing/markdown.md) for setup and framework-specific examples.
244
246
 
245
247
  ## Form
@@ -66,6 +66,8 @@ Import Void's app-facing APIs from these paths:
66
66
  | `void/log` | `logger` structured logging helper |
67
67
  | `void/routes` | `RouteMap` and `WebSocketRouteMap` stubs (types only) |
68
68
  | `void/queues` | `queues` proxy for sending messages to typed queues |
69
+ | `void/email` | `sendEmail`, `createEmail`, `defineEmail`, `parseEmail`, `replyEmail`, `MimeError`, `ParseEmailError`, and address, attachment, result, and handler types. See [Email](../guide/email.md). |
70
+ | `void/email/testing` | `createEmailTestHarness` and `createInboundTestHarness` to capture sends and deliver test messages to `email/` handlers. |
69
71
  | `void/sandbox` | `getSandbox`, `sandbox`, `SandboxLimitError`, `SandboxUnavailableError`, and the SDK 1.0 file, backup, and mount helpers. `getSandbox(id)` resolves a client. Commands, files, port requests, and process completion return promises; limits reject with `SandboxLimitError`, which extends `UsageLimit`. Container state lasts until inactivity (default ten minutes), a crash, or a restart. See [Sandboxes](../guide/sandboxes.md) for the API and deployment requirements. |
70
72
  | `void/env` | `defineEnv`, `env`, schema helpers (`string`, `number`, `boolean`, `url`, `email`, `oneOf`, `json`), and global Cloudflare env types |
71
73
  | `void/nitro` | Nitro module for Nuxt and Analog. Add `'void/nitro'` to the Nitro `modules` so server routes get the app's `void/db` and `@schema` |
@@ -20,7 +20,7 @@ For SQLite, Void checks that the migration history applies to a fresh database.
20
20
 
21
21
  ## `void db status` {#void-db-status}
22
22
 
23
- Show migration status. Displays which migrations are applied or pending locally, then uses the saved deployment target for remote status: the hosted API for Void projects, the pinned D1 database and its configured migration table for direct Cloudflare SQLite projects, or the shell `DATABASE_URL` for direct Cloudflare PostgreSQL/MySQL projects. If the remote credential or service is unavailable, local status is still shown.
23
+ Show migration status. Displays which migrations are applied or pending locally, then uses the saved deployment target for remote status: the hosted API for Void projects, the pinned D1 database and its configured migration table for direct Cloudflare SQLite projects, or the shell `DATABASE_URL` for direct Cloudflare PostgreSQL/MySQL projects. If the remote credential or service is unavailable, local status is still shown. If the local PostgreSQL or MySQL database cannot be read, local status shows `unknown`; the command fails when remote status is not available either.
24
24
 
25
25
  ## `void db reset` {#void-db-reset}
26
26
 
@@ -28,7 +28,7 @@ Show migration status. Displays which migrations are applied or pending locally,
28
28
  void db reset [--yes]
29
29
  ```
30
30
 
31
- Drop the development database and re-apply all migrations. D1 resets the local database; PostgreSQL and MySQL drop all tables in the `DATABASE_URL` database from `.env`.
31
+ Drop the development database and re-apply all migrations. D1 resets the local database. PostgreSQL drops the tables, views, sequences, and custom types in the `public` schema of the `DATABASE_URL` database from `.env` and keeps installed extensions. If a table, view, or function in another schema uses one of those views, sequences, or types, reset stops before it drops anything and lists those objects. MySQL drops every table and view in that database.
32
32
 
33
33
  When that `DATABASE_URL` points to a host other than `localhost`, Void names the database and asks before dropping its tables. Pass `--yes` to skip the prompt in scripts and CI; without a terminal, the command stops unless `--yes` is set. If `.env` uses the same URL as your deployment (for example after `void db connect`), reset drops the deployed tables.
34
34
 
@@ -73,7 +73,7 @@ void db migrate [--remote]
73
73
 
74
74
  Apply pending migrations to the local database without resetting. Unlike `void db reset`, this preserves existing data and only runs migrations that haven't been applied yet.
75
75
 
76
- Pass `--remote` to apply pending migrations to the saved target. Hosted projects require a Void login and link. Direct Cloudflare D1 projects use the binding's configured migration directory, table, and pattern; direct PostgreSQL and MySQL projects use the shell `DATABASE_URL`.
76
+ Pass `--remote` to apply pending migrations to the saved target. Hosted projects require a Void login and link. Direct Cloudflare D1 projects use the binding's configured migration directory, table, and pattern. The D1 binding must set `migrations_dir`. Direct PostgreSQL and MySQL projects use the shell `DATABASE_URL`.
77
77
 
78
78
  ## `void db studio` {#void-db-studio}
79
79
 
@@ -87,11 +87,13 @@ By default, targets the local database. Pass `--remote` to open Studio against t
87
87
 
88
88
  - **Hosted PostgreSQL and MySQL projects**: fetch the stored connection string from the platform and open Studio against it. If the URL isn't stored yet, run `void db set-url` first.
89
89
  - **Direct Cloudflare PostgreSQL and MySQL projects**: use `DATABASE_URL` from the current shell.
90
- - **D1 projects**: remote Studio is not yet supported. Use `void db execute --remote` for ad-hoc queries against your deployed D1 database.
90
+ - **D1 projects**: remote Studio is not available. Use `void db execute --remote` to query your deployed D1 database.
91
91
 
92
92
  ## `void db rename-migrations` {#void-db-rename-migrations}
93
93
 
94
- Rename existing migrations from the old numeric prefix format (`0001_name.sql`) to timestamp-based format (`20260410161500_name.sql`). Updates local tracking table and remote records if logged in with a linked project.
94
+ Rename existing migrations from the old numeric prefix format (`0001_name.sql`) to timestamp-based format (`20260410161500_name.sql`). Updates local tracking table and remote records if logged in with a linked project. A project that deploys to Void must be linked first with `void project link`; otherwise the command stops without changes.
95
+
96
+ Direct Cloudflare deploys are not supported: Void cannot rename the records in the deployed database, so the command stops without changes. Keep the existing names; new migrations use timestamps and run after them.
95
97
 
96
98
  ## `void db connect` {#void-db-connect}
97
99
 
@@ -10,6 +10,7 @@ outline: deep
10
10
  void deploy [--project <name>] [--dir <path>] [--spa] [--skip-build] [--debug]
11
11
  void deploy [--platform <cloudflare|void>] [--require-email]
12
12
  void deploy --platform cloudflare --atomic
13
+ void deploy --platform cloudflare --provision
13
14
  ```
14
15
 
15
16
  Auto-detects your project type and chooses the right pipeline. See [Supported App Types](../../guide/app-types.md) and [Deployment](../../guide/deployment.md) for details.
@@ -26,16 +27,17 @@ For an existing Void Worker, `void deploy` can link the Worker and migrate its r
26
27
 
27
28
  For Drizzle projects, deploy performs a read-only schema drift check. If a new migration would be generated, deploy stops and tells you to run `void db generate`, review the migration, commit it yourself, and rerun `void deploy`.
28
29
 
29
- | Flag | Purpose |
30
- | ------------------------------- | -------------------------------------------------------------------------------------------------- |
31
- | `--platform <cloudflare\|void>` | Override the platform stored in `.void/project.json` |
32
- | `--project <name>` | Target a specific Void project by slug; not supported with `--platform cloudflare` |
33
- | `--dir <path>` | Deploy a pre-built static directory (skips build) |
34
- | `--spa` | Use SPA mode instead of SSG for static deploys |
35
- | `--skip-build` | Skip the build step; on Cloudflare this is supported for static/SPA/SSG deploys only |
36
- | `--require-email` | Fail when email cannot be set up instead of deploying without it; requires `--platform cloudflare` |
37
- | `--atomic` | Publish an existing Durable Object Worker directly; readiness is checked after traffic changes |
38
- | `--debug` | Mirror the structured deploy log to stderr (also written to `~/.void/logs/`) |
30
+ | Flag | Purpose |
31
+ | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
32
+ | `--platform <cloudflare\|void>` | Override the platform stored in `.void/project.json` |
33
+ | `--project <name>` | Target a specific Void project by slug; not supported with `--platform cloudflare` |
34
+ | `--dir <path>` | Deploy a pre-built static directory (skips build) |
35
+ | `--spa` | Use SPA mode instead of SSG for static deploys |
36
+ | `--skip-build` | Skip the build step; on Cloudflare this is supported for static/SPA/SSG deploys only |
37
+ | `--require-email` | Fail when email cannot be set up instead of deploying without it; requires `--platform cloudflare` |
38
+ | `--provision` | Run resource provisioning again even when every resource exists, for example to enable D1 read replication on an existing database; requires `--platform cloudflare` |
39
+ | `--atomic` | Publish an existing Durable Object Worker directly; readiness is checked after traffic changes |
40
+ | `--debug` | Mirror the structured deploy log to stderr (also written to `~/.void/logs/`) |
39
41
 
40
42
  `--atomic` applies to one deployment. For an existing Durable Object Worker that consistently cannot stage, set `deploy: { cloudflare: { mode: 'atomic' } }` in `void.config.ts` so plain `void deploy` uses atomic publication. The default is `staged`.
41
43
 
@@ -114,7 +114,7 @@ void email status --platform cloudflare
114
114
 
115
115
  Check the domain configured in `email.from`: permissions, DNS, routing, sending, handler addresses, and the email binding. Exits unsuccessfully when setup is incomplete. Workers Free setup can be ready with sending limited to verified destinations; run `void email setup --platform cloudflare` after upgrading to Workers Paid.
116
116
 
117
- Without `--platform cloudflare` (or with `--platform void`) the command is not available yet; on the Void platform use `void email usage` and `void email destinations`.
117
+ `void email status` reads only your own Cloudflare account, so `--platform cloudflare` is required. On the Void platform, use `void email usage` and `void email destinations`.
118
118
 
119
119
  ## `void email setup` {#void-email-setup}
120
120
 
@@ -22,7 +22,7 @@ Creates:
22
22
  - An export from `db/schema.ts`
23
23
  - `routes/api/posts/index.ts`: `GET` for list and `POST` for insert with validation
24
24
  - `routes/api/posts/[id].ts`: `GET` by id with `404` handling
25
- - Regenerated `.void/db.d.ts`
25
+ - Regenerated types and TypeScript configuration in `.void/`
26
26
 
27
27
  The generated routes automatically detect your validation library from `package.json` (`valibot`, `zod`, or `arktype`). If none is found, you will be prompted to choose one or skip validation. Run `void db push` to apply the schema locally, or `void db generate` to create migrations before deploying.
28
28
 
@@ -105,7 +105,7 @@ void platform rollback [id] --runtime <earlier-path> [--from-runtime <current-pa
105
105
  void platform repair [id] [--runtime <path>] [--dashboard-url <origin>] [--auth-config <path>] [--plan] [--yes]
106
106
  void platform disable [id] [--plan] [--yes]
107
107
  void platform enable [id] [--runtime <path>] [--plan] [--yes]
108
- void platform uninstall [id] [--plan] [--purge-data | --purge-resources] [--keep-zone] [--yes]
108
+ void platform uninstall [id] [--plan] [--purge-data | --purge-resources] [--yes]
109
109
  ```
110
110
 
111
111
  `discover --installation` limits recovery and endpoint verification to one installation in a shared Cloudflare account.
@@ -149,7 +149,7 @@ An upgrade completes after the new Workers pass health checks. If rollout fails,
149
149
 
150
150
  If project Zero Trust is on and no platform user exists yet, uninstall turns it off and deletes its Access applications first. Run it on the computer that installed the platform.
151
151
 
152
- 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 retained for manual review.
152
+ 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 retained for manual review. `--keep-zone` is deprecated and has no effect; uninstall always keeps zones.
153
153
 
154
154
  `--purge-resources` includes `--purge-data` and also deletes every other resource the installation created, including Workers, Queues, R2, AI Gateway, the platform DNS record, routes, custom domains, and installer-created Access resources. It removes only the Email Routing rules that send mail to the platform email gateway, and keeps zones, adopted resources, external PostgreSQL, other Email Routing settings, and API tokens. A route, custom domain, DNS record, or Access resource that no longer matches the installation's record is kept and listed. It refuses before any change while projects remain or resource reads are denied. Use the Edit permissions listed by `--plan`; read checks cannot verify them, so a denied deletion can stop uninstall after changes have begun. Rerun the same command to continue after an interruption, or after a plain or `--purge-data` uninstall stopped.
155
155
 
@@ -189,8 +189,10 @@ void project cancel [deployId]
189
189
 
190
190
  Cancel an active deployment.
191
191
 
192
- - If `[deployId]` is omitted, shows an interactive select menu of active deployments for the linked project
193
- - If `[deployId]` is provided, cancels that deployment directly
192
+ - If `[deployId]` is omitted, targets the linked project's active deployment
193
+ - If `[deployId]` is provided, targets that deployment; it must still be active
194
+
195
+ Void asks for confirmation before it requests cancellation.
194
196
 
195
197
  This command is hosted-only. Direct Cloudflare deploys are local operations and do not expose a remote build to cancel.
196
198
 
@@ -63,7 +63,7 @@ Use this page as a command reference. If you are setting up a project for the fi
63
63
  | `void project rollback` | Roll back to a previous deployment |
64
64
  | `void project cancel` | Cancel an active deployment |
65
65
  | `void project zero-trust` | Inspect or override project Zero Trust protection |
66
- | `void project purge-cache` | Purge all cached pages |
66
+ | `void project purge-cache` | Purge all cached pages (Void platform) |
67
67
  | `void build logs` | Stream, tail, or download build logs |
68
68
  | `void email status` | Show email readiness on your own Cloudflare account (`--platform cloudflare`) |
69
69
  | `void email setup` | Set email up on your own Cloudflare account, without deploying |
@@ -61,11 +61,21 @@ When set, those conventions move under the configured directory:
61
61
 
62
62
  With that config, Void reads `src/pages`, `src/routes`, `src/db/schema.ts`, `src/db/migrations`, `src/auth.ts`, and `src/env.ts`. Project files such as `void.config.ts`, `vite.config.ts`, `package.json`, `tsconfig.json`, `public/`, and the local-only `.env` stay at the project root. Void does not scan both locations; if source conventions exist in both places during dev/build, remove one copy so the active source tree is unambiguous.
63
63
 
64
+ ### `ai`
65
+
66
+ `ai.gateway` names the Cloudflare AI Gateway that `ai.provider().fetch()` uses when your app runs on your own Cloudflare account. `ai.run()`, `ai.stream()`, and `ai.image()` use the Workers AI binding and do not need a gateway. On a Void platform, the platform selects the gateway and ignores this setting.
67
+
68
+ ```json
69
+ { "ai": { "gateway": "my-gateway" } }
70
+ ```
71
+
72
+ See [AI on your Cloudflare account](../integrations/cloudflare.md#ai-self-host).
73
+
64
74
  ### `auth`
65
75
 
66
76
  High-level Better Auth configuration.
67
77
 
68
- Use `auth.providers` to select which built-in auth providers Void should enable by default. Include `"email"` for email/password auth. Social providers read credentials from `AUTH_<PROVIDER>_CLIENT_ID` and `AUTH_<PROVIDER>_CLIENT_SECRET`.
78
+ Use `auth.providers` to select which built-in auth providers Void should enable by default. Include `"email"` for email/password auth. Social providers read credentials from `AUTH_<PROVIDER>_CLIENT_ID` and `AUTH_<PROVIDER>_CLIENT_SECRET`. `cognito` also needs a domain, region, and user pool ID: set `AUTH_COGNITO_DOMAIN`, `AUTH_COGNITO_REGION`, and `AUTH_COGNITO_USER_POOL_ID`, or set them in `auth.ts`.
69
79
 
70
80
  ```json
71
81
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "void",
3
- "version": "1.1.0",
3
+ "version": "1.1.11",
4
4
  "description": "Full-stack framework and deployment CLI for Cloudflare Workers, powered by Vite.",
5
5
  "homepage": "https://void.cloud",
6
6
  "bugs": {
@@ -347,11 +347,11 @@
347
347
  "@cloudflare/workers-auth": "^0.14.0",
348
348
  "@cloudflare/workers-types": "^5.20261014.1",
349
349
  "@napi-rs/keyring": "^2.1.1",
350
- "@void/deploy-cloudflare": "1.1.0",
351
- "@void/deploy-core": "1.1.0",
352
- "@void/edge": "1.1.0",
353
- "@void/isr": "1.1.0",
354
- "@void/platform": "1.1.0",
350
+ "@void/deploy-cloudflare": "1.1.11",
351
+ "@void/deploy-core": "1.1.11",
352
+ "@void/edge": "1.1.11",
353
+ "@void/isr": "1.1.11",
354
+ "@void/platform": "1.1.11",
355
355
  "better-auth": "^1.7.7",
356
356
  "better-sqlite3": "^13.0.3",
357
357
  "blake3-jit": "^1.1.0",
@@ -400,7 +400,7 @@
400
400
  "zod": "^4.6.7"
401
401
  },
402
402
  "peerDependencies": {
403
- "@void/md": "1.1.0",
403
+ "@void/md": "1.1.11",
404
404
  "arktype": ">=2.0.0",
405
405
  "valibot": ">=1.0.0-beta.7",
406
406
  "vite": "^8.0.0",
@@ -1 +0,0 @@
1
- export { r as PlatformClient } from "./client-DM9Kcf4e.mjs";
@@ -1 +0,0 @@
1
- export { t as collectMigrations } from "./collect-xjffdCdk.mjs";
@@ -1,2 +0,0 @@
1
- import "./deploy-transport-DWlWBe6M.mjs";
2
- export { i as checkWranglerMigrationApplySet, t as parseRootWranglerConfig, r as runDeploy } from "./deploy-BYYlnsiy.mjs";
@@ -1 +0,0 @@
1
- export { t as discoverSchema } from "./discover-D2PGT63u.mjs";
@@ -1 +0,0 @@
1
- export { r as runGenCommand } from "./gen-CufHEf42.mjs";
@@ -1 +0,0 @@
1
- export { r as printHelpPage } from "./help-BT2hovNI.mjs";
@@ -1 +0,0 @@
1
- export { r as selectPlatformLoginMethod } from "./login-C2T1oVG-.mjs";
@@ -1 +0,0 @@
1
- export { n as runMigrateCommand } from "./migrate-BDIprOYd.mjs";
@@ -1 +0,0 @@
1
- export { a as runOperatorCommand } from "./operator-cmd-DHieWtFp.mjs";
@@ -1 +0,0 @@
1
- export { t as parsePlatformArgs } from "./platform-args-CaCL_1Ch.mjs";
@@ -1 +0,0 @@
1
- export { t as prepareProject } from "./prepare-DEB5SeVJ.mjs";
@@ -1,30 +0,0 @@
1
- //#region src/runtime/remote/r2-conditions.ts
2
- function serializeR2Conditional(value) {
3
- if (value instanceof Headers) return Array.from(value.entries());
4
- return {
5
- ...value,
6
- uploadedBefore: value.uploadedBefore?.toISOString(),
7
- uploadedAfter: value.uploadedAfter?.toISOString()
8
- };
9
- }
10
- function parseR2Conditional(value) {
11
- if (Array.isArray(value)) {
12
- if (!value.every((pair) => Array.isArray(pair) && pair.length === 2 && pair.every((item) => typeof item === "string"))) throw new Error("Invalid R2 conditional headers");
13
- return new Headers(value);
14
- }
15
- if (!value || typeof value !== "object") throw new Error("Invalid R2 conditional options");
16
- const result = {};
17
- for (const [key, entry] of Object.entries(value)) if (key === "etagMatches" || key === "etagDoesNotMatch") {
18
- if (typeof entry !== "string") throw new Error(`Invalid R2 condition: ${key}`);
19
- result[key] = entry;
20
- } else if (key === "uploadedBefore" || key === "uploadedAfter") {
21
- if (typeof entry !== "string" || !Number.isFinite(Date.parse(entry))) throw new Error(`Invalid R2 condition: ${key}`);
22
- result[key] = new Date(entry);
23
- } else if (key === "secondsGranularity") {
24
- if (typeof entry !== "boolean") throw new Error(`Invalid R2 condition: ${key}`);
25
- result[key] = entry;
26
- } else throw new Error(`Unsupported R2 condition: ${key}`);
27
- return result;
28
- }
29
- //#endregion
30
- export { serializeR2Conditional as n, parseR2Conditional as t };
@@ -1 +0,0 @@
1
- export { i as validateMigrations } from "./validate-CheZGRE7.mjs";