void 0.26.0 → 0.26.1
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/AGENTS_TEMPLATE.md +1 -3
- package/README.md +19 -9
- package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
- package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
- package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
- package/dist/{auth-D52yG7hl.mjs → auth-B5_tZLxT.mjs} +7 -7
- package/dist/{auth-B60QDbjg.mjs → auth-BgX2qYSY.mjs} +1 -1
- package/dist/{auth-link-DjeOptYi.mjs → auth-link-D5RmKnzh.mjs} +5 -5
- package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
- package/dist/{auth-router-BRxIuqDi.mjs → auth-router-Bap-pvbn.mjs} +4 -17
- package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
- package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
- package/dist/{build-cmd-Ce3C8huo.mjs → build-cmd-B58c8iS8.mjs} +7 -6
- package/dist/{cache-CS8Yxr5a.mjs → cache-Bo52trKF.mjs} +7 -7
- package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-BZNz3Q26.mjs} +5 -4
- package/dist/{cf-access-YTlqvAsk.mjs → cf-access-ngGqZpHZ.mjs} +10 -11
- package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
- package/dist/cf-build-output-H9a97vME.mjs +2 -0
- package/dist/cli/cli.mjs +48 -83
- package/dist/cli/cloudflare-operation-process.mjs +71 -77
- package/dist/cli/env-schema-probe.mjs +5 -6
- package/dist/client-By4JjMw_.mjs +2 -0
- package/dist/{client-mC-dFGDD.mjs → client-C2Prx_Bi.mjs} +28 -6
- package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
- package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
- package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
- package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
- package/dist/{cloudflare-operations-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
- package/dist/{cloudflare-operations-DYa3coIk.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
- package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
- package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
- package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
- package/dist/config-BtSFvXZx.mjs +2 -0
- package/dist/config-CLYAosnQ.mjs +78 -0
- package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
- package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
- package/dist/{connect-H6EvP62X.mjs → connect-X0MUA1gk.mjs} +10 -9
- package/dist/{create-project-B2kk9Q0o.mjs → create-project-DxiyW6iX.mjs} +6 -6
- package/dist/{create-project-Dbb4uiN-.mjs → create-project-iwkbqiBU.mjs} +1 -1
- package/dist/{db-DpCKZto0.mjs → db-XnVMHzoV.mjs} +100 -132
- package/dist/{delete-CxlSvsvW.mjs → delete-esYlMiSJ.mjs} +6 -6
- package/dist/{deploy-CeEbnv4b.mjs → deploy-BsEvnlJl.mjs} +2346 -2495
- package/dist/deploy-C1d-YTfp.mjs +2 -0
- package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
- package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
- package/dist/discover-EDUf6JJw.mjs +2 -0
- package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
- package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
- package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
- package/dist/{domain-B_9VgOm6.mjs → domain-CbbBWhWE.mjs} +28 -29
- package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
- package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
- package/dist/{email-BokHgjKj.mjs → email-CpuT42g7.mjs} +23 -18
- package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
- package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
- package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
- package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
- package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
- package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
- package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
- package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
- package/dist/{env-BdTc-K2L.mjs → env-w9jOyGZn.mjs} +9 -9
- package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
- package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
- package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
- package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
- package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
- package/dist/gen-dA9hW7AV.mjs +2 -0
- package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-D_FsOFxq.mjs} +64 -163
- package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
- package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
- package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
- package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
- package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
- package/dist/{help-Bv44e2tm.mjs → help-CVFBTmBx.mjs} +13 -32
- package/dist/help-DzKUrQvk.mjs +2 -0
- package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
- package/dist/index.d.mts +19 -2
- package/dist/index.mjs +617 -530
- package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
- package/dist/{init-BMf4T03q.mjs → init-Bw-fRKGp.mjs} +160 -197
- package/dist/{link-BqYsSS_I.mjs → link-DlPG8iX3.mjs} +9 -9
- package/dist/{list-_kBToO-l.mjs → list-2GN7_ueV.mjs} +8 -7
- package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
- package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
- package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
- package/dist/{login-DFuo-RWO.mjs → login-D-Q4xw3Q.mjs} +7 -7
- package/dist/login-Dc-wuTDq.mjs +2 -0
- package/dist/{logs-DYgnh6dH.mjs → logs-rd8J-OFh.mjs} +27 -10
- package/dist/migrate-BHp07yJE.mjs +2 -0
- package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
- package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
- package/dist/{node-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
- package/dist/{operator-args-DdY54Bgb.mjs → operator-args-BNsW5gfp.mjs} +10 -1
- package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-AzVLbrr3.mjs} +1 -1
- package/dist/{operator-client-BFqpp6z0.mjs → operator-client-BQtzyG-g.mjs} +1 -1
- package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-B6f6Cg9Z.mjs} +24 -11
- package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
- package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -2
- package/dist/pages/client.d.mts +19 -51
- package/dist/pages/client.mjs +204 -225
- package/dist/pages/head-client.d.mts +1 -1
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/head.mjs +1 -1
- package/dist/pages/index.d.mts +2 -2
- package/dist/pages/index.mjs +6 -12
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +21 -25
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -2
- package/dist/{plan-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
- package/dist/plan-CH2G51je.mjs +2 -0
- package/dist/{platform-args-DSV2p4nY.mjs → platform-args-BoZkWQnJ.mjs} +1 -1
- package/dist/platform-args-DYgITk0D.mjs +2 -0
- package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-n603OANg.mjs} +40 -36
- package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-zxDr0hWW.mjs} +8 -7
- package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-tw9lgtgE.mjs} +7 -6
- package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-B8-bCb7t.mjs} +10 -10
- package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-C00YM14r.mjs} +1 -1
- package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-p0kobLV8.mjs} +5 -5
- package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-D_QEY32D.mjs} +75 -386
- package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
- package/dist/{platform-management-BrF9STZp.mjs → platform-management-BdYblvvE.mjs} +6 -6
- package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-oi-SvI3f.mjs} +1 -1
- package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
- package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-PvNS9Nl2.mjs} +2 -2
- package/dist/platform-setup-DVe42Ws7.mjs +299 -0
- package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
- package/dist/prepare-DRUV-g3X.mjs +2 -0
- package/dist/{prepare-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
- package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
- package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-ti8_yTcA.mjs} +18 -18
- package/dist/{project-team-Yiww3-go.mjs → project-team-CDPE1Tsg.mjs} +14 -17
- package/dist/{project-token-BrtT2NkY.mjs → project-token-CkZ1cN0Z.mjs} +13 -16
- package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
- package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-DdjLR61k.mjs} +11 -8
- package/dist/{protocol-BX8t2jiw.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
- package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
- package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
- package/dist/{provision-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
- package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
- package/dist/{requests-TIz_jtSu.mjs → requests-DFAqyYy8.mjs} +4 -4
- package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
- package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
- package/dist/{rollback-dBqICPzj.mjs → rollback-BKYXBduI.mjs} +29 -36
- package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
- package/dist/route-url-BgPja1GS.d.mts +5 -0
- package/dist/route-url-BjGv_KKY.mjs +28 -0
- package/dist/runner-9wjsSZx-.mjs +2 -0
- package/dist/{runner--2KF6Kua.mjs → runner-DMBKSrRk.mjs} +2 -2
- package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
- package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
- package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
- package/dist/runtime/ai.d.mts +1 -1
- package/dist/runtime/ai.mjs +34 -95
- package/dist/runtime/better-auth-mysql.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.mjs +4 -9
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +5 -10
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +3 -3
- package/dist/runtime/client-react.d.mts +2 -3
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.d.mts +2 -3
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.d.mts +2 -3
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.d.mts +2 -3
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.d.mts +2 -3
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.mjs +3 -10
- package/dist/runtime/email/testing.mjs +5 -5
- package/dist/runtime/email.d.mts +2 -1
- package/dist/runtime/email.mjs +11 -27
- package/dist/runtime/env-public.mjs +15 -20
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/fetch-stream.d.mts +2 -2
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.d.mts +2 -3
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +2 -2
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/kv.mjs +10 -11
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-client.mjs +12 -22
- package/dist/runtime/live-server.mjs +27 -35
- package/dist/runtime/live.d.mts +2 -2
- package/dist/runtime/live.mjs +2 -2
- package/dist/runtime/migration-handler.mjs +4 -81
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/remote/binding-handler.d.mts +2 -2
- package/dist/runtime/remote/binding-handler.mjs +8 -9
- package/dist/runtime/remote/index.mjs +27 -77
- package/dist/runtime/route-url.d.mts +2 -4
- package/dist/runtime/route-url.mjs +1 -1
- package/dist/runtime/routing.d.mts +1 -1
- package/dist/runtime/routing.mjs +15 -26
- package/dist/runtime/sandbox.mjs +2 -2
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws-server.mjs +30 -61
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/runtime/ws.mjs +1 -1
- package/dist/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
- package/dist/{secret-AKnNXNP5.mjs → secret-BAt2KMmO.mjs} +14 -14
- package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
- package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
- package/dist/{subcommand-prompt-B6WS9Aoz.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
- package/dist/sveltekit.d.mts +0 -2
- package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
- package/dist/validate-BJr9LfXy.mjs +2 -0
- package/dist/{validate-ymhap6M_.mjs → validate-C9qJArv7.mjs} +9 -28
- package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
- package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
- package/dist/{ws-C79j4aED.d.mts → ws-CChrrAU-.d.mts} +1 -1
- package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
- package/{skills/void/docs → docs}/guide/ai.md +5 -3
- package/{skills/void/docs → docs}/guide/auth.md +37 -1
- package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
- package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
- package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
- package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
- package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
- package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
- package/{skills/void/docs → docs}/guide/jobs.md +2 -2
- package/{skills/void/docs → docs}/guide/live.md +10 -5
- package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
- package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
- package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
- package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
- package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
- package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
- package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
- package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
- package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
- package/{skills/void/docs → docs}/guide/queues.md +0 -2
- package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
- package/{skills/void/docs → docs}/guide/sandboxes.md +2 -2
- package/{skills/void/docs → docs}/guide/sse.md +0 -2
- package/{skills/void/docs → docs}/guide/storage.md +7 -2
- package/{skills/void/docs → docs}/guide/websockets.md +4 -0
- package/docs/integrations/agents.md +37 -0
- package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
- package/{skills/void/docs → docs}/integrations/hono.md +15 -7
- package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
- package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
- package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
- package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
- package/{skills/void/docs → docs}/reference/cli/auth.md +0 -5
- package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
- package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
- package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
- package/{skills/void/docs → docs}/reference/cli/platform-config.md +1 -1
- package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
- package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
- package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
- package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
- package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
- package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
- package/{skills/void/docs → docs}/reference/cli.md +1 -1
- package/{skills/void/docs → docs}/reference/config.md +13 -13
- package/{skills/void/docs → docs}/reference/resource-inference.md +1 -16
- package/package.json +34 -30
- package/schema.json +1 -1
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
- package/skills/void/SKILL.md +6 -3
- package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
- package/dist/client-BxVixJBI.mjs +0 -2
- package/dist/config-0acf1oys.mjs +0 -2
- package/dist/config-D8MOgiQV.mjs +0 -32
- package/dist/deploy-qmiLE1G1.mjs +0 -2
- package/dist/discover-AMCBXivQ.mjs +0 -2
- package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
- package/dist/gen-qCBwH3fZ.mjs +0 -2
- package/dist/help-Dw5f9Xrg.mjs +0 -2
- package/dist/login-D7meQg_3.mjs +0 -2
- package/dist/migrate-CEu2X5DB.mjs +0 -2
- package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
- package/dist/plan-COtUvdMA.mjs +0 -2
- package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
- package/dist/prepare-BBknoZI1.mjs +0 -2
- package/dist/resolve-project-DtbidV4y.mjs +0 -2
- package/dist/route-url-CG7U-cRN.mjs +0 -15
- package/dist/runner-voIltZrY.mjs +0 -2
- package/dist/validate-pna7R3Pv.mjs +0 -2
- package/skills/void/docs/integrations/agents.md +0 -26
- package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
- package/{skills/void/docs → docs}/guide/app-types.md +0 -0
- package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
- package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
- package/{skills/void/docs → docs}/guide/database.md +8 -8
- package/{skills/void/docs → docs}/guide/deployment.md +0 -0
- package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
- package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
- package/{skills/void/docs → docs}/guide/email.md +0 -0
- package/{skills/void/docs → docs}/guide/index.md +0 -0
- package/{skills/void/docs → docs}/guide/kv.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
- package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/uninstall.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
- package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
- package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
- package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
- package/{skills/void/docs → docs}/guide/ssg.md +0 -0
- package/{skills/void/docs → docs}/guide/ssr.md +0 -0
- package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
- package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
- package/{skills/void/docs → docs}/index.md +0 -0
- package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
- package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
- package/{skills/void/docs → docs}/reference/api/client.md +0 -0
- package/{skills/void/docs → docs}/reference/api/database.md +2 -2
- /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/resources.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
- /package/{skills/void/docs → docs}/reference/api.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/platform.md +0 -0
- /package/{skills/void/docs → docs}/reference/structure.md +0 -0
|
@@ -97,7 +97,7 @@ Files, running processes, and listening servers last only as long as the contain
|
|
|
97
97
|
|
|
98
98
|
## Configuration
|
|
99
99
|
|
|
100
|
-
The default environment provides Node.js
|
|
100
|
+
The default environment provides Node.js 26 on Debian Trixie. Managed platform deploys use Cloudflare's managed Node.js image.
|
|
101
101
|
|
|
102
102
|
Use `void.config.ts` when you need a custom image or container size:
|
|
103
103
|
|
|
@@ -118,7 +118,7 @@ See the [configuration reference](../reference/config.md#sandbox) for binding na
|
|
|
118
118
|
Custom images must include the helper matching Void's installed Sandbox SDK version. The SDK image supplies this binary, but is not a runnable environment itself:
|
|
119
119
|
|
|
120
120
|
```dockerfile
|
|
121
|
-
FROM node:
|
|
121
|
+
FROM node:26.10.0-trixie-slim
|
|
122
122
|
COPY --from=docker.io/cloudflare/sandbox:1.0.0 /usr/local/bin/sandbox-shim /usr/local/bin/sandbox-shim
|
|
123
123
|
WORKDIR /workspace
|
|
124
124
|
CMD ["sleep", "infinity"]
|
|
@@ -168,6 +168,4 @@ export const GET = defineHandler(async (c) => {
|
|
|
168
168
|
});
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
-
Native `EventSource` can send cookies with `withCredentials: true`. For non-cookie auth, generate a short-lived signed URL and validate it in the route handler.
|
|
172
|
-
|
|
173
171
|
For shared topics and subscriptions, use [Live Event Streams](./live.md). For two-way communication, use [WebSockets](./websockets.md).
|
|
@@ -42,12 +42,12 @@ const head = await storage.head('uploads/photo.jpg');
|
|
|
42
42
|
A common pattern is serving uploaded files from an API route:
|
|
43
43
|
|
|
44
44
|
```ts
|
|
45
|
+
// routes/files/[key].ts
|
|
45
46
|
import { defineHandler } from 'void';
|
|
46
47
|
import { storage } from 'void/storage';
|
|
47
48
|
|
|
48
49
|
export const GET = defineHandler(async (c) => {
|
|
49
|
-
const
|
|
50
|
-
const object = await storage.get(key);
|
|
50
|
+
const object = await storage.get(`uploads/${c.req.param('key')}`);
|
|
51
51
|
|
|
52
52
|
if (!object) {
|
|
53
53
|
return c.notFound();
|
|
@@ -56,11 +56,16 @@ export const GET = defineHandler(async (c) => {
|
|
|
56
56
|
const headers = new Headers();
|
|
57
57
|
object.writeHttpMetadata(headers);
|
|
58
58
|
headers.set('etag', object.httpEtag);
|
|
59
|
+
// Don't let an uploaded HTML or SVG file run as a page on your site.
|
|
60
|
+
headers.set('X-Content-Type-Options', 'nosniff');
|
|
61
|
+
headers.set('Content-Disposition', 'attachment');
|
|
59
62
|
|
|
60
63
|
return new Response(object.body, { headers });
|
|
61
64
|
});
|
|
62
65
|
```
|
|
63
66
|
|
|
67
|
+
Files your users upload can contain HTML or scripts. Store them under keys your server picks, and serve them with `nosniff` and `Content-Disposition: attachment`. `<img>` and `<video>` tags still display them; opening the URL directly downloads the file.
|
|
68
|
+
|
|
64
69
|
## Custom bindings
|
|
65
70
|
|
|
66
71
|
Use `createStorage(bucket)` with your own R2 binding, or in tests:
|
|
@@ -151,6 +151,10 @@ 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.
|
|
155
|
+
|
|
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
|
+
|
|
154
158
|
## Hooks
|
|
155
159
|
|
|
156
160
|
Both `defineRoom()` and `defineWebSocket()` support:
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Using Void with Coding Agents
|
|
6
|
+
|
|
7
|
+
`void init` sets up coding agents as part of project initialization:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npx void init
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
New projects get a minimal `AGENTS.md` explaining Void and where to read its docs.
|
|
14
|
+
In an existing project, Void asks before creating, appending to, or updating
|
|
15
|
+
`AGENTS.md`. It preserves your instructions outside the Void section. Declining
|
|
16
|
+
keeps the file unchanged; CI and non-interactive runs skip changes to existing
|
|
17
|
+
projects' instructions.
|
|
18
|
+
|
|
19
|
+
The complete Markdown docs ship at `node_modules/void/docs/`. Start with
|
|
20
|
+
`guide/quickstart.md` for setup and `reference/cli.md` for commands. Agents can
|
|
21
|
+
read them directly, even without a linked skill.
|
|
22
|
+
|
|
23
|
+
## Skills
|
|
24
|
+
|
|
25
|
+
Skills point your agent to the commands and docs it needs for the task. They link to the installed `void` package, so the guidance matches the version your app uses.
|
|
26
|
+
|
|
27
|
+
Void ships two skills:
|
|
28
|
+
|
|
29
|
+
- **`void`:** commands and docs for app development.
|
|
30
|
+
- **`migrate-vite-cloudflare-to-void`:** migration skill for converting existing `@cloudflare/vite-plugin` apps to Void.
|
|
31
|
+
|
|
32
|
+
Skills are linked automatically by `void init` when it detects a supported
|
|
33
|
+
agent's configuration. For example, Claude Code uses `.claude/skills/` and Codex
|
|
34
|
+
uses `.agents/skills/`. The skills use the app's installed docs so their guidance
|
|
35
|
+
matches its Void version. Globally installed skills can use the docs in their
|
|
36
|
+
Void package when there is no local installation. If no agent is detected, the
|
|
37
|
+
instructions still point directly to the bundled docs.
|
|
@@ -10,7 +10,7 @@ Use Void with [Astro](https://astro.build/) for resource detection, typed databa
|
|
|
10
10
|
|
|
11
11
|
- [Astro 6+](https://astro.build/blog/astro-6/) is required to use `import { x } from "void/x"` helpers in Astro apps.
|
|
12
12
|
- You also need to enable `"nodejs_als"` under `compatibility_flags` in your Cloudflare config.
|
|
13
|
-
|
|
13
|
+
:::
|
|
14
14
|
|
|
15
15
|
## Setup
|
|
16
16
|
|
|
@@ -30,8 +30,8 @@ npm install -D @astrojs/cloudflare void
|
|
|
30
30
|
### 3. Configure `astro.config.mjs`
|
|
31
31
|
|
|
32
32
|
```js
|
|
33
|
-
import { defineConfig } from 'astro/config';
|
|
34
33
|
import cloudflare from '@astrojs/cloudflare';
|
|
34
|
+
import { defineConfig } from 'astro/config';
|
|
35
35
|
import { voidPlugin } from 'void';
|
|
36
36
|
|
|
37
37
|
export default defineConfig({
|
|
@@ -85,9 +85,9 @@ export const prerender = false;
|
|
|
85
85
|
Use `void/db` in API routes and server-side code:
|
|
86
86
|
|
|
87
87
|
```ts
|
|
88
|
+
import { users } from '@schema';
|
|
88
89
|
import type { APIRoute } from 'astro';
|
|
89
90
|
import { db } from 'void/db';
|
|
90
|
-
import { users } from '@schema';
|
|
91
91
|
|
|
92
92
|
export const GET: APIRoute = async () => {
|
|
93
93
|
const rows = await db.select().from(users);
|
|
@@ -33,10 +33,14 @@ export default defineNuxtConfig({
|
|
|
33
33
|
nitro: {
|
|
34
34
|
preset: 'cloudflare-module',
|
|
35
35
|
cloudflareDev: { configPath: './.void-wrangler.jsonc' },
|
|
36
|
+
// Required for Nuxt 4.6.0 on Windows.
|
|
37
|
+
externals: {
|
|
38
|
+
inline: [/[\\/]node_modules[\\/]nuxt[\\/]dist[\\/]/],
|
|
39
|
+
},
|
|
36
40
|
alias: {
|
|
37
41
|
// Nitro has its own bundler that doesn't use Vite aliases.
|
|
38
42
|
// Duplicate @schema here so Nitro can resolve it.
|
|
39
|
-
'@schema': resolve(
|
|
43
|
+
'@schema': resolve(import.meta.dirname, 'db/schema.ts'),
|
|
40
44
|
},
|
|
41
45
|
},
|
|
42
46
|
vite: { plugins: [voidPlugin()] },
|
|
@@ -75,9 +79,9 @@ Void-managed auth is not supported in framework mode yet. Use Better Auth's offi
|
|
|
75
79
|
### Database
|
|
76
80
|
|
|
77
81
|
```ts
|
|
82
|
+
import { users } from '@schema';
|
|
78
83
|
// server/api/users.get.ts
|
|
79
84
|
import { db } from 'void/db';
|
|
80
|
-
import { users } from '@schema';
|
|
81
85
|
|
|
82
86
|
export default defineEventHandler(async () => {
|
|
83
87
|
return db.select().from(users);
|
|
@@ -17,25 +17,33 @@ Once `hono` is installed in your app, you can use built-in middleware, helpers,
|
|
|
17
17
|
Use Hono's built-in middleware in your global middleware files or per-route:
|
|
18
18
|
|
|
19
19
|
```ts
|
|
20
|
+
import { cors } from 'hono/cors';
|
|
20
21
|
// middleware/01.cors.ts
|
|
21
22
|
import { defineMiddleware } from 'void';
|
|
22
|
-
import { cors } from 'hono/cors';
|
|
23
23
|
|
|
24
24
|
export default defineMiddleware(cors({ origin: 'https://example.com' }));
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
```ts
|
|
28
|
-
// middleware/02.cache.ts
|
|
29
|
-
import { defineMiddleware } from 'void';
|
|
30
28
|
import { cache } from 'hono/cache';
|
|
29
|
+
// routes/api/products.ts (per-route cache)
|
|
30
|
+
import { defineHandler } from 'void';
|
|
31
|
+
import { listProducts } from '../../lib/products';
|
|
31
32
|
|
|
32
|
-
export
|
|
33
|
+
export const GET = defineHandler(
|
|
34
|
+
cache({ cacheName: 'products', cacheControl: 'max-age=3600' }),
|
|
35
|
+
async () => ({ products: await listProducts() }),
|
|
36
|
+
);
|
|
33
37
|
```
|
|
34
38
|
|
|
39
|
+
::: warning
|
|
40
|
+
`cache()` stores one response per URL and returns it to every visitor. It skips requests with an `Authorization` header, but not cookies. Use it only on routes whose response is the same for everyone, never on a route that reads the signed-in user. To cache pages, use [revalidation](../guide/edge/revalidation.md), which skips requests that carry a cookie.
|
|
41
|
+
:::
|
|
42
|
+
|
|
35
43
|
```ts
|
|
44
|
+
import { bearerAuth } from 'hono/bearer-auth';
|
|
36
45
|
// routes/api/webhooks/stripe.ts (per-route usage)
|
|
37
46
|
import { defineHandler } from 'void';
|
|
38
|
-
import { bearerAuth } from 'hono/bearer-auth';
|
|
39
47
|
|
|
40
48
|
export const POST = defineHandler(bearerAuth({ token: 'webhook-secret' }), async (c) => {
|
|
41
49
|
const body = await c.req.json();
|
|
@@ -48,9 +56,9 @@ export const POST = defineHandler(bearerAuth({ token: 'webhook-secret' }), async
|
|
|
48
56
|
Hono's context helpers are available on `c` in every handler:
|
|
49
57
|
|
|
50
58
|
```ts
|
|
59
|
+
import { stream } from 'hono/streaming';
|
|
51
60
|
// routes/api/download.ts
|
|
52
61
|
import { defineHandler } from 'void';
|
|
53
|
-
import { stream } from 'hono/streaming';
|
|
54
62
|
|
|
55
63
|
export const GET = defineHandler((c) => {
|
|
56
64
|
return stream(c, async (stream) => {
|
|
@@ -76,9 +84,9 @@ export const GET = defineHandler((c) => {
|
|
|
76
84
|
Any `hono/*` or `@hono/*` package works. Install the package in your app, then use it directly:
|
|
77
85
|
|
|
78
86
|
```ts
|
|
87
|
+
import { rateLimiter } from 'hono-rate-limiter';
|
|
79
88
|
// middleware/01.rate-limit.ts
|
|
80
89
|
import { defineMiddleware } from 'void';
|
|
81
|
-
import { rateLimiter } from 'hono-rate-limiter';
|
|
82
90
|
|
|
83
91
|
export default defineMiddleware(rateLimiter({ windowMs: 60_000, limit: 100 }));
|
|
84
92
|
```
|
|
@@ -111,6 +111,7 @@ The following imports are **not available** with a non-CF target and produce a c
|
|
|
111
111
|
| `void/storage` | R2 (blob storage) |
|
|
112
112
|
| `void/auth` | Void-managed Better Auth |
|
|
113
113
|
| `void/ai` | Workers AI |
|
|
114
|
+
| `void/sandbox` | Cloudflare Sandboxes |
|
|
114
115
|
| `void/env` | Typed environment schema |
|
|
115
116
|
|
|
116
117
|
If you need a database or storage, use an external provider and connect via standard Node.js libraries.
|
|
@@ -4,7 +4,7 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# Authentication {#auth}
|
|
6
6
|
|
|
7
|
-
Imported from `"void
|
|
7
|
+
Imported from `"void/auth"`. Client-side helpers imported from `"void/client"`.
|
|
8
8
|
|
|
9
9
|
## `defineAuth(config)` {#defineauth-config}
|
|
10
10
|
|
|
@@ -41,8 +41,8 @@ Creates a handler with input validation using any [Standard Schema](https://gith
|
|
|
41
41
|
Validated input is passed as the second argument to the handler.
|
|
42
42
|
|
|
43
43
|
```ts
|
|
44
|
-
import { defineHandler } from 'void';
|
|
45
44
|
import * as v from 'valibot';
|
|
45
|
+
import { defineHandler } from 'void';
|
|
46
46
|
|
|
47
47
|
export const POST = defineHandler.withValidator({
|
|
48
48
|
body: v.object({
|
|
@@ -103,6 +103,8 @@ Void’s reserved `/__void` endpoints use their own authentication and are exclu
|
|
|
103
103
|
|
|
104
104
|
When credentials come from `void/env`, wrap the reads in functions so they are resolved per request after Void has bound the runtime env.
|
|
105
105
|
|
|
106
|
+
If `password` resolves to an empty value, requests fail with a server error instead of passing the gate.
|
|
107
|
+
|
|
106
108
|
For app-specific bypasses such as health checks or public webhooks, compose that logic in your own middleware before calling `basicAuth()`.
|
|
107
109
|
|
|
108
110
|
```ts
|
|
@@ -182,7 +184,7 @@ export default defineQueue<{ to: string; subject: string }>(async (batch, env) =
|
|
|
182
184
|
```ts
|
|
183
185
|
function defineQueue<T>(
|
|
184
186
|
handler: (batch: QueueBatch<T>, env: CloudEnv['Bindings']) => void | Promise<void>,
|
|
185
|
-
):
|
|
187
|
+
): TypedQueueHandler<T>;
|
|
186
188
|
```
|
|
187
189
|
|
|
188
190
|
## `defineRender(handler)` {#definerender-handler}
|
|
@@ -32,6 +32,10 @@ function voidVue(options?: VoidVueOptions): Plugin[];
|
|
|
32
32
|
interface VoidVueOptions {
|
|
33
33
|
vue?: VuePluginOptions; // passed through to @vitejs/plugin-vue
|
|
34
34
|
viewTransitions?: boolean; // enable View Transitions API for navigations
|
|
35
|
+
prefetch?: {
|
|
36
|
+
hoverDelay?: number;
|
|
37
|
+
cacheFor?: number | string | [string, string];
|
|
38
|
+
};
|
|
35
39
|
}
|
|
36
40
|
```
|
|
37
41
|
|
|
@@ -32,11 +32,6 @@ platform. In a non-interactive shell, pass `--platform cloudflare|void` or use
|
|
|
32
32
|
the explicit `void cloudflare` and `void account` commands. Choosing a destination
|
|
33
33
|
for authentication does not change the project's deploy target.
|
|
34
34
|
|
|
35
|
-
`void auth whoami`, `void auth link`, and `void auth token` remain supported for
|
|
36
|
-
existing scripts. `whoami` follows the selected destination; `link` and `token`
|
|
37
|
-
are Void account operations. Prefer `void auth status`, `void account link`, and
|
|
38
|
-
`void account token` in new scripts.
|
|
39
|
-
|
|
40
35
|
## Void platform account {#void-platform-account}
|
|
41
36
|
|
|
42
37
|
### `void account login` {#void-account-login}
|
|
@@ -24,7 +24,7 @@ Show migration status. Displays which migrations are applied or pending locally,
|
|
|
24
24
|
|
|
25
25
|
## `void db reset` {#void-db-reset}
|
|
26
26
|
|
|
27
|
-
Drop the
|
|
27
|
+
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`. Does not affect the deployed database.
|
|
28
28
|
|
|
29
29
|
## `void db seed` {#void-db-seed}
|
|
30
30
|
|
|
@@ -79,11 +79,10 @@ Open [Drizzle Studio](https://orm.drizzle.team/docs/drizzle-kit-studio) for the
|
|
|
79
79
|
|
|
80
80
|
By default, targets the local database. Pass `--remote` to open Studio against the deployed database:
|
|
81
81
|
|
|
82
|
-
- **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.
|
|
82
|
+
- **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.
|
|
83
|
+
- **Direct Cloudflare PostgreSQL and MySQL projects**: use `DATABASE_URL` from the current shell.
|
|
83
84
|
- **D1 projects**: remote Studio is not yet supported. Use `void db execute --remote` for ad-hoc queries against your deployed D1 database.
|
|
84
85
|
|
|
85
|
-
On direct Cloudflare PostgreSQL/MySQL targets, remote Studio uses `DATABASE_URL` from the current shell. Direct D1 Studio remains unsupported; use `void db execute --remote`.
|
|
86
|
-
|
|
87
86
|
## `void db rename-migrations` {#void-db-rename-migrations}
|
|
88
87
|
|
|
89
88
|
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.
|
|
@@ -109,7 +109,7 @@ void gen cron hourly-sync
|
|
|
109
109
|
void gen queue <name>
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
Create a queue consumer file in `queues/` with `defineQueue`, a `Message`
|
|
112
|
+
Create a queue consumer file in `queues/` with `defineQueue`, a `Message` type, and commented-out batch options.
|
|
113
113
|
|
|
114
114
|
```sh
|
|
115
115
|
void gen queue emails
|
|
@@ -6,6 +6,8 @@ outline: deep
|
|
|
6
6
|
|
|
7
7
|
Deploy-on-GitHub works from **any** Void login — Google, GitHub, or other SSO. The first time you connect GitHub, Void links your GitHub identity to your current account (a one-time step, independent of how you logged in); it never creates a second account.
|
|
8
8
|
|
|
9
|
+
Project-scoped `github` and `build` commands resolve the project in the same order as deploy: the `[project]` argument or `--project`, then `VOID_PROJECT`, then the linked project (`.void/project.json`).
|
|
10
|
+
|
|
9
11
|
## `void github link` {#void-github-link}
|
|
10
12
|
|
|
11
13
|
```
|
|
@@ -78,8 +80,6 @@ void github connect my-app \
|
|
|
78
80
|
--branch main
|
|
79
81
|
```
|
|
80
82
|
|
|
81
|
-
**Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
|
|
82
|
-
|
|
83
83
|
You can connect only repositories your GitHub account can access.
|
|
84
84
|
|
|
85
85
|
A project has one GitHub connection. Running `void github connect` on a project that is already connected fails. To connect a different repository, run `void github disconnect` first.
|
|
@@ -107,8 +107,6 @@ The CLI prompts for new settings using the current values as defaults. In CI, pa
|
|
|
107
107
|
void github update my-app --executor github_actions
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
**Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
|
|
111
|
-
|
|
112
110
|
## `void github status` {#void-github-status}
|
|
113
111
|
|
|
114
112
|
```
|
|
@@ -127,15 +125,13 @@ Show the connected repository, branch, executor, and workflow. Container builds
|
|
|
127
125
|
void github status my-app
|
|
128
126
|
```
|
|
129
127
|
|
|
130
|
-
**Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
|
|
131
|
-
|
|
132
128
|
## `void github disconnect` {#void-github-disconnect}
|
|
133
129
|
|
|
134
130
|
```
|
|
135
131
|
void github disconnect [project]
|
|
136
132
|
```
|
|
137
133
|
|
|
138
|
-
Disconnect a project from its GitHub repository, stopping automatic deploys. Any in-flight builds for the project are cancelled
|
|
134
|
+
Disconnect a project from its GitHub repository, stopping automatic deploys. Any in-flight builds for the project are cancelled before the connection is removed. If the project has no connection, it reports that and exits successfully. To point a project at a different repository, disconnect first, then run `void github connect`.
|
|
139
135
|
|
|
140
136
|
You are asked to confirm before anything is removed. Pass `--yes` to skip the prompt; `--yes` is **required** in a non-interactive shell (CI), where there is no prompt to answer.
|
|
141
137
|
|
|
@@ -150,8 +146,6 @@ You are asked to confirm before anything is removed. Pass `--yes` to skip the pr
|
|
|
150
146
|
void github disconnect my-app --yes
|
|
151
147
|
```
|
|
152
148
|
|
|
153
|
-
**Project resolution** follows the same order as deploy: positional / `--project`, `VOID_PROJECT`, linked project (`.void/project.json`).
|
|
154
|
-
|
|
155
149
|
## Build {#build}
|
|
156
150
|
|
|
157
151
|
Inspect Deploy-on-GitHub builds.
|
|
@@ -171,9 +165,6 @@ Stream, tail, or download the build logs for a **container** build. With no
|
|
|
171
165
|
| `--output <file>`, `-o` | Write logs to a file instead of stdout (appends while following). | stdout |
|
|
172
166
|
| `--project <slug>`, `-p` | Target project. | linked |
|
|
173
167
|
|
|
174
|
-
**Project resolution** follows the same order as deploy: positional / `--project`,
|
|
175
|
-
`VOID_PROJECT`, linked project (`.void/project.json`).
|
|
176
|
-
|
|
177
168
|
Builds run on **GitHub Actions** keep their logs on GitHub — the command prints
|
|
178
169
|
the Actions run URL instead of streaming. Only the last 10,000 log lines of a
|
|
179
170
|
container build are retained.
|
|
@@ -89,4 +89,4 @@ when using `--yes`. Recovery requires Cloudflare management/database authority,
|
|
|
89
89
|
original recovery keys, and a successful browser provider test. Use
|
|
90
90
|
`--client-secret-env <name>` for new or rotated credentials.
|
|
91
91
|
|
|
92
|
-
For automation,
|
|
92
|
+
For automation, see [operator authentication](./platform.md#operator-authentication).
|
|
@@ -42,9 +42,8 @@ has ended and the operation is at least 24 hours old, inspect the exact resource
|
|
|
42
42
|
named by the preview and attest whether its write was `applied` or `not-applied`.
|
|
43
43
|
Applied writes continue at the next step; not-applied writes retry the same
|
|
44
44
|
persisted intent. The running platform version must match that intent, so restore
|
|
45
|
-
the matching version before recovering an operation created by older code.
|
|
46
|
-
|
|
47
|
-
identity, and digest used by the apply request. Time alone never retries a write.
|
|
45
|
+
the matching version before recovering an operation created by older code. Time
|
|
46
|
+
alone never retries a write.
|
|
48
47
|
|
|
49
48
|
`shared-recipients` discovers shared inbound addresses, provider rule names and
|
|
50
49
|
IDs, and interrupted creation intents, including projects awaiting deletion.
|
|
@@ -113,7 +113,7 @@ use `repair --dashboard-url <origin>` or `upgrade --dashboard-url <origin>`.
|
|
|
113
113
|
Preview with `--plan` first. Existing Access protection must cover the configured
|
|
114
114
|
dashboard origin before maintenance can proceed. See [Optional Dashboard](../../guide/platform/installation/domains.md#optional-dashboard).
|
|
115
115
|
|
|
116
|
-
After discovery on another machine, set `VOID_PLATFORM_DATABASE_URL`.
|
|
116
|
+
After discovery on another machine, set `VOID_PLATFORM_DATABASE_URL`. See [Manage an installation from another machine](../../guide/platform/installation/maintenance.md#manage-an-installation-from-another-machine) for the secrets needed to recreate a missing Worker.
|
|
117
117
|
|
|
118
118
|
| Command | Behavior |
|
|
119
119
|
| ----------- | ----------------------------------------------------------------------------------------------------------- |
|
|
@@ -54,6 +54,7 @@ void platform system asset-migrations [--page <n>] [--limit <n>]
|
|
|
54
54
|
void platform system events [--page <n>] [--limit <n>]
|
|
55
55
|
void platform system backfill-queue-tokens
|
|
56
56
|
void platform system sandbox-drain [--cursor <opaque-cursor>]
|
|
57
|
+
void platform system rotate-proxy-tokens [--project <id> | --all]
|
|
57
58
|
```
|
|
58
59
|
|
|
59
60
|
`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,6 +65,8 @@ void platform system sandbox-drain [--cursor <opaque-cursor>]
|
|
|
64
65
|
|
|
65
66
|
`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.
|
|
66
67
|
|
|
68
|
+
`rotate-proxy-tokens` gives projects new platform credentials on their live Worker and the Workers kept for rollback, without a redeploy. Workers kept for rollback whose author can no longer deploy keep the old credentials. Use `--project <id>` for one project or `--all` for every project, with `--plan` to preview and `--yes` to apply. `--plan` alone shows every rotation that is still running. Each run does a bounded batch and the platform finishes the rest in the background; a rotation takes about 6 minutes per project, longer while a deploy is running. Use `--plan` to check progress until nothing is pending or failed. Running `--yes` again with `--project` or `--all` while a rotation is still running starts one more rotation for that project. When a rotation is finished, the previous credentials no longer work. Each rotation starts a new version of the project's live Worker, so WebSocket connections reconnect once.
|
|
69
|
+
|
|
67
70
|
Use the [platform lifecycle commands](./platform-installation.md#lifecycle-commands) to maintain your installation's Workers.
|
|
68
71
|
|
|
69
72
|
## Hosted Workers {#operator-workers}
|
|
@@ -16,13 +16,13 @@ void platform user show <id>
|
|
|
16
16
|
Use the same ID to change a plan, suspend or restore the account, or delete it:
|
|
17
17
|
|
|
18
18
|
```sh
|
|
19
|
-
void platform user plan <id> <
|
|
19
|
+
void platform user plan <id> <plan-id>
|
|
20
20
|
void platform user suspend <id> [--reason <text>]
|
|
21
21
|
void platform user restore <id>
|
|
22
22
|
void platform user delete <id>
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Suspending a user blocks their applications. Deleting a user also deletes their project resources. A plan change updates resource limits while preserving any administrator suspension.
|
|
25
|
+
Suspending a user blocks their applications, including scheduled jobs and queue consumers. While the account is suspended, each queue message is retried about once an hour, and each retry uses one of its queue's retries. Messages that run out of retries are dropped: after about 3 hours with the default of 3 retries, and at once for a queue with `maxRetries: 0`. Restore an account suspended by mistake promptly; queue delivery resumes within about an hour. Deleting a user also deletes their project resources. A plan change updates resource limits while preserving any administrator suspension.
|
|
26
26
|
|
|
27
27
|
The last active administrator cannot be deleted or suspended. Both previews and
|
|
28
28
|
actual mutations enforce this rule, including in the browser admin UI. Allowed
|
|
@@ -10,6 +10,7 @@ Show deployments for the configured target.
|
|
|
10
10
|
|
|
11
11
|
- Void targets show recent hosted deployments; `[name]` looks up a project by slug and otherwise the linked project is used.
|
|
12
12
|
- Cloudflare targets list Worker Versions, identify the active version, and show the recorded migration count. A project name is not accepted because the Worker name comes from `cloudflare.name` in `void.config.ts`.
|
|
13
|
+
- Owners and admins also see a warning when the platform cannot finish [replacing the project's credentials](../../guide/project-collaboration.md#change-or-remove-access).
|
|
13
14
|
|
|
14
15
|
## `void project link [name]` {#void-project-link-name}
|
|
15
16
|
|
|
@@ -36,7 +37,7 @@ void project team accept <invitation-id>
|
|
|
36
37
|
void project team decline <invitation-id>
|
|
37
38
|
```
|
|
38
39
|
|
|
39
|
-
Project-scoped commands use `--project`, then `VOID_PROJECT`, then the linked project. Invitations can target only an email address already registered to a user on that platform; they do not create accounts or grant signup access. Only the invited account can accept or decline its invitation.
|
|
40
|
+
Project-scoped commands use `--project`, then `VOID_PROJECT`, then the linked project. Invitations can target only an email address already registered to a user on that platform; they do not create accounts or grant signup access. Only the invited account can accept or decline its invitation. `list` shows the same credential warning as `void project status`.
|
|
40
41
|
|
|
41
42
|
Readers can view the project but cannot deploy. Collaborators can deploy and manage deploy prerequisites. Project administrators can additionally manage domains, email destinations, GitHub configuration, and the project team. The owner alone can delete the project. See [Project Collaboration](../../guide/project-collaboration.md) for the full role boundaries.
|
|
42
43
|
|
|
@@ -137,7 +138,7 @@ void project logs --level error --range 12h
|
|
|
137
138
|
void project logs --level error --filter websocket
|
|
138
139
|
```
|
|
139
140
|
|
|
140
|
-
Logs include top-level `console.*` calls and uncaught errors captured by Cloudflare Tail. If you catch an error and save it only to your database, it won't appear here. Also log it with `console.error()` or `logger.error()` from `void/log`.
|
|
141
|
+
Logs include top-level `console.*` calls and uncaught errors captured by Cloudflare Tail. If you catch an error and save it only to your database, it won't appear here. Also log it with `console.error()` or `logger.error()` from `void/log`. On hosted Void targets, pass the `Error` object itself to `console.error()`, as in `console.error('Save failed:', error)`, to see its stack trace under the log line. Logging only `error.message` shows no stack.
|
|
141
142
|
|
|
142
143
|
For errors that never reach your Worker, such as edge routing errors or static site requests, use `void project requests --status 5xx`.
|
|
143
144
|
|
|
@@ -195,7 +196,7 @@ This command is hosted-only. Direct Cloudflare deploys are local operations and
|
|
|
195
196
|
|
|
196
197
|
## `void project delete [name]` {#void-project-delete-name}
|
|
197
198
|
|
|
198
|
-
Permanently delete a hosted Void project and all its resources (databases, KV namespaces, R2 buckets, deployments). Requires typing the project slug to confirm.
|
|
199
|
+
Permanently delete a hosted Void project and all its resources (databases, KV namespaces, R2 buckets, deployments). Requires typing the project slug to confirm; `--force` (`-f`) skips the prompt.
|
|
199
200
|
|
|
200
201
|
If `[name]` is omitted, uses the linked project.
|
|
201
202
|
|
|
@@ -211,4 +212,4 @@ Purge all cached pages for the linked project. The edge cache will clear within
|
|
|
211
212
|
|
|
212
213
|
If `--project` is provided, purges that project's cache instead of the linked project.
|
|
213
214
|
|
|
214
|
-
This command is
|
|
215
|
+
This command is hosted-only. For direct Cloudflare targets, redeploy or purge the configured ISR KV namespace yourself.
|
|
@@ -14,8 +14,6 @@ List production secret names for the saved target. Secret values are never print
|
|
|
14
14
|
|
|
15
15
|
## `void secret put` {#void-secret-put}
|
|
16
16
|
|
|
17
|
-
On hosted projects, secret writes and deletes return a retryable conflict while a deployment or rollback is in progress. Wait for that operation to finish and retry; the rejected operation leaves the stored secret unchanged.
|
|
18
|
-
|
|
19
17
|
```
|
|
20
18
|
void secret put <name> [--project <name>]
|
|
21
19
|
void secret put <name=value> [--project <name>]
|
|
@@ -27,7 +25,7 @@ Value input modes:
|
|
|
27
25
|
- prompt (TTY): `void secret put API_KEY` (masked input)
|
|
28
26
|
- stdin: `echo -n "abcd" | void secret put API_KEY`
|
|
29
27
|
|
|
30
|
-
On a direct Cloudflare target, the value is
|
|
28
|
+
On a direct Cloudflare target, the value is stored as an encrypted Worker secret.
|
|
31
29
|
|
|
32
30
|
## `void secret sync` {#void-secret-sync}
|
|
33
31
|
|
|
@@ -51,6 +49,8 @@ void secret delete <name> [--project <name>]
|
|
|
51
49
|
|
|
52
50
|
Secret commands use the platform saved in `.void/project.json`. Hosted project resolution follows the same order as deploy (`--project`, env var, linked project). Direct Cloudflare targets reject `--project` and use the pinned root Cloudflare config.
|
|
53
51
|
|
|
52
|
+
On hosted projects, secret writes and deletes return a retryable conflict while a deployment or rollback is in progress. Wait for that operation to finish and retry; the rejected operation leaves the stored secret unchanged.
|
|
53
|
+
|
|
54
54
|
## Env Schema {#env-schema}
|
|
55
55
|
|
|
56
56
|
### `void env check` {#void-env-check}
|
|
@@ -28,7 +28,7 @@ Resources recorded in `void.lock.json` without a matching definition appear sepa
|
|
|
28
28
|
## `void init` {#void-init}
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
|
-
void init [--tsconfig] [--github] [--
|
|
31
|
+
void init [--tsconfig] [--github] [--git | --no-git]
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
Set up a new or existing Void project. In an empty directory, choose Vite+ or Vite, a framework, and a D1, PostgreSQL, MySQL, or Static Pages starter.
|
|
@@ -37,6 +37,12 @@ In an existing app, Void adds missing dependencies and scripts and updates the V
|
|
|
37
37
|
|
|
38
38
|
The wizard also sets up TypeScript, agent instructions, environment declarations, and a deployment target. Choose Cloudflare, a Void platform, or skip deployment setup. If you skip sign-in, run `void connect` when you're ready. See [Quick Start](../../guide/quickstart.md).
|
|
39
39
|
|
|
40
|
+
Every init run sets up coding agents. New projects get a minimal `AGENTS.md`
|
|
41
|
+
pointing to `node_modules/void/docs/`. Existing projects prompt before the file
|
|
42
|
+
is created, appended to, or updated; CI and non-interactive runs leave existing
|
|
43
|
+
projects' instructions unchanged. Skills are linked for detected agents. See
|
|
44
|
+
[Coding Agents](../../integrations/agents.md).
|
|
45
|
+
|
|
40
46
|
Outside an existing repository or workspace package, Void offers to initialize Git. Use `--git` to initialize without a prompt or `--no-git` to skip it. CI requires `--git` to initialize. Workspace packages do not accept these flags.
|
|
41
47
|
|
|
42
48
|
Run selected setup steps with:
|
|
@@ -44,10 +50,10 @@ Run selected setup steps with:
|
|
|
44
50
|
| Flag | Purpose |
|
|
45
51
|
| ------------ | -------------------------------------------------------------- |
|
|
46
52
|
| `--tsconfig` | Update TypeScript configuration, preserving existing settings. |
|
|
47
|
-
| `--agents` | Set up agent instructions and skills for detected agents. |
|
|
48
53
|
| `--github` | Create the GitHub Actions deployment workflow. |
|
|
49
54
|
|
|
50
|
-
These flags can be combined and skip the other wizard steps.
|
|
55
|
+
These flags can be combined and skip the other wizard steps. Coding agent setup
|
|
56
|
+
still runs. Add `--git` if you also want Git initialization.
|
|
51
57
|
|
|
52
58
|
For Cloudflare workflows, add a `CLOUDFLARE_API_TOKEN` repository secret. PostgreSQL and MySQL apps also need `DATABASE_URL`.
|
|
53
59
|
|
|
@@ -60,11 +66,3 @@ void prepare
|
|
|
60
66
|
```
|
|
61
67
|
|
|
62
68
|
Generates Void’s types and TypeScript configuration without starting the dev server or building the app. Run it after a fresh clone or before typechecking in CI.
|
|
63
|
-
|
|
64
|
-
## Agent {#agent}
|
|
65
|
-
|
|
66
|
-
### `void init --agents` {#void-init-agents}
|
|
67
|
-
|
|
68
|
-
Adds Void instructions to `AGENTS.md` and links skills for detected coding agents. Existing instructions outside the Void block are preserved.
|
|
69
|
-
|
|
70
|
-
If no supported agent is detected, `AGENTS.md` links to the bundled docs. See [Coding Agents](../../integrations/agents.md).
|
|
@@ -73,7 +73,7 @@ Use this page as a command reference. If you are setting up a project for the fi
|
|
|
73
73
|
| `void email allow <address>` | Add a recipient and send a verification email |
|
|
74
74
|
| `void email disallow <address>` | Remove a recipient from the allowlist |
|
|
75
75
|
| `void email domain` | Send and receive at your own domain on a Cloudflare zone |
|
|
76
|
-
| `void init` |
|
|
76
|
+
| `void init` | Set up a new or existing project, including coding agents |
|
|
77
77
|
| `void migrate` | Convert legacy `void.json` and root Wrangler JSON/JSONC into `void.config.ts` |
|
|
78
78
|
|
|
79
79
|
## Binary Invocation {#binary-invocation}
|