void 0.21.9 → 0.23.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.
- package/README.md +5 -1
- package/dist/{account-cmd-DZZGK80W.mjs → account-cmd-C84Ee8cO.mjs} +5 -5
- package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
- package/dist/application-routing-B7QEjqSR.mjs +27 -0
- package/dist/{auth-CZuiVsFh.mjs → auth-CCjt0hcq.mjs} +1 -1
- package/dist/{auth-DLNN0D3Z.mjs → auth-CSkdO2Bb.mjs} +4 -47
- package/dist/{auth-link-B_CeugBw.mjs → auth-link-CioEg6uY.mjs} +5 -5
- package/dist/{auth-router-BgEFRuvZ.mjs → auth-router-BsR981d4.mjs} +5 -5
- package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
- package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-LzvNJORH.mjs} +19 -7
- package/dist/{cache-7_UeZdTk.mjs → cache-C4MvnrMH.mjs} +4 -4
- package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-abUxpP2n.mjs} +4 -4
- package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BPqOT964.mjs} +141 -63
- package/dist/cf-build-output-_0HNWysu.mjs +2 -0
- package/dist/cli/cli.mjs +114 -460
- package/dist/cli/cloudflare-operation-process.mjs +1103 -0
- package/dist/cli/env-schema-probe.d.mts +2 -1
- package/dist/cli/env-schema-probe.mjs +3 -3
- package/dist/client-Cu7jWiF1.mjs +2 -0
- package/dist/{client-QTl6ko_D.mjs → client-RV8NVeB8.mjs} +165 -21
- package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -43
- package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BcrVyTmJ.mjs} +9 -10
- package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
- package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-B8uPZ4nx.mjs} +4 -4
- package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-AiWashgg.mjs} +1 -1
- package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-fxHb-byx.mjs} +118 -203
- package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
- package/dist/{config-CF69HgXc.d.mts → config-BMHb8RCj.d.mts} +2 -2
- package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
- package/dist/config-C_XRIPx2.mjs +89 -0
- package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
- package/dist/{connect-BsUSRzln.mjs → connect-Bd4kJd9U.mjs} +6 -6
- package/dist/{create-project-BniEV0OW.mjs → create-project-Boczwj5r.mjs} +1 -1
- package/dist/{create-project-DBfFSZKY.mjs → create-project-bMf6ffLZ.mjs} +9 -5
- package/dist/{db-hRrvZaq_.mjs → db-8uG64XLl.mjs} +26 -26
- package/dist/{delete-D6dZ9B6B.mjs → delete-NvbiyeJf.mjs} +4 -4
- package/dist/{deploy-WaAQez1O.mjs → deploy-DzAIwqNU.mjs} +944 -607
- package/dist/{deploy-DDz7c8LK.mjs → deploy-bjXdFCtn.mjs} +1 -1
- package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
- package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
- package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
- package/dist/{domain-Dmhvb2oU.mjs → domain-y5Tvydvo.mjs} +5 -5
- package/dist/{email-DFi-s2t4.mjs → email-B3umsW75.mjs} +15 -30
- package/dist/{env-Csi-tMbT.mjs → env-BS6qYHDb.mjs} +6 -6
- package/dist/{env-public-D_6u46fX.d.mts → env-public-BX_r8HR6.d.mts} +2 -1
- package/dist/{env-validation-BB4GkLxn.mjs → env-validation-BPn7vk-V.mjs} +18 -71
- package/dist/{env-validation-BXge7uyK.mjs → env-validation-DbTg7-ar.mjs} +1 -1
- package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
- package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
- package/dist/{gen-Dz3X1Qab.mjs → gen-B580--vC.mjs} +5 -5
- package/dist/gen-BVaUUumi.mjs +2 -0
- package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-v45BdfKX.mjs} +6 -8
- package/dist/{handler-BXJTXd02.d.mts → handler-CZ4nAylQ.d.mts} +2 -1
- package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
- package/dist/help-DofyZuY7.mjs +2 -0
- package/dist/{help-DC7gdz7L.mjs → help-daGKjXGk.mjs} +268 -666
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +305 -1490
- package/dist/info-B97bTX9N.mjs +113 -0
- package/dist/{init-WO0JlPx8.mjs → init-Bvy7zrBo.mjs} +51 -20
- package/dist/limits-Bq5LG8Id.d.mts +27 -0
- package/dist/limits-Cjuk2VPm.mjs +68 -0
- package/dist/{link-CsHOinF7.mjs → link-CDqqCjFl.mjs} +5 -5
- package/dist/{list-CDb-4bZ1.mjs → list-CZj0dzKY.mjs} +5 -5
- package/dist/{live-CKiJilLr.d.mts → live-Chw1eIMv.d.mts} +1 -1
- package/dist/{local-d1-CC8sKFGu.mjs → local-d1-2CMnpuW_.mjs} +2 -2
- package/dist/login-DYt_An22.mjs +2 -0
- package/dist/{login-DvqXsfGs.mjs → login-UZKFM_u7.mjs} +5 -5
- package/dist/{logs-BdfiOezj.mjs → logs-CUZ6t9t3.mjs} +5 -5
- package/dist/migrate-8_2u55MD.mjs +2 -0
- package/dist/{migrate-B8KuoYsO.mjs → migrate-DHul7PRV.mjs} +5 -4
- package/dist/{node-BM43oz4G.mjs → node-BkyRWRx8.mjs} +2 -2
- package/dist/operator-args-CLgKGlwU.mjs +690 -0
- package/dist/{operator-cmd-03819ATr.mjs → operator-cmd-DBA6dl0m.mjs} +69 -23
- package/dist/output-Dm_A4Tbv.mjs +81 -0
- package/dist/pages/client.d.mts +34 -2
- package/dist/pages/client.mjs +59 -3
- package/dist/pages/index.d.mts +1 -1
- package/dist/pages/index.mjs +3 -3
- package/dist/pages/islands-plugin.d.mts +16 -6
- package/dist/pages/islands-plugin.mjs +2 -2
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -308
- package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
- package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
- package/dist/plan-D1Q5rf-r.mjs +2 -0
- package/dist/plan-NPpwZ_kc.mjs +58 -0
- package/dist/platform-args-BJdRtlLq.mjs +506 -0
- package/dist/platform-args-D3RXyR6h.mjs +2 -0
- package/dist/{platform-auth-config-z92h63q5.mjs → platform-auth-config-B56E9YP1.mjs} +4 -4
- package/dist/{platform-auth-protection-DeE3yr2R.mjs → platform-auth-protection-BDWO_aER.mjs} +3 -3
- package/dist/{platform-auth-recovery-o_340Ixx.mjs → platform-auth-recovery-1gg4CSRe.mjs} +4 -4
- package/dist/{platform-cmd-C4ZV3Vpy.mjs → platform-cmd-Bt-1w6pY.mjs} +1 -1
- package/dist/{platform-cmd-DNl8WosH.mjs → platform-cmd-DMcQStSc.mjs} +26 -5
- package/dist/{platform-domain-CU1JtJkW.mjs → platform-domain-BNkcz0OB.mjs} +36 -9
- package/dist/{platform-lifecycle-Bc047IeT.mjs → platform-lifecycle-9OyBALhH.mjs} +850 -276
- package/dist/{platform-lifecycle-Bs2qx1E3.mjs → platform-lifecycle-BE6C_jxh.mjs} +1 -1
- package/dist/{platform-management-CVpGI9Y5.mjs → platform-management-CjwLVQwN.mjs} +59 -11
- package/dist/{platform-management-C8tt6D8h.mjs → platform-management-CnyTdcWX.mjs} +1 -1
- package/dist/platform-plans-config-BNGKGr4P.mjs +359 -0
- package/dist/{platform-recovery-dvUaptLr.mjs → platform-recovery-D6KSpuFm.mjs} +2 -2
- package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
- package/dist/{prepare-DyZ-Yok5.mjs → prepare-B5Mkic5u.mjs} +3 -3
- package/dist/{prepare-C3kt3Rst.mjs → prepare-DOsL0CC9.mjs} +4 -20
- package/dist/prepare-cgvDMtSb.mjs +2 -0
- package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-CNzrqvBv.mjs} +30 -16
- package/dist/{project-team-BkbYIsXN.mjs → project-team-DQOWPfQT.mjs} +4 -4
- package/dist/{project-token-C8xEEQnB.mjs → project-token-CTDYU0Cc.mjs} +4 -4
- package/dist/project-zero-trust-BNAkW-_0.mjs +63 -0
- package/dist/{protocol-ZH3jP4a7.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
- package/dist/protocol-U7bfjHmA.mjs +331 -0
- package/dist/{provision-DNtrtaVD.mjs → provision-C4ORE7G7.mjs} +1 -1
- package/dist/{provision-BhreDAOS.mjs → provision-CJFgTZY8.mjs} +111 -215
- package/dist/{requests-DFyhBMaf.mjs → requests-MhxYnau8.mjs} +4 -4
- package/dist/resource-name-C7LVpcRm.mjs +11 -0
- package/dist/{rollback-DHHxXZiS.mjs → rollback-CJ6iSDoU.mjs} +5 -5
- package/dist/route-url-CG7U-cRN.mjs +15 -0
- package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
- package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
- package/dist/runtime/ai.d.mts +12 -8
- package/dist/runtime/ai.mjs +84 -17
- package/dist/runtime/better-auth-mysql.mjs +1 -1
- package/dist/runtime/better-auth-pg.mjs +1 -1
- package/dist/runtime/better-auth.mjs +1 -1
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/durable.d.mts +3 -1
- package/dist/runtime/durable.mjs +4 -1
- package/dist/runtime/email/testing.mjs +1 -1
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/kv.mjs +0 -1
- package/dist/runtime/limits.d.mts +2 -0
- package/dist/runtime/limits.mjs +2 -0
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-server.mjs +25 -16
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/migration-handler.mjs +62 -42
- package/dist/runtime/route-url.d.mts +4 -0
- package/dist/runtime/route-url.mjs +2 -0
- package/dist/runtime/routing.d.mts +180 -0
- package/dist/runtime/routing.mjs +1082 -0
- package/dist/runtime/sandbox-container.d.mts +3 -0
- package/dist/runtime/sandbox-container.mjs +2 -0
- package/dist/runtime/sandbox.d.mts +4 -32
- package/dist/runtime/sandbox.mjs +151 -75
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +4 -2
- package/dist/runtime/ws-server.mjs +27 -2
- package/dist/runtime/ws.d.mts +2 -2
- package/dist/runtime/ws.mjs +8 -6
- package/dist/sandbox-XZAqzFlG.d.mts +52 -0
- package/dist/sandbox-container-Bo0eiFKz.d.mts +73 -0
- package/dist/sandbox-container-C6ItmVuN.mjs +281 -0
- package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
- package/dist/{secret-DN9sSNiV.mjs → secret-Dli5fP0B.mjs} +6 -6
- package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
- package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
- package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
- package/dist/validate-Dq_L3s0S.mjs +2 -0
- package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
- package/dist/{wrangler-BymcxrRa.mjs → wrangler-7K-bW_DL.mjs} +14 -235
- package/dist/{ws-BwcqizuH.d.mts → ws-CL1w7GXU.d.mts} +13 -2
- package/package.json +48 -33
- package/sandbox.Dockerfile +4 -0
- package/schema.json +10 -22
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
- package/skills/void/SKILL.md +50 -133
- package/skills/void/docs/guide/ai.md +94 -84
- package/skills/void/docs/guide/app-types.md +3 -32
- package/skills/void/docs/guide/auth.md +12 -116
- package/skills/void/docs/guide/database/d1.md +9 -54
- package/skills/void/docs/guide/database/mysql.md +1 -1
- package/skills/void/docs/guide/database/postgresql.md +5 -26
- package/skills/void/docs/guide/database.md +23 -75
- package/skills/void/docs/guide/deployment.md +27 -113
- package/skills/void/docs/guide/durable-state.md +43 -18
- package/skills/void/docs/guide/edge/headers.md +3 -47
- package/skills/void/docs/guide/edge/prerendering.md +5 -20
- package/skills/void/docs/guide/edge/redirects.md +11 -64
- package/skills/void/docs/guide/edge/revalidation.md +6 -19
- package/skills/void/docs/guide/edge/rewrites.md +56 -284
- package/skills/void/docs/guide/edge/static-assets.md +23 -72
- package/skills/void/docs/guide/email/domains.md +112 -0
- package/skills/void/docs/guide/email/receiving.md +139 -0
- package/skills/void/docs/guide/email/sending.md +231 -0
- package/skills/void/docs/guide/email.md +13 -619
- package/skills/void/docs/guide/env-migration.md +11 -11
- package/skills/void/docs/guide/env-vars.md +9 -29
- package/skills/void/docs/guide/index.md +0 -15
- package/skills/void/docs/guide/jobs.md +3 -18
- package/skills/void/docs/guide/kv.md +5 -11
- package/skills/void/docs/guide/live.md +5 -56
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
- package/skills/void/docs/guide/pages-routing/head.md +10 -10
- package/skills/void/docs/guide/pages-routing/islands.md +6 -36
- package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
- package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
- package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
- package/skills/void/docs/guide/pages-routing/overview.md +7 -17
- package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
- package/skills/void/docs/guide/platform/administration/access.md +1 -4
- package/skills/void/docs/guide/platform/administration/email.md +35 -8
- package/skills/void/docs/guide/platform/administration/operations.md +26 -4
- package/skills/void/docs/guide/platform/administration/plans.md +126 -0
- package/skills/void/docs/guide/platform/administration/projects.md +5 -2
- package/skills/void/docs/guide/platform/administration/zero-trust.md +189 -0
- package/skills/void/docs/guide/platform/development/local.md +2 -2
- package/skills/void/docs/guide/platform/development/runtime.md +3 -13
- package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
- package/skills/void/docs/guide/platform/installation/credentials.md +6 -4
- package/skills/void/docs/guide/platform/installation/domains.md +31 -3
- package/skills/void/docs/guide/platform/installation/first-deployment.md +6 -0
- package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
- package/skills/void/docs/guide/platform/installation/prerequisites.md +21 -16
- package/skills/void/docs/guide/platform/installation/setup.md +9 -5
- package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
- package/skills/void/docs/guide/platform-administration.md +2 -0
- package/skills/void/docs/guide/queues.md +7 -9
- package/skills/void/docs/guide/quickstart.md +38 -37
- package/skills/void/docs/guide/remote-dev.md +4 -9
- package/skills/void/docs/guide/sandboxes.md +78 -41
- package/skills/void/docs/guide/server-routing.md +9 -72
- package/skills/void/docs/guide/sse.md +4 -18
- package/skills/void/docs/guide/ssg.md +3 -15
- package/skills/void/docs/guide/ssr.md +14 -62
- package/skills/void/docs/guide/storage.md +9 -4
- package/skills/void/docs/guide/type-safety.md +3 -14
- package/skills/void/docs/guide/typed-fetch.md +3 -7
- package/skills/void/docs/guide/websockets.md +68 -40
- package/skills/void/docs/integrations/agents.md +3 -3
- package/skills/void/docs/integrations/cloudflare.md +85 -316
- package/skills/void/docs/integrations/frameworks/analog.md +5 -64
- package/skills/void/docs/integrations/frameworks/astro.md +4 -73
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
- package/skills/void/docs/integrations/frameworks/overview.md +11 -54
- package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
- package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
- package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
- package/skills/void/docs/reference/api/auth.md +156 -0
- package/skills/void/docs/reference/api/client.md +87 -0
- package/skills/void/docs/reference/api/database.md +95 -0
- package/skills/void/docs/reference/api/durable.md +46 -0
- package/skills/void/docs/reference/api/env.md +50 -0
- package/skills/void/docs/reference/api/handlers.md +254 -0
- package/skills/void/docs/reference/api/pages.md +241 -0
- package/skills/void/docs/reference/api/plugin.md +39 -0
- package/skills/void/docs/reference/api/resources.md +109 -0
- package/skills/void/docs/reference/api/rewrites.md +76 -0
- package/skills/void/docs/reference/api/types.md +92 -0
- package/skills/void/docs/reference/api.md +56 -1218
- package/skills/void/docs/reference/cli/auth.md +88 -0
- package/skills/void/docs/reference/cli/database.md +128 -0
- package/skills/void/docs/reference/cli/deploy.md +85 -0
- package/skills/void/docs/reference/cli/domains.md +41 -0
- package/skills/void/docs/reference/cli/email.md +129 -0
- package/skills/void/docs/reference/cli/generate.md +116 -0
- package/skills/void/docs/reference/cli/github.md +189 -0
- package/skills/void/docs/reference/cli/platform-config.md +92 -0
- package/skills/void/docs/reference/cli/platform-email.md +81 -0
- package/skills/void/docs/reference/cli/platform-installation.md +127 -0
- package/skills/void/docs/reference/cli/platform-operations.md +90 -0
- package/skills/void/docs/reference/cli/platform-users.md +89 -0
- package/skills/void/docs/reference/cli/platform-zero-trust.md +45 -0
- package/skills/void/docs/reference/cli/platform.md +70 -0
- package/skills/void/docs/reference/cli/project.md +214 -0
- package/skills/void/docs/reference/cli/secrets.md +76 -0
- package/skills/void/docs/reference/cli/setup.md +70 -0
- package/skills/void/docs/reference/cli.md +33 -1621
- package/skills/void/docs/reference/config.md +26 -32
- package/skills/void/docs/reference/resource-inference.md +3 -58
- package/skills/void/docs/reference/structure.md +14 -41
- package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
- package/dist/cli/cf-compat.mjs +0 -968
- package/dist/client-4cDVv7BO.mjs +0 -2
- package/dist/gen-Vnv2f65C.mjs +0 -2
- package/dist/help-DQMfeKMz.mjs +0 -2
- package/dist/login-DFQk7rbW.mjs +0 -2
- package/dist/migrate-TsHGBnDA.mjs +0 -2
- package/dist/plan-BEZ8VJW0.mjs +0 -256
- package/dist/plan-DpuOr14e.mjs +0 -2
- package/dist/prepare-BZXkjdNe.mjs +0 -2
- package/dist/validate-EKmJWxmy.mjs +0 -2
- /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
|
@@ -154,11 +154,9 @@ Configuration for the [email integration](../guide/email.md).
|
|
|
154
154
|
| ------ | -------- | -------------------------------------------------------------------------------------------------------------- |
|
|
155
155
|
| `from` | `string` | Default sender for `sendEmail()`: one address, optionally with a display name (`Acme <noreply@mail.acme.com>`) |
|
|
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
|
-
|
|
160
|
-
- **`void deploy`** (managed platform) — not used: the sender is pinned to your project's own platform address, which Void fills in for you.
|
|
161
|
-
- **`void deploy --platform cloudflare`** (your own Cloudflare account) — the address host (`mail.acme.com`) is the domain Void sets Email Routing and Email Sending up on, and the address becomes the default `from` (written into the worker as the `__VOID_EMAIL_FROM` var). The host must be a zone in the pinned Cloudflare account, or a subdomain of one; a subdomain is the usual choice, and the apex is refused when it already receives mail elsewhere. An app that uses email without `email.from` deploys without it and prints the line to add. Void never picks a zone or writes `void.config.ts` for you. See [Your own Cloudflare account](../guide/email.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. See [Email setup](../guide/email/domains.md#your-own-cloudflare-account).
|
|
162
160
|
|
|
163
161
|
### `head`
|
|
164
162
|
|
|
@@ -199,7 +197,7 @@ Output mode. Controls the default rendering strategy for pages.
|
|
|
199
197
|
| `"server"` (default) | `false` | `export const prerender = true` | Deploy-time (platform ISR) |
|
|
200
198
|
| `"static"` | `true` | `export const prerender = false` | Build or deploy post-build |
|
|
201
199
|
|
|
202
|
-
When set to `"static"`,
|
|
200
|
+
When set to `"static"`, pages are prerendered to HTML in `dist/client/`. Individual pages can opt out with `export const prerender = false`. Dynamic pages need `getPrerenderPaths()` to be prerendered.
|
|
203
201
|
|
|
204
202
|
When omitted or set to `"server"`, pages are server-rendered on request. Individual pages can opt into deploy-time prerendering with `export const prerender = true`, or opt out of server-rendered component HTML with `export const ssr = false`.
|
|
205
203
|
|
|
@@ -209,7 +207,7 @@ When omitted or set to `"server"`, pages are server-rendered on request. Individ
|
|
|
209
207
|
|
|
210
208
|
### `remote`
|
|
211
209
|
|
|
212
|
-
Use
|
|
210
|
+
Use a deployed Void project's D1, KV, and R2 resources during local development. Writes affect real data. See [Remote Development](../guide/remote-dev.md).
|
|
213
211
|
|
|
214
212
|
```json
|
|
215
213
|
{ "remote": true }
|
|
@@ -229,31 +227,31 @@ VOID_REMOTE=1 pnpm dev
|
|
|
229
227
|
|
|
230
228
|
### `sandbox`
|
|
231
229
|
|
|
232
|
-
Enable and configure Cloudflare Sandboxes
|
|
230
|
+
Enable and configure Cloudflare Sandboxes. Importing from `void/sandbox` enables this automatically.
|
|
233
231
|
|
|
234
232
|
```json
|
|
235
233
|
{
|
|
236
234
|
"sandbox": {
|
|
237
235
|
"image": "./Dockerfile.sandbox",
|
|
238
|
-
"platformImage": "registry.
|
|
239
|
-
"instanceType": "
|
|
240
|
-
"maxInstances": 2
|
|
236
|
+
"platformImage": "registry.cloudflare.com/<account-id>/sandbox@sha256:<digest>",
|
|
237
|
+
"instanceType": "standard-1"
|
|
241
238
|
}
|
|
242
239
|
}
|
|
243
240
|
```
|
|
244
241
|
|
|
245
|
-
| Field | Type | Default
|
|
246
|
-
| ------------------- | -------- |
|
|
247
|
-
| `binding` | `string` | `SANDBOX`
|
|
248
|
-
| `className` | `string` | `
|
|
249
|
-
| `containerName` | `string` | `void-sandbox`
|
|
250
|
-
| `image` | `string` |
|
|
251
|
-
| `imageBuildContext` | `string` | Directory of `image`
|
|
252
|
-
| `platformImage` | `string` |
|
|
253
|
-
| `instanceType` | `string` | `lite`
|
|
254
|
-
| `maxInstances` | `number` | `20` on Void deploy |
|
|
242
|
+
| Field | Type | Default |
|
|
243
|
+
| ------------------- | -------- | --------------------------- |
|
|
244
|
+
| `binding` | `string` | `SANDBOX` |
|
|
245
|
+
| `className` | `string` | `SandboxV1` |
|
|
246
|
+
| `containerName` | `string` | `void-sandbox-v1` |
|
|
247
|
+
| `image` | `string` | Packaged Node.js Dockerfile |
|
|
248
|
+
| `imageBuildContext` | `string` | Directory of `image` |
|
|
249
|
+
| `platformImage` | `string` | `cloudflare/debian-trixie` |
|
|
250
|
+
| `instanceType` | `string` | `lite` |
|
|
255
251
|
|
|
256
|
-
|
|
252
|
+
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.
|
|
253
|
+
|
|
254
|
+
Sandbox requires [Workers Paid](https://dash.cloudflare.com/?to=/:account/workers/plans) and Containers access. Managed runtime tokens need Account / Containers: Edit and Account / Cloudchamber: Edit. See [Sandbox deployment](../guide/sandboxes.md#deployment).
|
|
257
255
|
|
|
258
256
|
### `target`
|
|
259
257
|
|
|
@@ -345,7 +343,7 @@ Routing and edge configuration for headers, redirects, rewrites, and caching.
|
|
|
345
343
|
|
|
346
344
|
#### `routing.headers`
|
|
347
345
|
|
|
348
|
-
Custom response headers
|
|
346
|
+
Custom response headers. Keys are URL patterns, values are arrays of `"Name: value"` strings. See [Custom Headers](../guide/edge/headers) for details.
|
|
349
347
|
|
|
350
348
|
```json
|
|
351
349
|
{
|
|
@@ -388,7 +386,7 @@ URL rewrites. Keys are source URL patterns, values are destination paths. Serves
|
|
|
388
386
|
}
|
|
389
387
|
```
|
|
390
388
|
|
|
391
|
-
Destinations use the `RewriteDestination` shape — typed route patterns plus `string`, so known routes autocomplete while dynamic paths remain accepted. See [Programmatic rewrites
|
|
389
|
+
Destinations use the `RewriteDestination` shape — typed route patterns plus `string`, so known routes autocomplete while dynamic paths remain accepted. See [Programmatic rewrites](../guide/edge/rewrites#programmatic-rewrites-in-middleware).
|
|
392
390
|
|
|
393
391
|
#### `routing.fallbacks`
|
|
394
392
|
|
|
@@ -416,7 +414,7 @@ Boolean switch for Void's ISR caching. When omitted or `true`, Void infers cachi
|
|
|
416
414
|
}
|
|
417
415
|
```
|
|
418
416
|
|
|
419
|
-
|
|
417
|
+
Build-time HTML generation with `output: "static"` is unaffected. Set `isr` to `true` to enable your configured cache policies again.
|
|
420
418
|
|
|
421
419
|
#### `routing.revalidate`
|
|
422
420
|
|
|
@@ -464,7 +462,7 @@ Paths to prerender as static HTML at deploy time. Each path must start with `/`.
|
|
|
464
462
|
|
|
465
463
|
#### `routing.notFound`
|
|
466
464
|
|
|
467
|
-
Override how the asset layer answers a request that matched no asset and no worker route. One of `"single-page-application"`, `"404-page"`, or `"none"`. If omitted, Void infers it — see [Static Assets](../guide/edge/static-assets.md#
|
|
465
|
+
Override how the asset layer answers a request that matched no asset and no worker route. One of `"single-page-application"`, `"404-page"`, or `"none"`. If omitted, Void infers it — see [Static Assets](../guide/edge/static-assets.md#navigation-and-middleware).
|
|
468
466
|
|
|
469
467
|
```json
|
|
470
468
|
{
|
|
@@ -474,13 +472,9 @@ Override how the asset layer answers a request that matched no asset and no work
|
|
|
474
472
|
}
|
|
475
473
|
```
|
|
476
474
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
`run_worker_first` is untouched, so API routes, auth, and `/__void/*` still reach the worker first. When the worker owns HTML routing it also serves the resolved behavior itself, since `run_worker_first: ["/**"]` means the platform switch never runs — see [Unmatched requests](../guide/edge/static-assets.md#unmatched-requests).
|
|
480
|
-
|
|
481
|
-
This does **not** apply to SvelteKit, Nuxt, Analog, or Astro deploys: those pin `not_found_handling` to `"none"` because the framework's own worker owns unmatched HTML, and `void deploy` warns if you set `routing.notFound` anyway.
|
|
475
|
+
Use `"404-page"` for a generated static site with a `404.html`, `"single-page-application"` for a client router, or `"none"` to keep the Worker's own 404. API and middleware routing remain unchanged.
|
|
482
476
|
|
|
483
|
-
|
|
477
|
+
SvelteKit, Nuxt, Analog, and Astro use their own error pages and ignore this setting. For direct Cloudflare deployment with TanStack Start, React Router, or vinext, set a complete asset policy in your framework's Cloudflare config. See [Static Assets](../guide/edge/static-assets.md#navigation-and-middleware).
|
|
484
478
|
|
|
485
479
|
### `inference`
|
|
486
480
|
|
|
@@ -488,7 +482,7 @@ Configuration for build-time inference, including how Void detects your app type
|
|
|
488
482
|
|
|
489
483
|
#### `inference.bindings`
|
|
490
484
|
|
|
491
|
-
Explicitly control inferred Cloudflare bindings. If omitted, bindings are [automatically inferred](./resource-inference.md) by scanning your source files for binding usage.
|
|
485
|
+
Explicitly control inferred Cloudflare bindings. If omitted, bindings are [automatically inferred](./resource-inference.md) by scanning your source files for binding usage. Explicit values override the named bindings; omitted bindings are still inferred. Auth and checked-in migrations still require a database even when `db` is `false`.
|
|
492
486
|
|
|
493
487
|
Each binding accepts `true` (use default name), `false` (disable), or a string (custom binding name):
|
|
494
488
|
|
|
@@ -6,16 +6,6 @@ outline: deep
|
|
|
6
6
|
|
|
7
7
|
Void automatically detects which Cloudflare resources your project uses by scanning source files at startup. In most cases, there is no manual configuration. Use a resource in code, and Void provisions the matching binding for local development.
|
|
8
8
|
|
|
9
|
-
## How It Works
|
|
10
|
-
|
|
11
|
-
When `voidPlugin()` initializes, it synchronously scans your source files using a three-tier approach optimized for speed:
|
|
12
|
-
|
|
13
|
-
1. **Import detection:** uses `es-module-lexer` to check for `void/*` imports. This is the fastest pass and does not require AST parsing.
|
|
14
|
-
2. **Regex pre-check:** tests for patterns such as `env.DB` and `env.KV` so files without bindings can be skipped early.
|
|
15
|
-
3. **AST confirmation:** when the regex matches, parses the full AST to confirm `c.env.DB` or `env.DB` member expressions.
|
|
16
|
-
|
|
17
|
-
This runs once before plugins initialize, so the results are available to configure the Cloudflare Vite plugin.
|
|
18
|
-
|
|
19
9
|
## Detected Bindings
|
|
20
10
|
|
|
21
11
|
| Binding | Type | Detected by import | Detected by env access |
|
|
@@ -31,7 +21,7 @@ This runs once before plugins initialize, so the results are available to config
|
|
|
31
21
|
|
|
32
22
|
Auth detection also triggers when importing the `auth` specifier from `void/client` or a framework-specific client subpath such as `void/client/react` (but not when importing only `fetch`).
|
|
33
23
|
|
|
34
|
-
Durable state is inferred from files in `durable-objects/`. For example, `durable-objects/shopping-cart.ts` creates the `SHOPPING_CART` binding, exports `ShoppingCartDurableObject`, and
|
|
24
|
+
Durable state is inferred from files in `durable-objects/`. For example, `durable-objects/shopping-cart.ts` creates the `SHOPPING_CART` binding, exports `ShoppingCartDurableObject`, and records its migration. See [Durable State](../guide/durable-state.md).
|
|
35
25
|
|
|
36
26
|
## Scanned Directories
|
|
37
27
|
|
|
@@ -86,7 +76,7 @@ Paths are relative to the project root. When `inference.scanDirs` is set, it rep
|
|
|
86
76
|
|
|
87
77
|
## Explicit Binding Overrides
|
|
88
78
|
|
|
89
|
-
|
|
79
|
+
Override individual bindings when inference does not match your setup:
|
|
90
80
|
|
|
91
81
|
```json
|
|
92
82
|
{
|
|
@@ -101,53 +91,8 @@ If inference doesn't match your setup, you can skip it entirely and declare bind
|
|
|
101
91
|
}
|
|
102
92
|
```
|
|
103
93
|
|
|
104
|
-
|
|
94
|
+
Explicit values override only their named bindings. Omitted bindings continue to be inferred, so setting `kv` does not disable storage, auth, or other features. Auth and checked-in migrations still require a database even when `db` is `false`.
|
|
105
95
|
|
|
106
96
|
## File Types
|
|
107
97
|
|
|
108
98
|
Inference scans files matching `**/*.{ts,tsx,mts,js,jsx,mjs}` within each directory. Non-JS files (CSS, HTML, images) are ignored.
|
|
109
|
-
|
|
110
|
-
## Common Patterns
|
|
111
|
-
|
|
112
|
-
### Pages mode with D1
|
|
113
|
-
|
|
114
|
-
A page companion file in `pages/` triggers D1 inference:
|
|
115
|
-
|
|
116
|
-
```ts
|
|
117
|
-
// pages/users.server.ts
|
|
118
|
-
import { db } from 'void/db';
|
|
119
|
-
|
|
120
|
-
export function loader() {
|
|
121
|
-
return db.select().from(users);
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Cron job with KV
|
|
126
|
-
|
|
127
|
-
A scheduled handler in `crons/` triggers KV inference:
|
|
128
|
-
|
|
129
|
-
```ts
|
|
130
|
-
// crons/cleanup.ts
|
|
131
|
-
import { defineScheduled } from 'void';
|
|
132
|
-
import { kv } from 'void/kv';
|
|
133
|
-
|
|
134
|
-
export default defineScheduled(async () => {
|
|
135
|
-
await kv.delete('temp-cache');
|
|
136
|
-
});
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### Route handler with R2
|
|
140
|
-
|
|
141
|
-
A route handler in `routes/` triggers R2 inference:
|
|
142
|
-
|
|
143
|
-
```ts
|
|
144
|
-
// routes/api/upload.ts
|
|
145
|
-
import { defineHandler } from 'void';
|
|
146
|
-
import { storage } from 'void/storage';
|
|
147
|
-
|
|
148
|
-
export const POST = defineHandler(async (c) => {
|
|
149
|
-
const file = await c.req.blob();
|
|
150
|
-
await storage.put('uploads/file.bin', file);
|
|
151
|
-
return c.json({ ok: true });
|
|
152
|
-
});
|
|
153
|
-
```
|
|
@@ -10,12 +10,15 @@ const items = [
|
|
|
10
10
|
{ name: "db/", description: "Drizzle schema and SQL migrations", link: "#db" },
|
|
11
11
|
{ name: "crons/", description: "Scheduled cron jobs", link: "#crons" },
|
|
12
12
|
{ name: "queues/", description: "Async queue consumers", link: "#queues" },
|
|
13
|
+
{ name: "email/", description: "Inbound email handlers", link: "#email" },
|
|
14
|
+
{ name: "durable-objects/", description: "Durable State modules", link: "#durable-objects" },
|
|
13
15
|
{ name: "src/", description: "Shared app code", link: "#src" },
|
|
14
16
|
{ name: "public/", description: "Static assets (served as-is)", link: "#public" },
|
|
15
17
|
{ name: ".void/", description: "Auto-generated (gitignored)", link: "#void" },
|
|
16
18
|
{ name: "vite.config.ts", description: "Vite config with voidPlugin()", link: "#config-files" },
|
|
17
19
|
{ name: "void.config.ts", description: "Void project config (optional)", link: "#config-files" },
|
|
18
|
-
{ name: ".env", description: "
|
|
20
|
+
{ name: ".env", description: "Local environment values", link: "#config-files" },
|
|
21
|
+
{ name: "env.ts", description: "Environment schema", link: "#config-files" },
|
|
19
22
|
{ name: "package.json" },
|
|
20
23
|
{ name: "tsconfig.json" },
|
|
21
24
|
];
|
|
@@ -47,18 +50,6 @@ const dbItems = [
|
|
|
47
50
|
},
|
|
48
51
|
];
|
|
49
52
|
|
|
50
|
-
const voidItems = [
|
|
51
|
-
{
|
|
52
|
-
name: ".void/",
|
|
53
|
-
children: [
|
|
54
|
-
{ name: "db.d.ts", description: "Drizzle DB instance types" },
|
|
55
|
-
{ name: "routes.d.ts", description: "Typed fetch client types" },
|
|
56
|
-
{ name: "queues.d.ts", description: "Queue consumer types" },
|
|
57
|
-
{ name: "tsconfig.json", description: "TypeScript config fragment" },
|
|
58
|
-
{ name: "v3/", description: "Local dev state (D1, KV, R2)" },
|
|
59
|
-
],
|
|
60
|
-
},
|
|
61
|
-
];
|
|
62
53
|
</script>
|
|
63
54
|
|
|
64
55
|
# Project Structure
|
|
@@ -102,11 +93,11 @@ Global middleware that runs on every request. Numeric prefixes control execution
|
|
|
102
93
|
|
|
103
94
|
<FileTree :items="middlewareItems" default-expanded />
|
|
104
95
|
|
|
105
|
-
Each file exports a `defineMiddleware()` handler. Use middleware to set shared context (auth, logging, rate limiting) available to all routes.
|
|
96
|
+
Each file default-exports a `defineMiddleware()` handler. Use middleware to set shared context (auth, logging, rate limiting) available to all routes.
|
|
106
97
|
|
|
107
98
|
## `db/`
|
|
108
99
|
|
|
109
|
-
[Drizzle
|
|
100
|
+
[Drizzle schemas](/guide/database#schema-definition) and SQL migrations for D1, PostgreSQL, or MySQL.
|
|
110
101
|
|
|
111
102
|
<FileTree :items="dbItems" default-expanded />
|
|
112
103
|
|
|
@@ -118,33 +109,19 @@ Generate schema with `void gen model` or write it by hand. Generate migrations w
|
|
|
118
109
|
|
|
119
110
|
## `crons/`
|
|
120
111
|
|
|
121
|
-
[Scheduled jobs](/guide/jobs)
|
|
112
|
+
[Scheduled jobs](/guide/jobs). Each file exports a `cron` expression and a default `defineScheduled()` handler.
|
|
122
113
|
|
|
123
|
-
|
|
124
|
-
// crons/heartbeat.ts
|
|
125
|
-
import { defineScheduled } from 'void';
|
|
126
|
-
|
|
127
|
-
export const cron = '*/5 * * * *';
|
|
114
|
+
## `queues/`
|
|
128
115
|
|
|
129
|
-
|
|
130
|
-
// runs every 5 minutes
|
|
131
|
-
});
|
|
132
|
-
```
|
|
116
|
+
[Queue consumers](/guide/queues). Each file default-exports a `defineQueue()` handler.
|
|
133
117
|
|
|
134
|
-
## `
|
|
118
|
+
## `email/`
|
|
135
119
|
|
|
136
|
-
[
|
|
120
|
+
[Inbound email handlers](../guide/email/receiving.md#inbound). A file's name selects the recipient; `_default.ts` handles other addresses.
|
|
137
121
|
|
|
138
|
-
|
|
139
|
-
// queues/email.ts
|
|
140
|
-
import { defineQueue } from 'void';
|
|
122
|
+
## `durable-objects/`
|
|
141
123
|
|
|
142
|
-
|
|
143
|
-
for (const msg of batch.messages) {
|
|
144
|
-
// process message
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
```
|
|
124
|
+
[Durable State](/guide/durable-state) modules. Each file default-exports a `defineDurableState()` definition.
|
|
148
125
|
|
|
149
126
|
## `src/`
|
|
150
127
|
|
|
@@ -156,11 +133,7 @@ Static assets served as-is at the root path. Files here are not processed by Vit
|
|
|
156
133
|
|
|
157
134
|
## `.void/`
|
|
158
135
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
Generate or refresh it with `void prepare`, or let `vite dev` / `vite build` populate it during normal app workflows.
|
|
162
|
-
|
|
163
|
-
<FileTree :items="voidItems" default-expanded />
|
|
136
|
+
Generated types and local development state (gitignored). Run `void prepare` to create the types, or let `vite dev` and `vite build` update them.
|
|
164
137
|
|
|
165
138
|
## Config Files
|
|
166
139
|
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
//#region src/migrations/canonical-json.ts
|
|
2
|
-
function canonicalJson(value) {
|
|
3
|
-
if (value === null) return "null";
|
|
4
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return JSON.stringify(value);
|
|
5
|
-
if (Array.isArray(value)) return `[${value.map((entry) => canonicalJson(entry)).join(",")}]`;
|
|
6
|
-
if (typeof value === "object") {
|
|
7
|
-
const object = value;
|
|
8
|
-
return `{${Object.keys(object).sort().filter((key) => object[key] !== void 0).map((key) => `${JSON.stringify(key)}:${canonicalJson(object[key])}`).join(",")}}`;
|
|
9
|
-
}
|
|
10
|
-
throw new TypeError(`Unsupported canonical JSON value: ${typeof value}`);
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { canonicalJson as t };
|